【Tensorflow】tensorboard小结

every blog every motto: What doesn’t kill you makes you stronger.

0. 前言

废话: 近一段时间都没怎么写博客了,大概是在摸鱼吧。(划水快乐,:))
本节主要对两种tenorboard的使用进行小结,并对多个events.out.tfevent文件无法在同一张图中显示,给出了解决办法。
说明: 后续可能会增补

1. 正文

什么是tensorboard?
可以简单理解为保存了训练过程中的accuracy 和loss 的变化情况
说明:
1.不仅限于此,还能保存计算图等信息。
2. 本文主要将对accuracy 和 loss的保存

1.1 方法一:回调函数

保存为.h5格式文件

1.1.1 保存

我们可以在回调函数中设置。部分代码如下:

# 回调函数 Tensorboard(文件夹)\earylystopping\ModelCheckpoint(文件名)
logdir = os.path.join("callbacks")
print(logdir)
if not os.path.exists(logdir):
    os.mkdir(logdir)
# 文件名
output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")

callbacks = [
    keras.callbacks.TensorBoard(logdir),
    keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),
    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),
]

# 开始训练
history = model.fit(x_train_scaled,y_train,epochs=10,validation_data=(x_valid_scaled,y_valid),callbacks=callbacks)

1.1.2 展示

在终端输入如下代码

tensorboard --logdir=callbacks

注意:

  1. 所处的当前环境要有tensorflow
  2. 上面代码中callbacks为你的callbacks的路径

显示如下:
在这里插入图片描述
在浏览器输入:http://localhost:6006/
即可查看:
在这里插入图片描述
详细步骤参考文后链接

1.2 方法二:tf.summary

保存为类似“events.out.tfevents.1608523036.leeP510.26215.5.v2”文件

1.2.1 保存

创建写入句柄

# 训练和验证summary文件的保存位置,用于在tensorboard中查看训练的参数(accuary,loss)的变化
train_writer = tf.summary.create_file_writer(train_log_dir)
valid_writer = tf.summary.create_file_writer(valid_log_dir)

生成准确度、损失函数、优化器的对象

# 准确度、损失函数、优化器
accuracy = metrics.BinaryAccuracy()  # 二分类准确度 训练集上
accuracy_val = metrics.BinaryAccuracy()  # 二分类准确度计算 验证集上
loss_bc = losses.BinaryCrossentropy()  # 损失函数
optimizer = optimizers.Adam(learning_rate=self.learning_rate, beta_1=self.args.beta1)

以验证集为例:
获取准确度、损失等

# 2. 验证集上
epoch_total_val_loss = []  # 一个epoch内的loss
for i, (x_val_batch, y_val_batch) in enumerate(valid_data):
    # 模型产生预测图
    pred_val = model(x_val_batch)
    # 模型产生的预测图(包括模型中间产生的预测图)与标签与交叉熵计算
    v_logits, v_loss = pre_process_binary_cross_entropy(loss_bc, pred_val, y_val_batch)
    # 用模型最后产生的预测图和真实标签更新准确度
    accuracy_val.update_state(y_true=y_val_batch, y_pred=v_logits[-1])
    # 保存一次迭代的损失
    epoch_total_val_loss.append(v_loss.numpy())

val_acc = accuracy_val.result()  # 获取准确度

epoch_total_val_loss = np.array(epoch_total_val_loss)  # 列表损失转数组
print('-------epoch(validation):', epoch, 'val loss:', epoch_total_val_loss.mean(), 'accuracy:',
      val_acc.numpy())

保存与重置

# 保存验证集上的summary(loos,accurcy)
with valid_writer.as_default():
    tf.summary.scalar('loss', epoch_total_val_loss.mean(), step=epoch)
    tf.summary.scalar('accuracy', val_acc.numpy(), step=epoch)

# 重置准确度
accuracy.reset_states()
accuracy_val.reset_states()

1.2.2 展示

在终端输入:

tensorboard --logdir=D:\Data_saved\Desktop\tes\服务器\train

具体如下:
在这里插入图片描述
浏览器输入上面的网址:
在这里插入图片描述
存在的问题:
训练和验证的指标保存在两个文件中,目前尚不知如何在一张图总显示(类似上面的第一种方法的结果)
解决方法:
存在问题的文件组织方式:

-test
	-log
		events.out.tfevents.1608522481.DESKTOP-IIN3E21.2448.13.v2
		events.out.tfevents.1608523036.leeP510.26215.13.v2

在这里插入图片描述

命令:

tensorboard --logdir=D:\Data_saved\Desktop\tes\服务器\train

在这里插入图片描述

打开tensorboard
图形变得紊乱。
在这里插入图片描述
新的文件组织

-test
	-train
		events.out.tfevents.1608522481.DESKTOP-IIN3E21.2448.13.v2
	-valid
		events.out.tfevents.1608523036.leeP510.26215.13.v2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
命令:
注意: 命令中的文件夹只到父级目录

tensorboard --logdir=D:\Data_saved\Desktop\tes\服务器

在这里插入图片描述
结果:
图中根据文件夹的名字(train/valid)分别对图中的线进行了命名
在这里插入图片描述
好吧,我过拟合了,摔:(

参考文献

[1] https://www.cnblogs.com/Java3y/p/10740196.html
[2] https://blog.csdn.net/weixin_39190382/article/details/104113449
[3]https://blog.csdn.net/m0_37188294/article/details/84999265
[4]https://www.pianshen.com/article/316476506/
[5]https://www.94e.cn/info/2232

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值