文章目录
- 全连接神经网络中,相邻两层的每个神经元之间都是直接相连的。就是每一个节点都要参与下一层的计算, 随着神经元的个数,也即特征维数的增加,全连接神经网络的复杂度和计算量会显著增大
- 卷积神经网络(Convolutional Neural Network, CNN)具有
局部连接
和权值共享
的特性,是指相邻两层的神经元之间是局部连接
的,且在同一层的部分神经元之间
连接的权重是共享
的,因此,CNN能够显著减少神经网络的复杂度。 - 全连接和局部连接的区别: 这块局部区域称作
感受野(receptive field)
- 权值共享:在同一通道中, 所有参数采用的都是同一个卷积核
CNN的结构
(1)输入层:输入数据
(2)卷积层:通过卷积核进自动化特征提取,找到语义表征:
卷积核:
-
卷积核会定义在对
输入图像中的一部分区域
进行加权平均
处理时的权重
。卷积核是一个小尺寸的矩阵
,具体来说,整个过程就是卷积核在上面所说的输入图像上不断以滑动窗口
的方式按照一定的步长
滑动,滑到的一部分数与卷积核的做对位相乘
,然后求和
,每滑动一次
,得到一个值
,等到全部滑动之后生成一个新的矩阵
。 -
卷积核的大小一般为
奇数
,像3X3
以及5X5
等,卷积核最初会进行随机值的初始化
,之后随着CNN的训练过程,不断学习和更新
这些卷积核中的参数(权重),直到训练结束,参数固定
。
# 只堆叠两个简单的卷积层
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self, num_classes=3):
super(Net, self).__init__()
self.layer1 = nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2) # 卷积层1
self.layer2 = nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2)# 卷积层
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
return out
model = Net()
print