VGG介绍
VGG网络架构
cfgs里面对应了四个vgg网络的结构
列表里面的数字代表卷积核的个数
由于卷积核大小均为3*3
‘M’代表池化层的
通过Make_features函数传入列表
Layers空列表用于放置网络的每一层
RGB彩色图片,所以输入通道数为3
池化核为2 步距也为2
输入的通道3,输出的特征矩阵深度 对应为卷积核的个数 v为输出通道数,所以v赋给in_channels作为下一层的输入
Nn.Sequential(*layers)将列表通过非关键字参数的形式创建一个网络模型
接下来是分类网络结构
在初始化函数当中,传入features(刚刚的那个make_features),所需要分类的类别个数,是否对网络权重初始化。
最后生成7*7*512的网络结构,展平处理后变为512*7*7,dropout丢掉50%数据(50%比例随机失活神经元),防止过拟合,然后进行全连接层,神经元个数为2048,然后进行下一个全连接层,最后一个全连接层的输出为类别的个数。
正向传播
x为输入的图像,先进行提取特征,接下来开始展平,第0个维度是batch,从第一个维度开始展平。然后进入到分类网络当中。
实例化vgg网络
将vgg16传入到cfg中,通过VGG类来实例化VGG网络(传入features由make_features生成,**kwargs对应一个可变长度的字典变量,通过在调用vgg函数时所传入的字典变量得到,可能包含分类个数)。
接下来看训练脚本。
选用并输出训练方式
对训练集和验证集进行预处理操作,
随机裁剪、随机水平翻转、转化成Tensor格式、对其进行标准化处理,从头开始训练,如果基于迁移学习,则输入预训练好的模型的最佳参数[123.68,116.78,103.94]Imagenet数据集。
DataLoader数据生成器 num_workers=0 Windows默认为0,线程个数。
实例化vgg网络
参数为:模型名称、分类个数、是否需要权重初始化。