# Define a NN loss function that considers results on two inputs?

Posted 1 year ago
1325 Views
|
2 Replies
|
1 Total Likes
|
 Is it possible to define a loss function that considers the results of applying the net to two different inputs? To be clearer, suppose I have a NN net, and a function f of two tensors. I want to use training data of the kind {in1,in2}->value where the loss function would calculate something like (f[net[in1],net[in2]] - value)^2. Is that possible?
2 Replies
Sort By:
Posted 1 year ago
 Dabrowski, I do not know if this is what you will expect, but for your information. (* training data *) in1 = Table[RandomReal[], {100}, {2}]; in2 = Table[RandomReal[], {100}, {3}]; val = Table[RandomInteger[{1, 10}], {100}]; traingdata = (Association[{"In1" -> #[[1]], "In2" -> #[[2]], "Val" -> #[[3]]}] & /@ Transpose[{in1, in2, val}]); (* define network *) net = NetGraph[{LinearLayer[5, "Input" -> 2], LinearLayer[5, "Input" -> 3]}, {NetPort["In1"] -> 1 -> NetPort["Out1"], NetPort["In2"] -> 2 -> NetPort["Out2"]}]; loss = NetGraph[{ThreadingLayer[(#1 + #2) &], SummationLayer[], MeanSquaredLossLayer[]}, {{NetPort["Out1"], NetPort["Out2"]} -> 1 -> 2, {2, NetPort["Val"]} -> 3}]; lossNet = NetGraph[{"net" -> net, "loss" -> loss}, {NetPort["net", "Out1"] -> NetPort["loss", "Out1"], NetPort["net", "Out2"] -> NetPort["loss", "Out2"]}]; (* training *) results = NetTrain[lossNet, traingdata]