pytorch实现卷积神经网络cnn

yangmang yangmang     2022-09-19     407

关键词:

Pytorch是torch的Python版本,对TensorFlow造成很大的冲击,TensorFlow无疑是最流行的,但是Pytorch号称在诸多性能上要优于TensorFlow,比如在RNN的训练上,所以Pytorch也吸引了很多人的关注。之前有一篇关于TensorFlow实现的CNN可以用来做对比。

下面我们就开始用Pytorch实现CNN。

step 0 导入需要的包

1 import torch 
2 import torch.nn as nn
3 from torch.autograd import Variable
4 import torch.utils.data as data
5 import matplotlib.pyplot as plt

 

step 1  数据预处理

这里需要将training data转化成torch能够使用的DataLoader,这样可以方便使用batch进行训练。

 1 import torchvision  #数据库模块
 2 
 3 torch.manual_seed(1) #reproducible
 4 
 5 #Hyper Parameters
 6 EPOCH = 1
 7 BATCH_SIZE = 50
 8 LR = 0.001
 9 
10 train_data = torchvision.datasets.MNIST(
11     root='/mnist/', #保存位置
12     train=True, #training set
13     transform=torchvision.transforms.ToTensor(), #converts a PIL.Image or numpy.ndarray 
14                                         #to torch.FloatTensor(C*H*W) in range(0.0,1.0)
15     download=True
16 )
17 
18 test_data = torchvision.datasets.MNIST(root='/MNIST/')
19 #如果是普通的Tensor数据,想使用torch_dataset = data.TensorDataset(data_tensor=x, target_tensor=y)
20 #将Tensor转换成torch能识别的dataset
21 #批训练, 50 samples, 1 channel, 28*28, (50, 1, 28 ,28)
22 train_loader = data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
23 
24 test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1), volatile=True).type(torch.FloatTensor)[:2000]/255.
25 test_y = test_data.test_lables[:2000]

 

step 2 定义网络结构

需要指出的几个地方:1)class CNN需要继承Module ; 2)需要调用父类的构造方法:super(CNN, self).__init__()  ;3)在Pytorch中激活函数Relu也算是一层layer; 4)需要实现forward()方法,用于网络的前向传播,而反向传播只需要调用Variable.backward()即可。

 1 class CNN(nn.Module):
 2     def __init__(self):
 3         super(CNN, self).__init__()
 4         self.conv1 = nn.Sequential( #input shape (1,28,28)
 5             nn.Conv2d(in_channels=1, #input height 
 6                       out_channels=16, #n_filter
 7                      kernel_size=5, #filter size
 8                      stride=1, #filter step
 9                      padding=2 #con2d出来的图片大小不变
10                      ), #output shape (16,28,28)
11             nn.ReLU(),
12             nn.MaxPool2d(kernel_size=2) #2x2采样,output shape (16,14,14)
13               
14         )
15         self.conv2 = nn.Sequential(nn.Conv2d(16, 32, 5, 1, 2), #output shape (32,7,7)
16                                   nn.ReLU(),
17                                   nn.MaxPool2d(2))
18         self.out = nn.Linear(32*7*7,10)
19         
20     def forward(self, x):
21         x = self.conv1(x)
22         x = self.conv2(x)
23         x = x.view(x.size(0), -1) #flat (batch_size, 32*7*7)
24         output = self.out(x)
25         return output

 

step 3 查看网络结构

使用print(cnn)可以看到网络的结构详细信息,ReLU()真的是一层layer。

1 cnn = CNN()
2 print(cnn)

step 4 训练

指定optimizer,loss function,需要特别指出的是记得每次反向传播前都要清空上一次的梯度,optimizer.zero_grad()。

 1 #optimizer
 2 optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
 3 
 4 #loss_fun
 5 loss_func = nn.CrossEntropyLoss()
 6 
 7 #training loop
 8 for epoch in range(EPOCH):
 9     for i, (x, y) in enumerate(train_loader):
10         batch_x = Variable(x)
11         batch_y = Variable(y)
12         #输入训练数据
13         output = cnn(batch_x)
14         #计算误差
15         loss = loss_func(output, batch_y)
16         #清空上一次梯度
17         optimizer.zero_grad()
18         #误差反向传递
19         loss.backward()
20         #优化器参数更新
21         optimizer.step()

 

step 5 预测结果

1 test_output =cnn(test_x[:10])
2 pred_y = torch.max(test_output,1)[1].data.numpy().squeeze()
3 print(pred_y, 'prediction number')
4 print(test_y[:10])

 

 

reference:

莫凡python pytorch 教程

 

基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)

基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情

深入浅出卷积神经网络及实现!

... 作者:陈桦、夏雨柔、樊亮,Datawhale优秀学习者卷积神经网络CNN是深度学习中的基础知识。本文对CNN的基础原理及常见的CNN网络进行了详细解读,并介绍了Pytorch构建深度网络的流程。最后,以阿里天池零基础入门CV赛事为学... 查看详情

九大卷积神经网络(cnn)的pytorch实现

参考技术A典型的卷积神经网络包括:AlexNet、VGG、ResNet;InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet。轻量级网络包括:GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNetV2、SqueezeNetXceptionMixNetGhostNet。目标检测... 查看详情

基于facenet+retinaface+pytorch实现卷积神经网络(cnn)人脸识别

....30、PyCharm2020点击下载:点击下载简要概述:卷积神经网络的人脸识别,人脸检测用的是Retinaface,识别用到的是facenet。两组都是训练好的模型,在modeldata目录下。如果需要自己训练就在face 查看详情

3.使用pytorch深度学习库训练第一个卷积神经网络cnn(代码片段)

...篇博客将介绍如何使用PyTorch深度学习库训练第一个卷积神经网络(CNN)。训练CNN使用KMNIST数据集(MNISTdigits数据集的替代品,内置在PyTorch中)识别手写平假名字符(handwrittenHiraganacharacters)。在图像数... 查看详情

三维几何学习从零开始网格上的深度学习-2:卷积网络cnn篇(pytorch)(代码片段)

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052从零开始网格上的深度学习-2:卷积网络CNN篇引言一、概述1.1卷积操作简述1.2网格上的面卷积二、核心代码2.1面卷积2.2网络框架三、基于CNN的网格分类3.1分类... 查看详情

pytorch中实现cnn,对cnn的理解心得

...积的结果对所有空间位置进行卷积(滑动)卷积神经网络是一个卷积层的序列,夹杂着激活函数池化层使性能更好,更易于操作独立操作每个激活映射简介:conv、池化层和全连通层的堆积通常模型越深层次对模型... 查看详情

PyTorch 中文本输入的卷积神经网络

】PyTorch中文本输入的卷积神经网络【英文标题】:ConvolutionalNNfortextinputinPyTorch【发布时间】:2017-10-2800:17:26【问题描述】:我正在尝试使用CNN实现textclassificationmodel。据我所知,对于文本数据,我们应该使用1dConvolutions。我在pyto... 查看详情

cnn卷积神经网络池化层pooling动手学深度学习v2pytorch

Pooling池化层常用的池化层最大池化层平均池化层2.代码实现池化层的效果最主要是通过步幅stride,使得减小位置敏感性。后来的实现,Pooling用的越来越少,因为在channel里面加stride也可以达到一样的效果,并且增... 查看详情

pytorch中实现cnn,对cnn的理解心得

...积的结果对所有空间位置进行卷积(滑动)卷积神经网络是一个卷积层的序列,夹杂着激活函数池化层使性能更好,更易于操作独立操作每个激活映射简介:conv、池化层和全连通层的堆积通常模型越深层次对模型... 查看详情

动手实现cnn卷积神经网络

数据集采用的是手写数据集:本文构建的CNN网络图如下:    像素点:28*28=784,55000张手写数字图片。   查看详情

基于fpga的一维卷积神经网络cnn的实现

理论建立与效果展示环境:Vivado2019.2。Part:xcku040-ffva1156-2-i,内嵌DSP个数1920个,BRAM600个也就是21.1Mb。说明:通过识别加高斯白噪声的正弦波、余弦波、三角波较简单的实例来利用FPGA实现一维CNN网络,主要... 查看详情

(机器学习深度学习常用库框架|pytorch篇)第(待定)节:卷积神经网络cnn中一些经典网络结构写法(代码片段)

...ptionNet一:LeNet-5LeNet-5:LeNet-5是一个较简单的卷积神经网络。下图显示了其结构:输入的二维图像,先经过两次卷积层到池化层& 查看详情

matlab基于卷积神经网络cnn实现多分类预测(excel可直接替换数据)

【Matlab】基于卷积神经网络CNN实现多分类预测(Excel可直接替换数据)1.算法简介2.测试数据集3.替换数据4.训练进度图5.网络分析图6.混淆矩阵5.对比结果6.代码及注释1.算法简介CNN卷积神经网络(图解CNN)卷积神经网络(CNN)详解C... 查看详情

计算CNN实现中的卷积层

...【问题描述】:我正在尝试使用稀疏自动编码器训练卷积神经网络,以便计算卷积层的过滤器。我正在使用UFLDL代码来构建补丁和训练CNN网络。我的代码如下:====================================================== 查看详情

深度学习算法实践12---卷积神经网络(cnn)实现

在搞清楚卷积神经网络(CNN)的原理之后,在本篇博文中,我们将讨论基于Theano的算法实现技术。我们还将以MNIST手写数字识别为例,创建卷积神经网络(CNN),训练该网络,使识别误差达到1%以内。我们首先需要读入MNIST手写数... 查看详情

tensorflow实战-tensorflow实现卷积神经网络cnn-第5章

第5章-TensorFlow实现卷积神经网络CNN5.1卷积神经网络简介卷积神经网络CNN最初是为了解决图像识别等问题设计的,当然现在的应用已经不限于图像和视频,也可以用于时间序列信号,比如音频信号、文本数据等。在深度学习出现之... 查看详情

什么是 OpenCV 的最佳卷积神经网络 (CNN) 库? (带有简单的实现和示例)

】什么是OpenCV的最佳卷积神经网络(CNN)库?(带有简单的实现和示例)【英文标题】:Whatisthebestconvolutionalneuralnetworks(CNN)libraryforOpenCV?(withsimpleimplementationandexample)【发布时间】:2016-12-0705:25:35【问题描述】:OpenCV的最佳卷积神经... 查看详情