Tensorflow TensorBoard 不显示 acc、loss、acc_val 和 loss_val 仅仅显示 epoch_accuracy 和 epoch_loss

标签 tensorflow machine-learning keras deep-learning tensorboard

我希望有一个 TensorBoard 显示与 acc、loss、acc_val 和 loss_val 对应的图表,但由于某种原因它们没有出现。这是我所看到的。

enter image description here

我正在寻找这个: enter image description here

我正在按照指示here进行操作能够在 Google Colab 笔记本中使用 Tensorboard

这是用于生成张量板的代码:

opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)

tensorboard = TensorBoard(log_dir="logs/{}".format(NAME), 
                          histogram_freq=1, 
                          write_graph=True, 
                          write_grads=True, 
                          batch_size=BATCH_SIZE, 
                          write_images=True)

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

# Train model
history = model.fit(
     train_x, train_y,
     batch_size=BATCH_SIZE,
     epochs=EPOCHS,
     validation_data=(validation_x, validation_y),
     callbacks=[tensorboard]
)

我该如何解决这个问题?有任何想法吗?非常感谢您的帮助!

最佳答案

这就是预期的行为。如果您想记录动态学习率等自定义标量,则需要使用 TensorFlow Summary API。

重新训练回归模型并记录自定义学习率。方法如下:

  1. 使用 tf.summary.create_file_writer() 创建文件编写器。
  2. 定义自定义学习率函数。这将传递给 Keras LearningRateScheduler 回调。
  3. 在学习率函数内,使用 tf.summary.scalar() 记录自定义学习率。
  4. LearningRateScheduler 回调传递给 Model.fit()

一般来说,要记录自定义标量,您需要将 tf.summary.scalar() 与文件编写器结合使用。文件编写器负责将此运行的数据写入指定目录,并在您使用 tf.summary.scalar() 时隐式使用。

logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()

def lr_schedule(epoch):
  """
  Returns a custom learning rate that decreases as epochs progress.
  """
  learning_rate = 0.2
  if epoch > 10:
    learning_rate = 0.02
  if epoch > 20:
    learning_rate = 0.01
  if epoch > 50:
    learning_rate = 0.005

  tf.summary.scalar('learning rate', data=learning_rate, step=epoch)
  return learning_rate

lr_callback = keras.callbacks.LearningRateScheduler(lr_schedule)
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(),
)

training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback, lr_callback],
)

关于Tensorflow TensorBoard 不显示 acc、loss、acc_val 和 loss_val 仅仅显示 epoch_accuracy 和 epoch_loss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59587769/

相关文章:

tensorflow - TensorFlow 中 getter 的概念

python - 如何在keras中测试自定义损失函数?

machine-learning - Weka 添加多个元过滤分类器

python - 使用您自己保存的模型在 Keras 中进行迁移学习

debugging - Keras fit 和 fit_generator 返回完全不同的结果

python - 绘制 keras 自定义模型时,“ListWrapper”对象没有属性 'name'

python - 无法操作列表

numpy - 主动学习分层抽样的实现

python - Keras:模型精度在达到 99% 精度和损失 0.01 后下降

python - 检查 tensorflow 占位符是否已填充