tensorflow在训练中实时显示loss曲线

在使用一个现有网络时,我想提取并显示训练过程中的loss值以观察网络的训练过程,这包含了提取loss值和实时显示loss曲线两个步骤。

1. 提取loss值

原网络的代码有在构建网络的build_model函数中计算loss的,并在self.train_loss变量中逐次更新。tensorflow在训练过程中,网络的数据流是看不见的,可以通过会话提取。所以我在train函数中找到sess.run,在该会话的输出中增加train_loss,完成当前loss值的提取。

2. 实时显示loss曲线

可以使用TensorBoard或者直接调用matplotlib库开绘制曲线,这里主要介绍第二种方法。TensorBoard是一个可视化工具,可以用它读取日志数据来绘制数据曲线。但由于我是在tf2上运行tf1版本的代码,在写出日志时有些语句有版本冲突,所以我选择使用matplotlib.pyplot库在训练过程中实时绘制图像。我在同一个figure窗口中绘制了两个子图,分别是loss曲线和RMSE曲线,都可以用于观察训练结果的稳定程度。摘录train函数的绘制曲线代码如下:

import matplotlib.pyplot as plt

# 初始化曲线变量
x_train = []
x_test = []
train_loss_list = []
se_list = []

# 初始化图像窗口
fig = plt.figure()
plt.ion()

# 初始化子图
ax1 = fig.add_subplot(2, 1, 1)
plt.xlabel('iter_count')
plt.ylabel('loss')

ax2 = fig.add_subplot(2, 1, 2)
plt.xlabel('iter_count')
plt.ylabel('RMSE')


for iter_count in range(1,1e6):
    # 提取loss值和RMSE值
    train_loss, rmse1, _ = self.sess.run([self.train_loss, self.train_step], feed_dict={
                    self.x: self.batch_input_images, 
                    self.y1: self.batch_true_images1, 
                    self.lr_input: 0.0001})

    # 每100次迭代绘制一个loss值
    if np.mod(iter_count, 100) == 1:
        x_train.append(iter_count)
        train_loss_list.append(train_loss)
        ax1.plot(x_train, train_loss_list, '-r')
        plt.pause(0.01)
    
    # 每1000次迭代绘制一个RMSE值
    if np.mod(iter_count, 1000) == 2:
        x_test.append(iter_count)
        se_list.append(rmse1)        
        ax2.plot(x_test, se_list, '-g')
        plt.pause(0.01)

绘制结果如下:

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要绘制TensorFlowloss曲线,可以使用TensorBoard。TensorBoard是TensorFlow的可视化工具,可以帮助用户可视化训练过程的各种指标,包括loss曲线。 具体步骤如下: 1. 在训练代码,使用tf.summary.scalar()函数记录loss值,例如: ``` loss_summary = tf.summary.scalar('loss', loss) ``` 2. 在训练代码,使用tf.summary.FileWriter()函数将summary写入磁盘,例如: ``` summary_writer = tf.summary.FileWriter(log_dir, sess.graph) ``` 其log_dir是保存summary的目录。 3. 在终端运行TensorBoard,例如: ``` tensorboard --logdir=log_dir ``` 其log_dir是保存summary的目录。 4. 在浏览器打开TensorBoard的网址,例如: ``` http://localhost:6006/ ``` 5. 在TensorBoard的界面,选择SCALARS选项卡,可以看到loss曲线。 以上就是使用TensorFlow绘制loss曲线的步骤。 ### 回答2: TensorFlow是一种广泛应用于各个领域的机器学习框架,其模型训练过程,监测训练曲线是非常有必要的。其loss曲线是最常用的一种监测方式。 TensorFlow 提供了一个非常方便的方法,可以直接在训练过程绘制 loss 曲线。首先,在训练代码需要定义一个 TensorBoard 的文件写入器: ```python # 定义 TensorBoard 文件写入器 summary_writer = tf.summary.create_file_writer(log_dir) ``` 接下来,在训练过程,可以通过下面的代码将训练过程loss 值和训练步数写入 TensorBoard 文件: ```python # 定义 TensorBoard 的 Scalar(标量)曲线 with summary_writer.as_default(): tf.summary.scalar('loss', loss, step=global_step) ``` 其,第一个参数 'loss' 是 scalar 图表的名称,第二个参数 loss 是当前训练步数loss 值,第三个参数 global_step 是训步数步数。 最后,在 TensorBoard 查看 loss 曲线,可以运行以下命令: ```bash tensorboard --logdir=log_dir ``` 其,log_dir是保存TensorBoard文件的目录路径。运行 tensorboard 命令后,会在终端输出类似如下的信息: ```bash TensorBoard 2.2.0 at http://localhost:6006/ (Press CTRL+C to quit) ``` 在浏览器访问该链接,就可以看到 TensorBoard 页面,可以选择 Scalar 选项卡,在其可以看到已经绘制loss 曲线。 在 TensorBoard ,不仅可以展示 loss 曲线,还可以展示各种其他曲线,例如准确率曲线、参数分布曲线、梯度分布曲线等等。TensorBoard提供了强大的可视化功能,可以帮助我们更加深入地理解模型的训练过程,并能够更好地优化我们的模型。 ### 回答3: TensorFlow是一个开源的人工智能框架,它支持多种机器学习算法的实现。在训练一个深度学习网络时,往往需要绘制训练loss曲线来监控模型的训练效果,同时也便于作出相应的优化策略。 以下是用TensorFlow绘制loss曲线的具体步骤: 第一步,定义网络结构: 首先需要定义深度学习网络结构,例如使用tf.keras.Sequential()函数按顺序堆叠多个层。然后定义激活函数、优化器、损失函数等,例如使用tf.keras.optimizers.Adam()优化器、tf.keras.losses.CategoricalCrossentropy()损失函数等,以提高模型的训练效果。 第二步,定义回调函数: 在TensorFlow,回调函数是一种函数或一组函数,它在训练阶段的特定时刻被调用。我们需要使用tf.keras.callbacks.Callback()函数来定义自己的回调函数,并覆盖其的on_train_begin()、on_epoch_end()等方法。在回调函数,我们可以记录每个epoch的loss,并将其存储起来。 第三步,训练模型: 接下来需要使用model.fit()函数进行模型训练,并将自己定义的回调函数加入其。例如: ``` history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), callbacks=[MyCallback()]) ``` 第四步,绘制loss曲线训练结束后,我们可以使用历史数据loss记录来绘制loss曲线。例如: ``` import matplotlib.pyplot as plt loss = history.history['loss'] val_loss = history.history['val_loss'] plt.plot(loss, label='Training Loss') plt.plot(val_loss, label='Validation Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() plt.show() ``` 通过以上步骤,我们就可以使用TensorFlow绘制loss曲线了。同时,我们也可以使用回调函数记录其它指标,例如accuracy、precision等,并用相应的方法进行可视化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值