Pytorch 构建CNN用于图片分类

Posted 深度学习与PyTorch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytorch 构建CNN用于图片分类相关的知识,希望对你有一定的参考价值。

先看一个简单的例子:

(代码可以左右滑动)

 1import torch.nn as nn
2import torch.nn.functional as F
3class CNN(nn.Module):
4  def __init__(self):
5      super(imsimpleCNN, self).__init__()
6      self.conv1 = nn.Conv2d(1, 20, 5)
7      self.conv2 = nn.Conv2d(20, 20, 5)
8  def forward(self, x):
9      x = self.conv1(x)
10      x = F.relu(x)
11      x = self.conv2(x)
12      x = F.relu(x)
13      return x

使用pytorch 构建神经网络模型比较简单,大体上需要定义两个函数,一个init,一个forward,分别用来声明一些模型用到的参数和模型的结构

该网络结构由两层构成,(1, 20, 5)分别代表的是:input_channel, output_channel, 和kernel_size, 后面还有其他的参数,比如:stride = 1, padding = 0, dilation = 1, groups = 1, bias=True
如果没有特别的设定,这些是默认的参数。

本文构建CNN模型用于图片分类

(代码可以左右滑动)

 1class imCNN(nn.Module):
2    def __init__(self):
3        super(imCNN, self).__init__()
4        self.layer1 = nn.Sequential(
5            nn.Conv2d(
6                in_channels=1,
7                out_channels=16,
8                kernel_size=5,
9                padding=2),
10            nn.BatchNorm2d(16),
11            nn.ReLU(),
12            nn.MaxPool2d(2)
13        )
14        self.layer2 = nn.Sequential(
15            nn.Conv2d(16, 32, kernel_size=5, padding=2),
16            nn.BatchNorm2d(32),
17            nn.ReLU(),
18            nn.MaxPool2d(2)
19        )
20        self.fc = nn.Linear(7 * 7 * 32, 10)
21    def forward(self, x):
22        out = self.layer1(x)
23        out = self.layer2(out)
24        out = out.view(out.size(0), -1)
25        out = self.fc(out)
26        return out

输入的图片是28*28的mnist,网络有两层的结构构成,每一层的结构都基本的相似,组成的模块有nn.Conv2d(),  nn.BatchNorm2d,  nn.Relu(),  nn.MaxPool2d(), 经过两次的pooling, 最终特征的大小变为了 [ 7, 7, 32, 10], 再经过一个全连接层,将最终的输出变为10,从而实现分类。


以上是关于Pytorch 构建CNN用于图片分类的主要内容,如果未能解决你的问题,请参考以下文章

AlexNet--CNN经典网络模型详解(pytorch实现)

Pytorch框架下CNN介绍及代码实现

基于pytorch使用实现CNN 如何使用pytorch构建CNN卷积神经网络

基于pytorch使用实现CNN 如何使用pytorch构建CNN卷积神经网络

[Pytorch系列-61]:循环神经网络 - 中文新闻文本分类详解-3-CNN网络训练与评估代码详解

LeNet-5——CNN经典网络模型详解(pytorch实现)