Hi I have been trying to implement a loss function in keras. But i was not able to figure a way to pass more than 2 arguments other than loss(y_true, y_predict) so I thought of using a lambda layer as the last layer and doing my computation in lambda layer itslef and simply returning the value of y_predict in loss function like this
def loss_function(x):
loss = some calculations
return loss
def dummy_loss(y_true, y_pred):
return y_pred
def primary_network():
global prim_binary_tensor
x = VGG16(weights='imagenet', include_top=True, input_shape=image_shape)
last_layer = Dense(k_bit, activation='tanh', name='Dense11')(x.layers[-1].output)
last_layer, x = basic_model()
lambda_layer = Lambda(loss_function)([last_layer, prim_binary_tensor])
model = Model(inputs=[x.input, prim_binary_tensor], outputs=[lambda_layer])
model.compile(optimizer="adam", loss=dummy_loss,metrics=['accuracy'])
return model
So my question are:
1) Am I doing it the right way to calculate the loss? Is it guranteed that the lambda layer function is called for each and every image(input_data)?
2) Can someone suggest me how to pass multiple arguments to a loss function?
3) Can the final outcome of a loss function be a scalar or it has to be a vector or matrix?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…