【问题标题】:Keras - monitoring quantities with TensorBoard during trainingKeras - 在训练期间使用 TensorBoard 监控数量
【发布时间】:2017-04-19 16:16:03
【问题描述】:

借助 Tensorflow,可以使用 tf.summary 在训练期间监控数量。

是否可以使用 Keras 做同样的事情?您能否通过修改https://github.com/fchollet/keras/blob/master/examples/variational_autoencoder.py 处的代码并监控KL 损失(定义at line 53)来包含一个示例

提前谢谢你!

【问题讨论】:

    标签: monitoring keras tensorboard autoencoder


    【解决方案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

    【讨论】:

    • Tensorboard 非常好,但不够灵活。例如,如果我的损失有太多部分 a 和 b,a+b 是总损失(但在模型的相同输出上计算),我不能单独监控 a 和 b,而只能监控它们的总和 a+b。我希望能够同时监控两者,而 tf.summary 只是允许这样做,但我不确定如何使用 Keras 来做到这一点
    • Tensorboard 回调使用 tf.summary.histogramtf.summary.FileWriter 转储 Tensorboard 的日志。 github.com/fchollet/keras/blob/master/keras/callbacks.py#L631 所以定义你自己的 lambda 回调可能很容易,它将你想要的选项发送到 tf.summary
    • 我没想到看callback.TensorBoard源代码,这里有很多有用的代码。非常感谢,真的很有帮助!
    【解决方案2】:

    实际上,一种解决方法是在编译模型时添加要监控的数量作为指标。

    例如,我想监控 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])
    

    它可以满足我的需要

    【讨论】:

    • 值得注意的是,如果loss=None,则不会评估任何指标。 Keras VAE 示例通常就是这种情况。
    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 2020-01-26
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2017-07-12
    相关资源
    最近更新 更多