2017-04-19 111 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