赞
踩
在本文中,我们将介绍如何使用PyTorch实现一个深度学习模型的训练和验证,并绘制验证集的准确率和损失曲线。我们将使用一个自定义的神经网络模型来进行实验。
导入相关库
首先,我们需要导入本项目中所需的相关库:
- import torch
- import torch.nn as nn
- import numpy as np
- from datasave import train_loader, test_loader
- from early_stopping import EarlyStopping
- from label_smoothing import LSR
- from oneD_Meta_ACON import MetaAconC
- import time
- import matplotlib.pyplot as plt
- from torchsummary import summary
- from adabn import reset_bn, fix_bn
设置随机数种子
为了保证实验的可复现性,我们需要设置一个固定的随机数种子:
- def setup_seed(seed):
- torch.manual_seed(seed)
- torch.cuda.manual_seed_all(seed)
- np.random.seed(seed)
- torch.backends.cudnn.deterministic = True
-
- setup_seed(2)
定义神经网络模型
接下来,我们定义一个自定义的神经网络模型Net
:
- class Net(nn.Module):
- # 省略详细的网络结构代码...
实例化模型并查看网络结构
我们实例化上面定义的神经网络模型,并使用torchsummary
库查看网络结构:
- device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
- model = Net().to(device)
- summary(model, input_size=(1, 1024))
定义损失函数与优化器
接下来,我们使用自定义的标签平滑损失函数LSR
,并根据模型参数创建一个自定义的优化器AdamP
:
- criterion = LSR()
- # 省略对模型参数的处理代码...
- optimizer = AdamP(model.parameters(), lr=0.001, weight_decay=0.0001, nesterov=True, amsgrad=True)
初始化变量
我们需要初始化一些变量来保存训练和验证的损失值和准确率:
- losses = []
- acces = []
- eval_losses = []
- eval_acces = []
- early_stopping = EarlyStopping(patience=10, verbose=True)
开始训练与验证
接下来,我们使用for
循环进行神经网络模型的训练和验证,并将损失值和准确率存储到相应的变量中:
- starttime = time.time()
- for epoch in range(150):
- # 省略具体的训练与验证代码...
- print('epoch: {}, Train Loss: {:.4f}, Train Acc: {:.4f}, Test Loss: {:.4f}, Test Acc: {:.4f}'
- .format(epoch, train_loss / len
-
- 在训练过程中,我们使用了早停策略(Early Stopping)来防止模型过拟合。如果验证集损失在连续10个周期内没有改善,我们将停止训练并保存最佳模型。
-
- #### 保存模型参数
-
- 训练完成后,我们将模型参数保存到一个文件中:
-
- ```python
- torch.save(model.state_dict(), 'B0503_LSTM.pt')
绘制验证集准确率和损失曲线
我们将使用matplotlib
库绘制验证集的准确率和损失曲线:
- import pandas as pd
- pd.set_option('display.max_columns', None)
- pd.set_option('display.max_rows', None)
-
- plt.plot(eval_acces, label='Validation Accuracy', linestyle='-', marker='o')
- plt.plot(eval_losses, label='Validation Loss', linestyle='--', marker='o')
-
- plt.title('Validation Accuracy and Loss')
- plt.xlabel('Epochs')
- plt.ylabel('Accuracy / Loss')
-
- plt.legend()
- plt.show()
至此,我们已经成功实现了一个使用PyTorch的故障诊断模型的训练与验证过程,并绘制了验证集准确率和损失曲线。可以根据实际需求修改网络结构和训练参数以达到更好的性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。