一、基本概念 全连接神经网络:每相邻两个线性层之间的神经元都是全连接的神经网络。
卷积神经网络:保留数据原有特征情况下,对数据进行降维处理的网络模型。 经典的卷积神经网络有 1.LeNet LeNet-5网络结构示意图 2.AlexNet AlexNet网络结构示意图
3.VGG Net 4.GoogleNet 5.ResNet 6.MobileNet
二、卷积神经网络的基本组成部分 卷积层:用于特征提取 池化层:降维、防止过拟合 全连接层:输出结果
三、卷积层介绍 Output矩阵第一个元素是由Input矩阵中通过卷积核扫描到的第一个矩阵与卷积核进行数乘得到的结果: 用卷积核依次扫描Input矩阵做数乘,得到Output矩阵。(这里扫描的步长为1) 三通道的矩阵需要用到的卷积核是一个三维的张量,卷积核的三个矩阵分别对输入矩阵的三个通道进行扫描,然后将扫描结果进行相加,并且一轮扫描只能得到一个通道的矩阵输出: (在我第一次学习的时候,我理解错了,以为是用一个二维矩阵作为三通道输入矩阵的卷积核,对三个通道的矩阵分别扫描做数乘,然后进行矩阵加法,得到Output矩阵) 卷积核用于过滤各个图像块,如果某一个图像块和当前的卷积核的卷积结果较大,那么可以认为该图像块和当前卷积核比较接近。 对于n通道的Input矩阵,它的卷积核是由n个二维矩阵组成的张量,形状是(n,k,k),Output矩阵的通道数为1。
如果是想得到多通道矩阵的输出,那么需要多个卷积核对三通道的矩阵进行扫描。假设输入通道为n,输出通道为m,那么输入的卷积核的shape应为(m,n,k,k) (卷积核和宽与高可以不等,但一般为方阵,便于计算) 输出结果为多通道矩阵用到的4维卷积核: padding:为了保证输入矩阵和输出矩阵的大小保持一致,如果卷积核大小是33,需要进行一圈的填充;如果卷积核大小是55,需要进行两圈的填充。 代码:
import torch
input=[1,2,3,4,5,
6,3,4,7,2,
3,4,6,8,9,
2,9,7,4,3,
3,4,3,7,1]
input=torch.Tensor(input).view(1,1,5,5)
conv_layer=torch.nn.Conv2d(1,1,kernel_size=3,padding=1,stride=1,bias=False)
kernel=torch.Tensor([1,2,3,4,5,6,7,8,9]).view(1,1,3,3)
conv_layer.weight.data=kernel.data
output=conv_layer(input)
print(output)
结果输出: 四、池化层介绍
import torch
input=[1,2,5,4,
3,4,6,6,
2,7,8,10,
3,4,9,1]
input=torch.Tensor(input).view(1,1,4,4)
max_pooling=torch.nn.MaxPool2d(kernel_size=2)
output=max_pooling(input)
print(output)
结果输出:
|