2017-04-19 146 views

回答

0

實際上,一種解決方法是在編譯模型時添加要監視的數量作爲度量。

舉例來說,我想監視KL散度(在變自動編碼器的情況下),所以我寫了這個:

def kl_loss(y_true, y_pred): 
    kl_loss = - 0.5 * K.sum(1 + K.log(z_var_0+1e-8) - K.square(z_mean_0) - z_var_0, axis=-1) 
    return kl_loss 

vae.compile(optimizer='rmsprop', loss=vae_loss, metrics=['accuracy', kl_loss]) 

它做什麼,我需要

1

您是否嘗試過TensorBoard回調? [1]

tensorboard = keras.callbacks.TensorBoard(log_dir='./logs', 
       histogram_freq=1, 
       write_graph=True, 
       write_images=False) 
vae.fit(x_train, 
     shuffle=True, 
     epochs=epochs, 
     batch_size=batch_size, 
     validation_data=(x_test, x_test), 
     callbacks=[tensorboard]) 

然後運行:

tensorboard --logdir=./logs 

你可以寫回調來處理你感興趣的特定項目的修改版本

[1] https://keras.io/callbacks/#tensorboard

+0

Tensorboard是很不錯,但它不夠靈活。例如,如果我的損失過於分a和b,a + b是總損失(但是在模型的相同輸出上計算),我無法單獨監控a和b,但只能分別監控它們的總和a + b。我希望能夠同時監控,而tf.summary只是允許這樣做,但我不知道如何與Keras進行溝通 – sbaur

+0

Tensorboard回調使用'tf.summary.histogram'和'tf.summary.FileWriter '傾銷Tensorboard的日誌。 https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L631所以它可能很容易定義你自己的lambda回調,發送你想要的選項tf.summary – MattMcKnight

+1

我沒有想過關於看回調.TensorBoard源代碼,這裏有很多有用的代碼。非常感謝,它確實有幫助! – sbaur

相關問題