在构建神经网络时,很少直接随机初始化权重来重新训练一个神经网络,可以使用后预先训练好的神经网络权重来进行初始化。卷积神经网络的卷积层负责提取不同的特征,我们只需要微调全连接层来完成数据量较小的训练任务。
以下代码基于《Pytorch深度学习入门》中的迁移学习。
1、transforms完成数据预处理使其大小喝颜色与预训练模型一致
transforms.Resize缩小到最大为230的大小;
transforms.CenterCrop居中裁剪分割为大小224的图像;
transforms.RandomHorizontalFlip随机水平翻转;
transforms.ToTensor()转换为tensor格式;
transforms.Normalize使用均值喝标准差为0.5的方式进行归一化。
2、datasets.ImageFolder加载本地数据集data_transforms数据预处理
ImageFolder加载数据集定义目录data,并使用data_transforms完成数据预处理
3、加载alexnet预训练模型并加载训练好的权重
alexnet = models.alexnet(pretrained=True)
模型参数如下,卷积神将网络的计算公式为:N=(W-F+2P)/S+1 。
N:输出大小,W:输入大小,F:卷积核大小
P:填充值的大小,S:步长大小
4、重新定义alexnet模型的分类器classifier,完成本地化的二分类寻求,最后全连接层输出2
5、定义train训练函数喝test测试函数
6、训练神经网络
7、在测试集上测试,经过与训练模型后,在小数据集400个图形上的训练预测结果可以达到92%
网友评论