如何在网络模型训练过程中绘制train_loss和val_accuracy随epoch变化的曲线

        话不多说,直接上代码。

train_losses=[]
val_accuracies = []
train_losses.append(running_loss / train_steps)
val_accuracies.append(val_accurate)
plt.plot(np.arange(1, epochs+1), train_losses, label="train_loss")
plt.plot(np.arange(1, epochs + 1), val_accuracies, label="val_accuracy")
plt.xlabel("Epochs")
plt.title("Train_losses and val_accuracies")
plt.legend()
plt.savefig('./result')
plt.show()

        具体怎么应用我们找个代码示例说着更明白。

    train_losses=[] #创建两个存储train_loss和val_accuracy的列表
    val_accuracies = []
    # epochs = 10
    # best_acc = 0.0
    # save_path = './{}Net.pth'.format(model_name)
    # train_steps = len(train_loader)
    # for epoch in range(epochs):
    #     # train
    #     net.train()
    #     running_loss = 0.0
    #     train_bar = tqdm(train_loader, file=sys.stdout)
    #     for step, data in enumerate(train_bar):
    #         images, labels = data
    #         optimizer.zero_grad()
    #         outputs = net(images.to(device))
    #         loss = loss_function(outputs, labels.to(device))
    #         loss.backward()
    #         optimizer.step()
    # 
    #         # print statistics
    #         running_loss += loss.item()
    # 
    #         train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1,
    #                                                                  epochs,
    #                                                                  loss)            
        # validate
        # net.eval()
        # acc = 0.0  # accumulate accurate number / epoch
        # with torch.no_grad():
        #     val_bar = tqdm(val_loader, file=sys.stdout)
        #     for val_data in val_bar:
        #         val_images, val_labels = val_data
        #         outputs = net(val_images.to(device))
        #         predict_y = torch.max(outputs, dim=1)[1]
        #         acc += torch.eq(predict_y, val_labels.to(device)).sum().item()
        # 
        # val_accurate = acc / val_num
        # print('[epoch %d] train_loss: %.3f  val_accuracy: %.3f' %
        #       (epoch + 1, running_loss / train_steps, val_accurate))
        val_accuracies.append(val_accurate) #添加每次的val_accuracy到列表
        train_losses.append(running_loss / train_steps)#添加每次训练的loss

        # if val_accurate > best_acc:
        #     best_acc = val_accurate
        #     torch.save(net.state_dict(), save_path)

    # 训练结束后绘制损失和准确率随着 epoch 变化的图像
    plt.plot(np.arange(1, epochs+1), train_losses, label="train_loss")#绘制train_loss图像
    plt.plot(np.arange(1, epochs + 1), val_accuracies, label="val_accuracy")#绘制val_accuracy图像
    plt.xlabel("Epochs")#x轴对应的标签
    plt.title("Train_losses and val_accuracies")#图像的标题
    plt.legend()#图例
    plt.savefig('./result')#图像保存路径及标题
    plt.show()#展示,一定要先保存再plt.show,否则保存的是空白的图像。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在PyTorch训练模型时,可以使用TensorBoard或Matplotlib来绘制损失曲线和准确率曲线。 ## 使用TensorBoard绘制曲线 TensorBoard是一个用于可视化机器学习实验结果的工具,可以用来展示训练过程的损失曲线和准确率曲线。以下是一个简单的示例代码,展示如何在PyTorch使用TensorBoard来记录和可视化训练过程的损失和准确率: ```python from torch.utils.tensorboard import SummaryWriter # 创建一个SummaryWriter对象,参数log_dir指定TensorBoard日志的存储路径 writer = SummaryWriter(log_dir='logs') for epoch in range(num_epochs): # ... # 记录训练损失和准确率 writer.add_scalar('Train/Loss', train_loss, global_step=epoch) writer.add_scalar('Train/Accuracy', train_acc, global_step=epoch) # 记录验证损失和准确率 writer.add_scalar('Val/Loss', val_loss, global_step=epoch) writer.add_scalar('Val/Accuracy', val_acc, global_step=epoch) # 关闭SummaryWriter对象 writer.close() ``` 在上面的示例代码,首先需要创建一个`SummaryWriter`对象,并指定TensorBoard日志的存储路径。然后在每个epoch结束时,使用`add_scalar`方法记录训练损失、训练准确率、验证损失和验证准确率。最后,在训练过程结束时,需要调用`close`方法关闭`SummaryWriter`对象。 ## 使用Matplotlib绘制曲线 除了使用TensorBoard,还可以使用Matplotlib来绘制损失曲线和准确率曲线。以下是一个简单的示例代码,展示如何在PyTorch使用Matplotlib来绘制损失曲线和准确率曲线: ```python import matplotlib.pyplot as plt train_losses = [] train_accs = [] val_losses = [] val_accs = [] for epoch in range(num_epochs): # ... # 记录训练损失和准确率 train_losses.append(train_loss) train_accs.append(train_acc) # 记录验证损失和准确率 val_losses.append(val_loss) val_accs.append(val_acc) # 绘制训练和验证损失曲线 plt.plot(train_losses, label='Train Loss') plt.plot(val_losses, label='Val Loss') plt.legend() plt.xlabel('Epoch') plt.ylabel('Loss') plt.show() # 绘制训练和验证准确率曲线 plt.plot(train_accs, label='Train Acc') plt.plot(val_accs, label='Val Acc') plt.legend() plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.show() ``` 在上面的示例代码,首先定义了四个空列表来存储训练和验证过程的损失和准确率。在每个epoch结束时,将训练和验证的损失和准确率记录到对应的列表。最后,使用Matplotlib库绘制训练和验证损失曲线训练和验证准确率曲线

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值