TensorFlow和PyTorch框架绘制loss和accuracy曲线

1.前言

搞深度学习时,我们一般会遇到一个问题,评估模型的性能:这时,一般会绘制模型在训练集 & 验证集上的准确率值和损失值曲线。

在这一点上TensorFlow框架比PyTorch框架方便,因为TensorFlow框架在训练模型时,把模型、训练集和验证集上的accuracy和loss都保存到了对象中,我们使用时直接取即可。

而使用PyTorch框架时,需要我们自己定义变量保存这些结果,在绘图时使用。

2.TensorFlow框架绘制loss和accuracy曲线


history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
                    epochs=10)
print(history.params)
print_history(history) #调用绘图函数

#绘图函数
def print_history(history):
    # 绘制训练 & 验证的准确率值
    plt.plot(history.history['accuracy'])
    plt.plot(history.history['val_accuracy'])
    plt.plot(history.history['loss'])
    plt.plot(history.history['val_loss'])
    plt.title('Model accuracy&loss')
    plt.xlabel('Epoch')
    plt.legend(['Train_acc', 'Val_acc', 'Train_loss', 'Val_loss'])
    plt.show()

在这里插入图片描述

3.PyTorch框架绘制loss和accuracy曲线

# 用数组保存每一轮迭代中,训练的损失值和精确度,也是为了通过画图展示出来。
train_losses = []
train_acces = []
# 用数组保存每一轮迭代中,在测试数据上测试的损失值和精确度,也是为了通过画图展示出来。
eval_losses = []
eval_acces = []

#绘图代码
plt.plot(np.arange(len(train_losses)), train_losses,label="train loss")
plt.plot(np.arange(len(train_acces)), train_acces, label="train acc")
plt.plot(np.arange(len(eval_losses)), eval_losses, label="valid loss")
plt.plot(np.arange(len(eval_acces)), eval_acces, label="valid acc")
plt.legend() #显示图例
plt.xlabel('epoches')
plt.title('Model accuracy&loss')
plt.show()

使用示例程序:

train_losses = []
train_acces = []
# 用数组保存每一轮迭代中,在测试数据上测试的损失值和精确度,也是为了通过画图展示出来。
eval_losses = []
eval_acces = []

for e in range(100):


    # 4.1==========================训练模式==========================
    train_loss = 0
    train_acc = 0
    model.train()   # 将模型改为训练模式

    # 每次迭代都是处理一个小批量的数据,batch_size是64
    for im, label in train_data:
        im = Variable(im)
        label = Variable(label)

        # 计算前向传播,并且得到损失函数的值
        out = model(im)

        loss = criterion(out, label)

        # 反向传播,记得要把上一次的梯度清0,反向传播,并且step更新相应的参数。
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # 记录误差
        train_loss += loss.item()

        # 计算分类的准确率
        out_t = out.argmax(dim=1) #取出预测的最大值
        num_correct = (out_t == label).sum().item()
        acc = num_correct / im.shape[0]
        train_acc += acc

    train_losses.append(train_loss / len(train_data))
    train_acces.append(train_acc / len(train_data))



    # 4.2==========================每次进行完一个训练迭代,就去测试一把看看此时的效果==========================
    # 在测试集上检验效果
    eval_loss = 0
    eval_acc = 0
    model.eval()  # 将模型改为预测模式

    # 每次迭代都是处理一个小批量的数据,batch_size是128
    for im, label in test_data:
        im = Variable(im)  # torch中训练需要将其封装即Variable,此处封装像素即784
        label = Variable(label)  # 此处为标签

        out = model(im)  # 经网络输出的结果
        loss = criterion(out, label)  # 得到误差

        # 记录误差
        eval_loss += loss.item()

        # 记录准确率
        out_t = out.argmax(dim=1)  # 取出预测的最大值的索引
        num_correct = (out_t == label).sum().item()  # 判断是否预测正确
        acc = num_correct / im.shape[0]  # 计算准确率
        eval_acc += acc

    eval_losses.append(eval_loss / len(test_data))
    eval_acces.append(eval_acc / len(test_data))
    print('epoch: {}, Train Loss: {:.6f}, Train Acc: {:.6f}, Eval Loss: {:.6f}, Eval Acc: {:.6f}'
          .format(e, train_loss / len(train_data), train_acc / len(train_data),
                  eval_loss / len(test_data), eval_acc / len(test_data)))

plt.plot(np.arange(len(train_losses)), train_losses,label="train loss")

plt.plot(np.arange(len(train_acces)), train_acces, label="train acc")

plt.plot(np.arange(len(eval_losses)), eval_losses, label="valid loss")

plt.plot(np.arange(len(eval_acces)), eval_acces, label="valid acc")
plt.legend() #显示图例
plt.xlabel('epoches')
#plt.ylabel("epoch")
plt.title('Model accuracy&loss')
plt.show()

在这里插入图片描述

4.pytorch中使用tensorboard绘制Accuracy/Loss曲线

参见博客:pytorch中使用tensorboard绘制Accuracy/Loss曲线(train和test显示在同一幅图中)

  • 39
    点赞
  • 401
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

做个好男人!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值