您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页Pytorch实现 卷积神经网络LeNet

Pytorch实现 卷积神经网络LeNet

来源:华拓科技网

1、LeNet简介
参考网址:

LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。

import torch.nn as nn
import torch.nn.functional as F 
class Net(nn.Module):    
	def __init__(self):        
		# nn.Model 子类的函数必须在构造函数中执行父类的构造函数     
		# 下式等价于nn.Model.__init__(self)        
		super(Net,self).__init__()       
		# 卷积层‘1’表示输入图片为单通道, ‘6’表示输出通道数        
		# ‘5’表示卷积核为5*5        
		self.conv1 = nn.Conv2d(1,6,5)        
		#  卷积层        
		self.conv2 = nn.Conv2d(6,16,5)        
		# 仿射层/ 全连接层,y=Wx + b        
		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)        
		# reshape, '-1' 表示自适应        
	 	x = x.view(x.size()[0], -1)        
	 	x = F.relu(self.fc1(x))        
		x = F.relu(self.fc2(x))        
		x = self.fc3(x)        
		return x    
 net = Net()
 print(net)

2)定义损失函数和优化器
nn实现了神经网络中大多数的损失函数

output = net(input)  #调用网络函数 net()
target = Variable(t.arange(0,10))
target = target.reshape(1,10)
target = target.float()  #为使target类型和output类型一致
criterion = nn.MSELoss()  #计算均方差
loss = criterion(output,target)

3)训练网络并更新网络参数
在反向传播计算完所有参数的梯度后,还需要使用优化方法更新网络的权重和参数。torch.optim中实现了深度学习中绝大多数的优化方法。

import torch.optim as optim
import numpy as np
# 新建一个优化器,指定要调整的参数和学习率
optimizer = optim.SGD(net.parameters(),lr=0.01)
# 在训练过程中
# 先梯度清零(与net.zero_grad()效果一样)
optimizer.zero_grad() 
# 计算损失output = net(input)
target = Variable(t.arange(0,10))
target = target.reshape(1,10)
target = target.float() 
criterion = nn.MSELoss()
loss = criterion(output,target)
# 反向传播
loss.backward()
# 更新参数
optimizer.step() 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务