logging - Keras,附加到回调日志

标签 logging callback keras

我有一个回调函数,用于在 on_epoch_end 中计算验证数据的几个附加指标以及每 10 个周期的测试数据。

我还有一个 CSVLogger 回调,可将正常指标保存到日志文件中。

有没有一种简单的方法可以从我的回调中添加一两列到 CSVLogger 正确写入的日志中?

最佳答案

您可以将其他指标插入到字典logs中。

from keras.callbacks import Callback

class ComputeMetrics(Callback):
    def on_epoch_end(self, epoch, logs):
        logs['val_metric'] = epoch ** 2  # replace it with your metrics
        if (epoch + 1) % 10 == 0:
            logs['test_metric'] = epoch ** 3  # same
        else:
            logs['test_metric'] = np.nan

请记住将此回调放在 fit 调用中的 CSVLogger 之前。列表中后面出现的回调将收到 logs 的修改版本。例如,

model = Sequential([Dense(1, input_shape=(10,))])
model.compile(loss='mse', optimizer='adam')
model.fit(np.random.rand(100, 10),
          np.random.rand(100),
          epochs=30,
          validation_data=(np.random.rand(100, 10), np.random.rand(100)),
          callbacks=[ComputeMetrics(), CSVLogger('1.log')])

现在,如果您查看输出日志文件,您将看到另外两列 test_metricval_metric:

epoch,loss,test_metric,val_loss,val_metric
0,0.547923130989,nan,0.370979120433,0
1,0.525437340736,nan,0.35585285902,1
2,0.501358469725,nan,0.341958616376,4
3,0.479624577463,nan,0.329370084703,9
4,0.460121934414,nan,0.317930338383,16
5,0.440655426979,nan,0.307486981452,25
6,0.422990380526,nan,0.298160370588,36
7,0.406809270382,nan,0.289906248748,49
8,0.3912438941,nan,0.282540213466,64
9,0.377326357365,729,0.276457450986,81
10,0.364721306562,nan,0.271435074806,100
11,0.353612961769,nan,0.266939682364,121
12,0.343238875866,nan,0.263228923082,144
13,0.333940329552,nan,0.260326927304,169
14,0.325931007862,nan,0.25773427248,196
15,0.317790198028,nan,0.255648627281,225
16,0.310636150837,nan,0.25411529541,256
17,0.304091459513,nan,0.252928718328,289
18,0.298703012466,nan,0.252127869725,324
19,0.292693507671,6859,0.251701972485,361
20,0.287824733257,nan,0.251610517502,400
21,0.283586999774,nan,0.251790778637,441
22,0.27927801609,nan,0.252100949883,484
23,0.276239238977,nan,0.252632959485,529
24,0.273072380424,nan,0.253150621653,576
25,0.270296501517,nan,0.253555388451,625
26,0.268056542277,nan,0.254015884399,676
27,0.266158599854,nan,0.254496408701,729
28,0.264166412354,nan,0.254723013639,784
29,0.262506003976,24389,0.255338237286,841

关于logging - Keras,附加到回调日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488549/

相关文章:

javascript - 在 Javascript 中存储来自 AWS S3 SDK 的 listObject 数据

python - 如果不用于推理,那么训练 seq2seq 模型有什么意义呢?

python - Keras [文本多分类] - 训练和测试的准确性良好,但预测较差

java - Log4j2 基于属性禁用附加程序

java - 如何在 JBoss 中禁用 std-out 捕获?

python - 当级别设置为logging.DEBUG时,为什么log.debug()不记录日志?

logging - 使用 Stomp 和 Apache ActiveMQ 作为可靠的系统日志

c++ - 使用 Windows 消息循环实现回调

javascript - 如何在不使用异步的情况下控制回调并阻止它们返回?

tensorflow - Keras 对不同的错误分类应用不同的权重