python中的Pytorch建模流程是什么
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下python中的Pytorch建模流程是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一般我们训练神
千家信息网最后更新 2025年01月20日python中的Pytorch建模流程是什么
小编给大家分享一下python中的Pytorch建模流程是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一般我们训练神经网络有以下步骤:
导入库
设置训练参数的初始值
导入数据集并制作数据集
定义神经网络架构
定义训练流程
训练模型
以下,我就将上述步骤使用代码进行注释讲解:
1 导入库
import torchfrom torch import nnfrom torch.nn import functional as Ffrom torch import optimfrom torch.utils.data import DataLoader, DataLoaderimport torchvisionimport torchvision.transforms as transforms
2 设置初始值
# 学习率lr = 0.15# 优化算法参数gamma = 0.8# 每次小批次训练个数bs = 128# 整体数据循环次数epochs = 10
3 导入并制作数据集
本次我们使用FashionMNIST
图像数据集,每个图像是一个28*28的像素数组,共有10个衣物类别,比如连衣裙、运动鞋、包等。
注:初次运行下载需要等待较长时间。
# 导入数据集mnist = torchvision.datasets.FashionMNIST( root = './Datastes' , train = True , download = True , transform = transforms.ToTensor()) # 制作数据集batchdata = DataLoader(mnist , batch_size = bs , shuffle = True , drop_last = False)
我们可以对数据进行检查:
for x, y in batchdata: print(x.shape) print(y.shape) break# torch.Size([128, 1, 28, 28])# torch.Size([128])
可以看到一个batch
中有128个样本,每个样本的维度是1*28*28。
之后我们确定模型的输入维度与输出维度:
# 输入的维度input_ = mnist.data[0].numel()# 784# 输出的维度output_ = len(mnist.targets.unique())# 10
4 定义神经网络架构
先使用一个128个神经元的全连接层,然后用relu激活函数,再将其结果映射到标签的维度,并使用softmax
进行激活。
# 定义神经网络架构class Model(nn.Module): def __init__(self, in_features, out_features): super().__init__() self.linear1 = nn.Linear(in_features, 128, bias = True) self.output = nn.Linear(128, out_features, bias = True) def forward(self, x): x = x.view(-1, 28*28) sigma1 = torch.relu(self.linear1(x)) sigma2 = F.log_softmax(self.output(sigma1), dim = -1) return sigma2
5 定义训练流程
在实际应用中,我们一般会将训练模型部分封装成一个函数,而这个函数可以继续细分为以下几步:
定义损失函数与优化器
完成向前传播
计算损失
反向传播
梯度更新
梯度清零
在此六步核心操作的基础上,我们通常还需要对模型的训练进度、损失值与准确度进行监视。
注释代码如下:
# 封装训练模型的函数def fit(net, batchdata, lr, gamma, epochs):# 参数:模型架构、数据、学习率、优化算法参数、遍历数据次数 # 5.1 定义损失函数 criterion = nn.NLLLoss() # 5.1 定义优化算法 opt = optim.SGD(net.parameters(), lr = lr, momentum = gamma) # 监视进度:循环之前,一个样本都没有看过 samples = 0 # 监视准确度:循环之前,预测正确的个数为0 corrects = 0 # 全数据训练几次 for epoch in range(epochs): # 对每个batch进行训练 for batch_idx, (x, y) in enumerate(batchdata): # 保险起见,将标签转为1维,与样本对齐 y = y.view(x.shape[0]) # 5.2 正向传播 sigma = net.forward(x) # 5.3 计算损失 loss = criterion(sigma, y) # 5.4 反向传播 loss.backward() # 5.5 更新梯度 opt.step() # 5.6 梯度清零 opt.zero_grad() # 监视进度:每训练一个batch,模型见过的数据就会增加x.shape[0] samples += x.shape[0] # 求解准确度:全部判断正确的样本量/已经看过的总样本量 # 得到预测标签 yhat = torch.max(sigma, -1)[1] # 将正确的加起来 corrects += torch.sum(yhat == y) # 每200个batch和最后结束时,打印模型的进度 if (batch_idx + 1) % 200 == 0 or batch_idx == (len(batchdata) - 1): # 监督模型进度 print("Epoch{}:[{}/{} {: .0f}%], Loss:{:.6f}, Accuracy:{:.6f}".format( epoch + 1 , samples , epochs*len(batchdata.dataset) , 100*samples/(epochs*len(batchdata.dataset)) , loss.data.item() , float(100.0*corrects/samples)))
6 训练模型
# 设置随机种子torch.manual_seed(51)# 实例化模型net = Model(input_, output_)# 训练模型fit(net, batchdata, lr, gamma, epochs)# Epoch2:[25600/600000 4%], Loss:0.524430, Accuracy:69.570312# Epoch2:[51200/600000 9%], Loss:0.363422, Accuracy:74.984375# ......# Epoch20:[600000/600000 100%], Loss:0.284664, Accuracy:85.771835
现在我们已经用Pytorch
训练了最基础的神经网络,并且可以查看其训练成果。大家可以将代码复制进行运行!
虽然没有用到复杂的模型,但是我们在每次建模时的基本思想都是一致的
以上是"python中的Pytorch建模流程是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
训练
模型
数据
函数
样本
神经
维度
损失
神经网络
网络
进度
流程
参数
架构
梯度
传播
监视
代码
准确度
标签
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ubuntu服务器安装
肇庆专业软件开发厂家直销
软件开发年终教学总结
我国制定网络安全法的目的是
众卡网络技术有限公司
grpc 服务器之间传输太慢
db2数据库自动优化
查看当前服务器磁盘
失落的方舟美西是哪个服务器
网络技术三级路由器的大题
oppo软件开发者
全国地理基础信息数据库
碑林软件开发
四川省网络安全
鸿合科技是互联网公司吗
一万并发需要什么服务器
教育青少年网络安全书籍推荐
数据库中如何插入数据
软件开发管理办法国家规范标准
计算机硬网络技术
南宁fil服务器行情
四川归云网络技术
网络服务器问题维修需要多长时间
wp数据库查询次数优化
sqlplus导入数据库
网络技术及应用期末考试题
两类常见的软件开发
网络安全教师 杰出人才
数据库恢复删除表
网络安全basic