第三周作业-卷积神经网络(part1)
卷积神经网络
平移不变性(translation invariance):
不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
局部性(locality):
神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,在后续神经网络,整个图像级别上可以集成这些局部特征用于预测。
对全连接层使用平移不变性和局部性得到卷积层。
交叉相关和卷积由于对称性,在实际使用中没有区别。

卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出。
核矩阵和偏移量是可学习得参数。
核矩阵得大小是超参数。核矩阵的大小控制局部性。
填充和步幅
填充可以增加输出的高度和宽度。这常用来使输出与输入具有相同的高和宽。
步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的 1/n( n 是一个大于 11 的整数)。
填充和步幅可用于有效地调整数据的维度。
几个超参核大小、填充、步幅,核大小最关键,填充一般是取默认值,步幅根据需要的模型复杂度来确定。
多输入和多输出通道
多输入多输出通道可以用来扩展卷积层的模型。
当以每像素为基础应用时,1×1×1 卷积层相当于全连接层。
1×1×1 卷积层通常用于调整网络层的通道数量和控制模型复杂性。
池化层
对于给定输入元素,最大池化层会输出该窗口内的最大值,平均池化层会输出该窗口内的平均值。
池化层的主要优点之一是减轻卷积层对位置的过度敏感。
我们可以指定池化层的填充和步幅。
使用最大池化层以及大于 1 的步幅,可减少空间维度(如高度和宽度)。
池化层的输出通道数与输入通道数相同。改变通道数一般交给卷积层。
LeNet

lenet实现识别手写数字。

猫狗大战
这周因为看病耽误了时间,卷积部分感觉已经听明白了,但是在代码实现的其他部分还是有困难,争取在中秋节之前实现全部代码。
class Reshape(torch.nn.Module): def forward(self, x): return x.view(-1, 3, 224, 224) net = torch.nn.Sequential( Reshape(), nn.Conv2d(3,16,5,2,2),#输入三通道,输出16通道,k为5*5,步长是2,填充也是2 nn.Sigmoid(),#激活函数,112 nn.Conv2d(16,32,5,2,2), nn.Sigmoid(),#56 nn.Conv2d(32,32,3,1,1),#不变 nn.Sigmoid(), nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2),#平均池化层 28 nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2),#14 nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2),#7 nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.Conv2d(32,32,3,1,1), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2),#3
nn.Flatten(), nn.Linear(288,144), nn.Sigmoid(), nn.Linear(144,72), nn.Sigmoid(), nn.Linear(72,1) )
浙公网安备 33010602011771号