Keras Tensorflow Отладка пользовательской функции потери - PullRequest
0 голосов
/ 12 марта 2020

У меня проблемы с отладкой пользовательской функции потерь в керасе.

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)

Выход:

Тензор ("lstm_29_input: 0", форма = (?, 1, 5), dtype = float32)
Эпоха 1/100 61550 / 61550 [==============================] - 13 с 217 мс / шаг - потеря: 0,0049
и c .

В частности, я не могу печатать какие-либо работы, пока модель тренируется. Я попробовал tf.Print и Theano Print, но безрезультатно. Когда я пытаюсь с обычным шрифтом, он печатается только один раз (когда он скомпилирован, я предполагаю). Кроме того, я попытался получить доступ к значениям input_tensor (здесь я пытался использовать различные методы, такие как kb.eval, преобразование в массив NumPy, et c.), И кажется, что мой input_tensor является только тензором-заполнителем. Это опять же, не содержит никакого значения, потому что custom_loss выполняется во время компиляции, которую я предполагаю. Как мне получить доступ к input_tensor во время выполнения?

1 Ответ

0 голосов
/ 18 марта 2020

Вы можете определить свой model.fit как al oop, отображая все обязательные поля, как показано ниже -

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...