Keras Tensorflow自定义损失函数调试

时间:2020-03-11 22:02:02

标签: python tensorflow keras

我无法在keras中调试自定义损失功能。

def custom_loss_wrapper(input_tensor):
   def custom_loss(y_true, y_pred):
      diff = y_pred - y_true
      diff = kb.print_tensor(diff)
      print(input_tensor)
   return kb.square(diff)
return custom_loss

model.compile(optimizer='adam',loss=custom_loss_wrapper(model.input)) 
model.fit(x=training_set,y=target_set,epochs=100)

输出:

Tensor(“ lstm_29_input:0”,shape =(?, 1,5),dtype = float32)
时代1/100 61550/61550 [=============================]-13秒217us / step-损耗:0.0049

特别是,在模型训练期间,我似乎无法制作任何形式的作品。我尝试了tf.Print和Theano Print,但无济于事。当我尝试正常打印时,它只会被打印一次(假定它被编译时)。另外,我尝试访问input_tensor的值(在这里我尝试了kb.eval之类的各种方法,转换为NumPy数组等),似乎input_tensor只是一个占位符张量。同样,该值不包含任何值,因为在我假定的编译期间正在执行custom_loss。我如何在运行时访问input_tensor?

1 个答案:

答案 0 :(得分:0)

您可以将model.fit定义为显示所有必填字段的循环,如下所示-

for epoch in range(1,5):
        model.fit(x, y, batch_size=64, epochs= epoch, initial_epoch = (epoch-1), verbose=1, validation_split=0.2, shuffle=True)
        inputs = model.model._feed_inputs + model.model._feed_targets + model.model._feed_sample_weights
        print(model.input)
        print(model.total_loss)
        print(model.trainable_weights)