转载请注明出处:利用Pytorch进行CNN详细剖析 (乐投网 - 大数据,人工智能第一干货网)
本文缘起于一次CNN作业中的一道题,这道题涉及到了基本的CNN网络搭建,在MNIST数据集上的分类结果,Batch Normalization的影响,Dropout的影响,卷积核大小的影响,数据集大小的影响,不同部分数据集的影响,随机数种子的影响,以及不同激活单元的影响等,能够让人比较全面地对CNN有一个了解,所以想做一下,于是有了本文。
工具
- 开源深度学习库: PyTorch
- 数据集:MNIST
实现
初始要求
首先建立基本的BASE网络,在Pytorch中有如下code:
class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1), padding=0) self.conv2 = nn.Conv2d(20, 50, kernel_size=(5, 5), stride=(1, 1), padding=0) self.fc1 = nn.Linear(4*4*50, 500) self.fc2 = nn.Linear(500, 10) def forward(self, x): x = F.max_pool2d(self.conv1(x), 2) x = F.max_pool2d(self.conv2(x), 2) x = x.view(-1, 4*4*50) x = F.relu(self.fc1(x)) x = self.fc2(x) return F.log_softmax(x)
这部分代码见base.py。
问题A:预处理
即要求将MNIST数据集按照规则读取并且tranform到适合处理的格式。这里读取的代码沿用了Big