卷积神经网络
什么是卷积:卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算。
卷积的作用:通过卷积运算,可以使原信号特征增强,并且降低噪音。
卷积层:主要作用是进行特征提取
池化层:没有参数。主要作用是减小特征图,起到降维的作用。常用的方法是选取局部区域的最大值或者平均值。
通道:一个特征对应一个通道(或者叫特征图或特征映射),如RGB(三个通道)。当前层的特征映射是上一层特征映射的组合,也就是一个特征映射会对应上一层的一个或者多个特征映射。
卷积神经网络:是一个多层的神经网络,每层由多个二维平面(特征映射)组成,而每个平面由多个独立神经元组成。是前馈型网络。它对二维形状的平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
CNN的关键操作:输入图像->卷积(滤波操作)->使用激活函数(如sigmoid,ReLu)->池化(如平均池化、最大池化)->特征图
官方网址:torch.nn — PyTorch 1.11.0 documentation
这里看一下CONV2D 点击CONV2D ,里面有相关的介绍,以及如何使用,在左边的torch.nn.function打开看看
其中TORCH.NN.FUNCTIONAL.CONV2D的相关参数是
input:输入
weight:权重(卷积核)
bias:偏置
strid:步径(卷积核下一次计算移动的步径)
padding:
可以通过下面代码实现
import torch
import torch.nn.functional as F
input=torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]
]) # 二维矩阵
kernel=torch.tensor([[1,2,1],
[0,1,0],
[2,1,0]]) # 卷积核
#尺寸变换
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))
print(input.shape)
print((kernel.shape))
# 这里的input,kernel的尺寸 不满足官网文件要求的尺寸 所以要进行尺寸变换
#卷积函数(移动路径为1)
output=F.conv2d(input,kernel,stride=1)
print(output)
#卷积函数(移动路径为2)
output2=F.conv2d(input,kernel,stride=2)
print(output2)
padding:输入图像左右两边会进行填充(padH,padW)默认为0不进行填充
填充的地方默认都是设为0的
output3=F.conv2d(input,kernel,stride=1,padding=1)
print(output3)
输出结果为