【发布时间】:2021-03-06 04:35:24
【问题描述】:
我正在使用 tensorflow 2.1 和 tf.keras,无论是添加自定义指标作为简单函数还是指标子类实例,在训练期间,自定义指标只会在训练开始时调用,而不是在每个 epoch 之后调用期待。例如,运行的开始如下(比通常的测试大得多的验证段),其中度量在update_state() 和result() 期间打印,但只到 epoch 1。在这种情况下,度量返回一个虚拟数字每次更新调用都会增加,达到 2 并且不再进一步。提供的指标,如 BinaryAccuracy do 在每个时期后都会产生不同的数字,所以我认为我遗漏或误解了某些东西。观察到的行为有什么解释?
update
result
Train on 4418 samples, validate on 4418 samples
Epoch 1/120
update
result
result
3800/4418 [========================>.....] - ETA: 0s - loss: 0.1597 - binary_true_positives: 2.0000 result
4418/4418 [==============================] - 3s 622us/sample - loss: 0.1500 - binary_true_positives: 2.0000 - val_loss: 0.0986 - val_binary_true_positives: 2.0000
Epoch 2/120
4418/4418 [==============================] - 0s 89us/sample - loss: 0.0868 - binary_true_positives: 2.0000 - val_loss: 0.0643 - val_binary_true_positives: 2.0000
已解决:进一步观察后,自定义指标在每个 epoch 后按预期生成,只是生成它们的 Python 代码没有被执行。我突然意识到,代码很可能已转换为 TensorFlow 图(可在 TensorBoard 中查看),并且指标是通过执行编译后的图而不是导致生成图表示的原始 Python 代码生成的。
【问题讨论】:
-
你能分享你正在使用的代码吗?如果我们有一个可以自己运行的示例(可以是虚拟的 1 层模型,虚拟数据),那就容易多了。
-
谢谢 代码是更大系统的一部分,不是独立的,所以我会看一个最小的测试用例并在之后更新。
-
@ibarrond 再次感谢。发现 TensorFlow 图形执行将是解释。
-
您仍然可以回答自己的问题并获得积分,它可以帮助其他人!至少简要解释一下你是如何解决它的
-
如果您想在每次评估度量“图表”时打印一些内容,您可以添加
tf.print()而不是print(),因为 tf.print() 是模型/拟合图中的操作
标签: tensorflow keras