赞
踩
在pytorch中CNN(卷积神经网络)由 torch.nn中的Conv1d()、Conv2d()、Conv3d()三个函数进行数据的一维、二维、三维卷积操作。主要参数有in_channels, out_channels,kernel_size。
比如[[1,1],[2,2],[3,3],[4,4],[5,5]]这可以当作一维数据也可以当作二维数据
如果当作一维数据,每个数据又由一个[]组成,在每个[]中有2个数据,所以in_channels就等于2
如果当作二维数据,每个位置只有一个数据,所以in_channels就等于1
比如[1,2,3,4,5],如果out_channels=5,那么卷积之后就会变成[[…],[…],[…],[…],[…]]
每个[…]都含有5个数据
比如kernel_size=5,对一维数据每5个数据进行一次卷积操作,对二维数据就会生成边长为5的正方形矩形框进行卷积操作,同理三维数据是边长为5的正方体
下面例子是对图像进行卷积操作
如下图kernel_size就为k,一维数据可以想象成在直线上
二维数据
三维数据
torch.nn.Conv2d(
in_channels=3, # 图像每个像素点由R,G,B三个数组成,当然有的就一个数据,这里具体看图像的每个像素点的组成数据的个数
out_channels=16, # 输出16层
kernel_size=5, # 框的边长
)
正常数据通过卷积后,数据会缩小如4x4的图片在3x3的矩形框下卷积操作后就会变成2x2,这样会漏掉图像的边缘信息。所以可以通过在数据的外围包裹数据的方式来解决该问题,pytorch提供了padding参数来保持图像卷积后的大小不会改变。
而padding=kernel_size/2-1
,如下列子
torch.nn.Conv2d(
in_channels=3,
out_channels=16,
kernel_size=5,
padding=2,
)
卷积后就是池化层,作用是缩小图像,由MaxPool1d()、MaxPool2d()、MaxPool3d()函数提供,与Conv1d()、Conv2d()、Conv3d()一一对应
小编这里用MaxPool2d()做例子,这里一般只需要参数kernel_size就可以了,kernel_size意义还是矩形框的边长。因为在源码中stride即步长,如果不填的话会默认等于kernel_size
torch.nn.MaxPool2d(kernel_size=2)
这里一般都填2,因为比较易于计算池化后的图像的长和宽,就是输入图像的长宽除2
这里通过手写数字的一个小例子来进一步了解pytorch中的cnn
import torch
import torch.utils.data as Data
import torch.nn as nn
import torchvision
# import matplotlib.pyplot as plt
from torch.nn import functional as F
EPOCH =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。