如东建设局网站重庆注册公司网上申请入口
如东建设局网站,重庆注册公司网上申请入口,找承包工程的平台,wordpress中常用插件安装一、网络模型结构 LeNet是具有代表性的CNN#xff0c;在1998年被提出#xff0c;是进行手写数字识别的网络#xff0c;是其他深度学习网络模型的基础。如下图所示#xff0c;它具有连狙的卷积层和池化层#xff0c;最后经全连接层输出结果。 二、各层参数详解
2.1 INPUT层…一、网络模型结构 LeNet是具有代表性的CNN在1998年被提出是进行手写数字识别的网络是其他深度学习网络模型的基础。如下图所示它具有连狙的卷积层和池化层最后经全连接层输出结果。 二、各层参数详解
2.1 INPUT层-输入层 数据input层输入图像的尺寸为32*32大小的一维一通道图片。 注意①灰度图像是单通道图像其中每个像素只携带有关光强度的信息 ②RGB图像是彩色图像为三通道图像 ③传统上输入层不被视为网络层次结构之一因此输入层不算LeNet的网络结构。
2.2 C1层-卷积层 输入数据输入特征图input feature map32*32 卷积核大小5*5 计算公式 其中是指输入图片的高度是指输入图片的宽度是指卷积核的大小padding是指向图片外面补边默认为0S是指步长卷积核遍历图片的步长默认为1。 卷积核种类通道数6 输出数据输出特征图output feature map28*28
2.3 S2层-池化层下采样层 池化是缩小高、长方向上的空间的运算。 输入数据28*28 采样区域2*2 采样种类通道数6 输出数据14*14 注意①经过池化运算输入数据和输出数据的通道数不会发生变化。 ②此时S2中每个特征图的大小是C1中每个特征图大小的1/4. 2.4 C3层-卷积层 输入数据S2中所有6个或者几个特征map组合 卷积核大小5*5 卷积核种类通道数16 输出数据输出特征图output feature map10*10 注意C3中的每个特征map是连接到S2中的所有6个或者几个特征map的表示本层的特征map是上一层提取到的特征map的不同组合。 2.5 S4层-池化层下采样层 输入数据10*10 采样区域2*2 采样种类通道数16 输出数据5*5
2.6 C5层-卷积层 输入数据S4层的全部16个单元特征map与s4全相连 卷积核大小5*5 卷积核种类通道数120 输出数据输出特征图output feature map1*1
2.7 F6层-全连接层 输入数据120维向量 输出数据84维向量
2.2 Output层-全连接层 输入数据84维向量 输出数据10维向量
三、代码实现采用的激活函数为relu函数
3.1 搭建网络框架
1导包
import torch
import torch.nn as nn
import torch.nn.functional as F 2定义卷积神经网络由于训练数据采用的是彩色图片三通道因此与上面介绍的通道数有出入。
class Net(nn.Module):def __init__(self):super(Net,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 self.conv1(x)x F.relu(x)x F.max_pool2d(x,(2,2))x F.max_pool2d(F.relu(self.conv2(x)),2)x x.view(-1,x.size()[1:].numel())x F.relu(self.fc1(x))x F.relu(self.fc2(x))x self.fc3(x)return x
3测试网络效果相当于打印初始化部分
net Net()
print(net)
3.2 定义数据集
1导包
import torchvision
import torchvision.transforms as transforms
2下载数据集
transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
])trainset torchvision.datasets.CIFAR10(root./data,trainTrue,downloadTrue,transformtransform)
testset torchvision.datasets.CIFAR10(root./data,trainFalse,downloadTrue,transformtransform)
trainloader torch.utils.data.DataLoader(trainset,batch_size4,shuffleTrue,num_workers0)
testloader torch.utils.data.DataLoader(testset,batch_size4,shuffleFalse,num_workers0)
3定义元组进行类别名的中文转换
classes (airplane,automobile,bird,car,deer,dog,frog,horse,ship,truck) 4运行数据加载器使用绘图函数查看数据加载效果
import matplotlib.pyplot as plt
import numpy as npdef imshow(img):img img / 2 0.5npimg img.numpy()plt.imshow(np.transpose(npimg,(1,2,0)))plt.show()dataiter iter(trainloader)
images,labels dataiter.next()imshow(torchvision.utils.make_grid(images))print(labels)
print(labels[0],classes[labels[0]])
print( .join(classes[labels[j]] for j in range(4)))
3.3 定义损失函数与优化器
1定义损失函数交叉熵损失函数
criterion nn.CrossEntropyLoss()
2定义优化器让网络进行更新不断更新好的参数达到更好的效果
import torch.optim as optim
optimizer optim.SGD(net.parameters(),lr0.001,momentum0.9)
3.4 训练网络
for epoch in range(2):running_loss 0.0for i,data in enumerate(trainloader,0):inputs,labels dataoptimizer.zero_grad()outputs net(inputs)loss criterion(outputs,labels)loss.backward()optimizer.step()running_loss loss.item()if i % 2000 1999:print([%d,%5d] loss:%.3f % (epoch 1,i1,running_loss/2000))running_loss 0.0print(Finish)
3.5 测试网络
1保存学习好的网络参数将权重文件保存到本地
PATH./cifar_net.pth
torch.save(net.state_dict(),PATH)
2 测试一组图片的训练效果
dataiter iter(testloader)
images,labels dataiter.next()
imshow(torchvision.utils.make_grid(images))
print(GroundTruth:, .join(%5s% classes[labels[j]] for j in range(4)))
3观察整个训练集的测试效果
correct 0
total 0
with torch.no_grad():for data in testloader:images,labels dataoutputs net(images)_,predicted torch.max(outputs,1)total labels.size(0)correct (predicted labels).sum().item()correctGailv 100*(correct / total)
print(correctGailv)
四、小结 与“目前的CNN”相比LeNet有以下几个不同点 ①激活函数不同LeNet使用sigmoid函数而目前的CNN中主要使用ReLU函数 ②原始的LeNet中使用子采样subsampling缩小中间数据的大小而目前的CNN中Max池化是主流。
参考LeNet详解-CSDN博客
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90241.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!