首页  > 世界杯男足 > TensorFlow和PyTorch框架绘制loss和accuracy曲线

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

世界杯男足 2025-08-05 18:19:56 709

文章目录

1.前言2.TensorFlow框架绘制loss和accuracy曲线3.PyTorch框架绘制loss和accuracy曲线4.pytorch中使用tensorboard绘制Accuracy/Loss曲线

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显示在同一幅图中)


友情链接:
Copyright © 2015 冲击世界杯_2002韩日世界杯 - 0534pos.com All Rights Reserved.