tensorflow - Tensorboard 未在 Google Colab 中批量更新

标签 tensorflow google-colaboratory tensorboard

我在谷歌colab中使用tensorboard,如果我想跟踪纪元,它可以正常工作。但是,我想按批处理跟踪准确性/损失。我正在尝试使用文档 https://www.tensorflow.org/tensorboard/get_started 中的入门指南但如果我通过 update_freq="batch" 更改参数 update_freq ,它就不起作用。我已经在本地电脑上尝试过了,它可以工作。知道发生了什么吗?

使用tensorboard 2.8.0和tensorflow 2.8.0

代码(在colab中运行)

%load_ext tensorboard
import tensorflow as tf
import datetime
!rm -rf ./logs/ 
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])
model = create_model()
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

log_dir = "logs/fit_2/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, update_freq="batch")

model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])

我尝试过使用整数,但也不起作用。在我的本地计算机上我没有任何问题。

最佳答案

TensorFlow 2.3 后的更改使批级摘要成为 Model.train_function 的一部分,而不是 TensorBoard 回调自行创建的内容。这使得 Model.fit 中的许多小模型的速度提高了 2 倍,但它确实有一个副作用,即在自定义训练循环将不再记录批处理级指标。

此问题已在 GitHub issue 之一中讨论过。 .

可以通过创建自定义回调来解决此问题,例如 LambdaCallback .

我修改了代码的最后一部分,使用tf.summary.scalar()显式添加batch_loss和batch_accuracy的标量值,以显示在张量板日志中。

代码模块如下:

model = create_model()
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

from keras.callbacks import LambdaCallback

def batchOutput(batch, logs):
    tf.summary.scalar('batch_loss', data=logs['loss'], step=batch)
    tf.summary.scalar('batch_accuracy', data=logs['accuracy'], step=batch)
    return batch

batchLogCallback = LambdaCallback(on_batch_end=batchOutput)


log_dir = "logs/fit_2/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs', update_freq='batch')

model.fit(x=x_train, 
          y=y_train, 
          epochs=1, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback, batchLogCallback])

我在 Colab 中尝试过,它也有效。

关于tensorflow - Tensorboard 未在 Google Colab 中批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71594268/

相关文章:

python - 删除操作图 tensorflow 以在CPU上运行

tensorflow - Keras:TPU 模型的所有操作都必须具有恒定的形状

google-colaboratory - colab 虚拟机的生命周期?

python - 参数 "never_split"在 bert 分词器上不起作用

c++ - 为TensorFlow Lite C++编写read_jpeg和解码_jpeg函数

python - 如何在谷歌协作笔记本中显示 plotly 输出?

python-3.x - 如何将张量板与 tf.estimator.Estimator 一起使用

python - Tensorflow 通过 eval_metric_ops 在 Tensorboard 中绘制 tf.metrics. precision_at_thresholds

python - TensorBoard 元数据 UnicodeDecodeError

tensorflow 构建失败,出现 "missing dependency"错误