分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下

发布时间:2023-09-06 01:42责任编辑:赖小花关键词:暂无标签

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上

# Author : Hellcat# Time ??: 2018/2/11import torch as timport torch.nn as nnimport torch.nn.functional as Fclass LeNet(nn.Module): ???def __init__(self): ???????super(LeNet,self).__init__() ???????self.conv1 = nn.Conv2d(3, 6, 5) ???????self.conv2 = nn.Conv2d(6,16,5) ???????self.fc1 = nn.Linear(16*5*5,120) ???????self.fc2 = nn.Linear(120,84) ???????self.fc3 = nn.Linear(84,10) ???def forward(self,x): ???????x = F.max_pool2d(F.relu(self.conv1(x)),(2,2)) ???????x = F.max_pool2d(F.relu(self.conv2(x)),2) ???????x = x.view(x.size()[0], -1) ???????x = F.relu(self.fc1(x)) ???????x = F.relu(self.fc2(x)) ???????x = self.fc3(x) ???????return xif __name__ == "__main__": ???net = LeNet() ???# #########训练网络######### ???from torch import optim ???# 初始化Loss函数 & 优化器 ???loss_fn = nn.CrossEntropyLoss() ???optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) ???for epoch in range(2): ???????running_loss = 0.0 ???????for step, data in enumerate(trainloader, 0): ?# step为训练次数, trainloader包含batch的数据和标签 ???????????inputs, labels = data ???????????inputs, labels = t.autograd.Variable(inputs), t.autograd.Variable(labels) ???????????# 梯度清零 ???????????optimizer.zero_grad() ???????????# forward ???????????outputs = net(inputs) ???????????# backward ???????????loss = loss_fn(outputs, labels) ???????????loss.backward() ???????????# update ???????????optimizer.step() ???????????running_loss += loss.data[0] ???????????if step % 2000 == 1999: ???????????????print("[{0:d}, {1:5d}] loss: {2:3f}".format(epoch+1, step+1, running_loss/2000)) ???????????????running_loss = 0. ???print("Finished Training")

 这是使用LeNet分类cifar_10的例子,数据处理部分由于不是重点,没有列上来,主要是对使用torch分类有一个直观理解,

初始化网络

初始化Loss函数 & 优化器

进入step循环:

  梯度清零

  向前传播

  计算本次Loss

  向后传播

  更新参数

由于pytorch的网络是class,所以在不考虑持久化的情况下,后续处理都不是太难,值得一提的是预测函数,我们直接net(Variable(test_data))即可,输出是概率分布的Variable,我们只要调用:

_, predict = t.max(test_out, 1)

即可,这是因为torch.max融合max和argmax的功能,

>> a = torch.randn(4, 4)
>> a
    
0.0692  0.3142  1.2513 -0.5428
0.9288  0.8552 -0.2073  0.6409
1.0695 -0.0101 -2.4507 -1.2230
0.7426 -0.7666  0.4862 -0.6628
torch.FloatTensor of size 4x4]
    
>>> torch.max(a, 1)
(
1.2513
0.9288
1.0695
0.7426
[torch.FloatTensor of size 4]
,
2
0
0
0
[torch.LongTensor of size 4]
)

其他torch的高级功能没有使用到,本篇的目的是对于torch神经网络基本的使用有个理解。

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下

原文地址:https://www.cnblogs.com/hellcat/p/8442816.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved