经典神经网络 -- VGG : 设计原理与pytorch实现
原理
VGG网络结构:输入为224×224大小的RGB图像,首先经过两个3×3的卷积层 → 一个最大下采样层 → 两个3×3的卷积层 → 一个最大下采样层 → 三个3×3的卷积层 → 一个最大下采样层 → 三个3×3的卷积层 → 一个最大下采样层 → 三个3×3的卷积层 → 一个最大下采样层 → 三个全连接层 → soft-max处理得到概率分布
网络中的亮点:通过堆叠多个3×3的卷积核来替代大尺度卷积核(减少所需参数),可以拥有相同的感受野
论文中提到,可以通过:堆叠两个3×3的卷积核替代5×5的卷积核,堆叠三个3×3的卷积核替代7×7的卷积核
代码实现
# VGGNet Visual Geometry Groupimport torch.nn as nn
import torch# official pretrain weights
model_urls = {'vgg11': 'https://download.pytorch.org/models/vgg11-bbd30ac9.pth','vgg13': 'https://download.pytorch.org/models/vgg13-c768596a.pth','vgg16': 'https://download.pytorch.org/models/vgg16-397923af.pth','vgg19': 'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth'
}class VGG(nn.Module):def __init__(self, features, num_classes=1000, init_weights=False):super(VGG, self).__init__()self.features = features# 构建分类网络结构self.classifier = nn.Sequential(nn.Linear(512*7*7, 4096), # 第一层全连接层nn.ReLU(True), nn.Dropout(p=0.5), # 50%的比例随机失活nn.Linear(4096, 4096), # 第二层全连接层nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, num_classes) # 第三层全连接层)if init_weights: # 是否进行权重初始化self._initialize_weights()# 正向传播过程def forward(self, x): # N x 3 x 224 x 224x = self.features(x) # 输入到特征提取网络# N x 512 x 7 x 7x = torch.flatten(x, start_dim=1) # 展平处理,从第1维度展平(第0维度为batch)# 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, mode='fan_out', nonlinearity='relu')nn.init.xavier_uniform_(m.weight)if m.bias is not None:nn.init.constant_(m.bias, 0)elif isinstance(m, nn.Linear):nn.init.xavier_uniform_(m.weight)# nn.init.normal_(m.weight, 0, 0.01)nn.init.constant_(m.bias, 0)# 构建提取特征网络结构
def make_features(cfg: list): # 传入对应配置的列表layers = [] # 定义空列表,存放每一层的结构in_channels = 3 # 输入为RGB图片,输入通道为3for v in cfg: # 遍历配置列表if v == "M": # 如果为M,则为池化层,创建一个最大池化下采样层layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else: # 不等于M,则为数字,创建卷积层conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)layers += [conv2d, nn.ReLU(True)] # 每个卷积层都采用RELU激活函数,将定义好的卷积层和RELU拼接in_channels = vreturn nn.Sequential(*layers) # 非关键字参数,*layers可以传递任意数量的实参,以元组的形式导入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'],
}# 实例化配置模型
def vgg(model_name="vgg16", **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) # 可以传递任意数量的实参,以字典的形式导入return modelnet = vgg(model_name="vgg16", num_classes=5, init_weights=True)
print(net)
x = torch.rand(1,3,224,224)
y = net(x)
print(y, y.shape) # tensor([[-0.0043, -0.0027, 0.0028, -0.0040, -0.0032]], torch.Size([1, 5])
参考文章:
使用pytorch搭建VGG网络 学习笔记_hywh111的博客-CSDN博客_pytorch vgg
经典神经网络 -- VGG : 设计原理与pytorch实现相关推荐
- 经典滤波器的设计原理
前言 想写一篇文章,包含经典滤波器的万象. 1.滤波器基础知识 总的来说,滤波器可分为经典滤波器和现代滤波器两大类.经典滤波器是假定输入信号x(n)中的有用成分和希望去除的成分各自占有不同的频带.这样 ...
- 深度解析LSTM神经网络的设计原理
引人入胜的开篇: 想要搞清楚LSTM中的每个公式的每个细节为什么是这样子设计吗?想知道simple RNN是如何一步步的走向了LSTM吗?觉得LSTM的工作机制看不透?恭喜你打开了正确的文章! 前方核 ...
- 【深度学习】经典神经网络 VGG 论文解读
VGG 在深度学习领域中非常有名,很多人 fine-tune 的时候都是下载 VGG 的预训练过的权重模型,然后在次基础上进行迁移学习.VGG 是 ImageNet 2014 年目标定位竞赛的第一名, ...
- 神经网络处理器设计原理,神经网络控制系统设计
谷歌发布tpu研究论文,神经网络专用处理器是怎样炼成的 TPU的需求大约真正出现在6年之前,那时我们在所有产品之中越来越多的地方已开始使用消耗大量计算资源的深度学习模型:昂贵的计算令人担忧. 假如存在 ...
- 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】
卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...
- 《不只是美:信息图表设计原理与经典案例》—— 2.5 功能限制形式
本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,第2.5节,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公 ...
- PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理
前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...
- 《不只是美:信息图表设计原理与经典案例》—— 第2章 形式与功能:可视是一种技术...
本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 《不只是美:信息图表设计原理与经典案例》—— 1.1 理性乐观派观派
本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第1章,第1.1节,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公 ...
- 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)
前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...
最新文章
- Overleaf-LaTex表格制作
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
- 培养组学对已分离人类细菌和古菌物种库的贡献
- 从实现iPhone的OAuth封装看国内互联网和开放平台
- RBF网络——核心思想:把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了...
- 【简译】关于依赖反转原则、控制反转和依赖注入的抽象的初学者指南
- php min命令,php min函数怎么用?
- 带有示例的Python date strftime()方法
- 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
- this.$http.post传参
- 点对点借贷dApp Yield宣布流动性激励迁移至SushiSwap
- IIS启用.net2.0
- ai人工智能_我的人工智能周:第5部分
- 图像加噪c语言,[转载]使用imnoise向图像中添加噪声
- 大电流dcdc降压芯片20a_详细计算公式丨Buck降压开关电源的功率损耗
- pip 批量完全卸载包
- 鸿蒙os系统3.0电脑,华为鸿蒙系统升级指南,速看!
- 工业锅炉计算机控制系统框图,计算机控制系统实例..doc
- 蓝牙冒充攻击(BIAS),无线安全不可忽视
- 如何防止企业电子邮件外泄