tensorflow TensorBoard回调函数无法正确更新步骤 翻译结果:TensorBoard回调函数无法正确更新步骤,

v8wbuo2f  于 4个月前  发布在  其他
关注(0)|答案(6)|浏览(54)

系统信息

  • 是否编写了自定义代码(与在TensorFlow中使用提供的库存示例脚本相反):是
  • OS平台和发行版:18.04.1-Ubuntu
  • 从哪里安装的TensorFlow(源代码或二进制文件):二进制
  • TensorFlow版本(请使用下面的命令):v2.3.0-rc2-23-gb36436b087 2.3.0
  • Python版本:3.6.9
  • CUDA/cuDNN版本:libcudart.so.10.1
  • GPU型号和内存:GeForce RTX 2080 Ti
    描述当前行为

如果在使用tf.summary操作时,tf.keras.callbacks.TensorBoard回调处于活动状态,则默认的step始终为0
这不会影响已记录指标的步长值,因为tf.keras.Model不依赖于默认步长,而是直接使用_train_counter
原因在于https://github.com/tensorflow/tensorflow/blob/v2.3.1/tensorflow/python/keras/callbacks.py#L2075,其中评估了step变量的值,即self._train_step(也称为self.model._train_counter),但在新的批次开始时不调用它。

描述预期行为

默认步长值,即tf.summary.experimental.get_step()返回的值,应反映当前步骤。由于self._train_step是一个变量,只需将其直接传递给tf.summary.experimental.set_step()即可。

重现问题的独立代码

在训练过程中使用tf.summary.scalar记录任意标量,但不要提供step参数。确保创建了一个tf.keras.callbacks.TensorBoard并设置了update_freq参数。

kq4fsx7k

kq4fsx7k1#

我编写了一个快速的热修复,它对我有效:

class TensorBoardFix(tf.keras.callbacks.TensorBoard):
    """
    This fixes incorrect step values when using the TensorBoard callback with custom summary ops
    """

    def on_train_begin(self, *args, **kwargs):
        super(TensorBoardFix, self).on_train_begin(*args, **kwargs)
        tf.summary.experimental.set_step(self._train_step)

    def on_test_begin(self, *args, **kwargs):
        super(TensorBoardFix, self).on_test_begin(*args, **kwargs)
        tf.summary.experimental.set_step(self._val_step)
7d7tgy0s

7d7tgy0s2#

你看到这样的公关有什么副作用吗?

34gzjxbg

34gzjxbg3#

如果你正在修改代码,你可能也想考虑更新文档。目前还没有记录TensorBoard回调设置默认写入器。我最初在尝试从TensorBoard回调中劫持写入器时遇到了这个问题,意识到这个类已经实现了我想要的功能。

x6yk4ghg

x6yk4ghg4#

请使用最新版本的TensorFlow进行验证,并告知我们是否仍然遇到此问题。

oknwwptz

oknwwptz5#

这个问题在TensorFlow 2.5.0中仍然存在。当我使用tf.summary.*操作来记录我想要的标量和图像时,它们的步骤总是在TensorBoard中的0。而@sehoffmann提到的 Package 类TensorBoardFix在TF 2.5.0中作为临时解决方案工作。

g6ll5ycj

g6ll5ycj6#

请使用最新版本的TensorFlow进行验证,并告知我们是否仍然遇到此问题。
这个问题在TensorFlow 2.6.0中仍然存在。我可以将包含修复程序的PR推送到keras以解决它吗?

相关问题