pytorch搭建卷积神经网络(alexnet、vgg16、resnet50)以及训练
发布时间:2018-05-24 20:59,
浏览次数:868
, 标签:
pytorch
alexnet
vgg
resnet
文末有代码和数据集链接!!!!
(注:文章中所有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,还有图像翻转以及归一化。
data_transform = transforms.Compose([ transforms.Scale((224,224), 2), #对图像大小统一
transforms.RandomHorizontalFlip(), #图像翻转 transforms.ToTensor(),
transforms.Normalize(mea