网站的建设分析及意义,网页版微信二维码失效了怎么恢复,网站做app安全吗,网站推广存在的问题注#xff1a;本系列博客在于汇总CSDN的精华帖#xff0c;类似自用笔记#xff0c;不做学习交流#xff0c;方便以后的复习回顾#xff0c;博文中的引用都注明出处#xff0c;并点赞收藏原博主. 目录
VGG网络搭建#xff08;模型文件#xff09; 1.字典文件配置 2.提取…注本系列博客在于汇总CSDN的精华帖类似自用笔记不做学习交流方便以后的复习回顾博文中的引用都注明出处并点赞收藏原博主. 目录
VGG网络搭建模型文件 1.字典文件配置 2.提取特征网络结构 3. VGG类的定义 4.VGG网络实例化 VGG网络搭建模型文件 1.字典文件配置
#字典文件对应各个配置数字对应卷积核的个数M对应最大液化即maxpool)
cfgs {vgg11: [64, M, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],vgg13: [64, 64, M, 128, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],vgg16: [64, 64, M, 128, 128, M, 256, 256, 256, M, 512, 512, 512, M, 512, 512, 512, M],vgg19: [64, 64, M, 128, 128, M, 256, 256, 256, 256, M, 512, 512, 512, 512, M, 512, 512, 512, 512, M],
}2.提取特征网络结构
#提取特征网络结构
def make_features(cfg: list): #传入对应的列表layers [] #定义一个空列表存放每层的结果in_channels 3 #输入为RGB彩色图片输入通道为3for v in cfg: #通过for循环遍历列表if v M: #maxpool size 2,stride 2layers [nn.MaxPool2d(kernel_size2, stride2)] #创建最大池化下载量程池化核为2布局也为2else: #conv padding 1,stride 1conv2d nn.Conv2d(in_channels, v, kernel_size3, padding1) #创建卷积操作(输入特征矩阵深度输出特征矩阵深度(卷积核个数),卷积核为3,填充为1,stride默认为1(不用写))layers [conv2d, nn.ReLU(True)] #使用ReLU激活函数in_channels v #输出深度改变成vreturn nn.Sequential(*layers) #通过Sequential函数将列表以非关键字参数的形式传入*代表非关键字传入3. VGG类的定义
class VGG(nn.Module):def __init__(self, features, num_classes1000, init_weightsFalse): #(通过make_features生成的提取特征网络结构分类的类别个数是否对网络权重初始化)super(VGG, self).__init__()self.features featuresself.classifier nn.Sequential( #生成分类网络nn.Linear(512*7*7, 4096), #全连接层上下的节点个数nn.ReLU(True), #ReLU函数激活nn.Dropout(p0.5), #Dropout函数减少过拟合以50%的比例随机失活神经元nn.Linear(4096, 4096), #第一层和第二层nn.ReLU(True),nn.Dropout(p0.5),nn.Linear(4096, num_classes) #第二层和第三层总计3层全连接层最后连接到输出层输出num_classes的所需个数)if init_weights: #初始化权重函数self._initialize_weights()def forward(self, x): #正向传播 x就是输入的图像数据 # N x 3 x 224 x 224x self.features(x) #用features提取特征网络结构# N x 512 x 7 x 7x torch.flatten(x, start_dim1) #对输出进行一个展平处理(start_dim定义从哪个维度开始展平处理)# N x 512*7*7x self.classifier(x) #输入到分类网络结构return xdef _initialize_weights(self):for m in self.modules(): #遍历网络的每一个子模块if isinstance(m, nn.Conv2d): #遍历到卷积层# nn.init.kaiming_normal_(m.weight, modefan_out, nonlinearityrelu)nn.init.xavier_uniform_(m.weight) #使用xavier函数初始化初始化卷积核的权重if m.bias is not None: #卷积核采用偏置nn.init.constant_(m.bias, 0) #将偏执初始化为0elif isinstance(m, nn.Linear): #遍历到全连接层下面同理nn.init.xavier_uniform_(m.weight)# nn.init.normal_(m.weight, 0, 0.01)nn.init.constant_(m.bias, 0)4.VGG网络实例化
#实例化VGG网络结构
def vgg(model_namevgg16, **kwargs):assert model_name in cfgs, Warning: model number {} not in cfgs dict!.format(model_name)cfg cfgs[model_name]model VGG(make_features(cfg), **kwargs) #通过VGG这个类实现实例化网络(**可变长度的字典变量)return model 内容参考来源 使用pytorch搭建VGG网络_哔哩哔哩_bilibili