文末有代码和数据集链接!!!!
(注:文章中所有path指文件的路径)
因毕业设计需要,接触卷积神经网络。由于pytorch方便使用,所以最后使用pytorch来完成卷积神经网络训练。
接触到的网络有Alexnet、vgg16、resnet50,毕业答辩完后,一直在训练Alexnet。
1.卷积神经网络搭建
pytorch中有torchvision.models,里面有许多已搭建好的模型。如果采用预训练模型,只需要修改最后分类的类别。
虽然这样但是我还是inception v3模型修改上失败。
alexnet和vgg16修改的是全连接层的最后一层。
model.classifier = nn.Sequential(nn.Linear(25088, 4096), #vgg16
nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(4096, 4096),
nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(4096, 2))
alexnet_model.classifier = nn.Sequential(
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, 2),
)
resnet50只需要修改最后的fc层。
model.fc = nn.Linear(2048, 2)
简单的修改,就可以完成。
如果采用要采用预训练模型的话,还需要对修改处参数的进行修改。(vgg16和alexnet需要,resnet50不需要,原因我认为是修改的地方不同)
for index, parma in enumerate(model.classifier.parameters()):
if index == 6:
parma.requires_grad = True
2.训练
这张图是我所认为的神经网络训练的七步吧。
(1) 模型的创建上文已介绍。
(2) 数据集的建立:在PyTorch中对于数据集的文件格式有一定的要求。如图4-10所示,在目录下分别建cat和dog文件夹,这就相当于做标签
(3)对数据集进行预处理:这里采用的是数据增强变化的方法,包括对图片大小进行压缩和输入像素统一,都为224224,还有图像翻转以及归一化。