当前位置:网站首页>动手学深度学习_VggNet
动手学深度学习_VggNet
2022-08-04 18:37:00 【CV小Rookie】
VggNet 是 AlexNet 的改进,将 AlexNet 网络中的 5x5 或 11x11 的卷积核全都替换成 3x3 的大小;maxpoolin 改成了 2x2 的大小;另外对于部分卷积和Pooling进行块的封装,使用循环来构建复杂的框架。
上图是Vgg16的结构图,可以看到一共有 5 块,前两块是2层卷积+一层maxpooling,后三层是3层卷积+一层maxpooling。
具体设计网络的时候可以参考下面的表格,十分清晰。
def Conv3x3BNReLU(in_channels,out_channels):
return nn.Sequential(
nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=3,stride=1,padding=1),
nn.BatchNorm2d(out_channels),
nn.ReLU6(inplace=True)
)
class VGG(nn.Module):
def __init__(self, block_nums,num_classes=10):
super(VGG, self).__init__()
self.stage1 = self._make_layers(in_channels=1, out_channels=64, block_num=block_nums[0])
self.stage2 = self._make_layers(in_channels=64, out_channels=128, block_num=block_nums[1])
self.stage3 = self._make_layers(in_channels=128, out_channels=256, block_num=block_nums[2])
self.stage4 = self._make_layers(in_channels=256, out_channels=512, block_num=block_nums[3])
self.stage5 = self._make_layers(in_channels=512, out_channels=512, block_num=block_nums[4])
self.classifier = nn.Sequential(
nn.Linear(in_features=512*7*7,out_features=4096),
nn.Dropout(p=0.2),
nn.Linear(in_features=4096, out_features=4096),
nn.Dropout(p=0.2),
nn.Linear(in_features=4096, out_features=num_classes)
)
self._init_params()
def _make_layers(self, in_channels, out_channels, block_num):
layers = []
layers.append(Conv3x3BNReLU(in_channels,out_channels))
for i in range(1,block_num):
layers.append(Conv3x3BNReLU(out_channels,out_channels))
layers.append(nn.MaxPool2d(kernel_size=2,stride=2, ceil_mode=False))
return nn.Sequential(*layers)
def _init_params(self):
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)
def forward(self, x):
x = self.stage1(x)
x = self.stage2(x)
x = self.stage3(x)
x = self.stage4(x)
x = self.stage5(x)
x = x.view(x.size(0),-1)
out = self.classifier(x)
return out
def VGG16():
block_nums = [2, 2, 3, 3, 3]
model = VGG(block_nums)
return model
def VGG19():
block_nums = [2, 2, 4, 4, 4]
model = VGG(block_nums)
return model
打印一下看看网络具体结构吧
Sequential output shape: torch.Size([1, 64, 112, 112]) Sequential output shape: torch.Size([1, 128, 56, 56]) Sequential output shape: torch.Size([1, 256, 28, 28]) Sequential output shape: torch.Size([1, 512, 14, 14]) Sequential output shape: torch.Size([1, 512, 7, 7]) Flatten output shape: torch.Size([1, 25088]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 10])
边栏推荐
- 自己经常使用的三种调试:Pycharm、Vscode、pdb调试
- PHP代码审计10—命令执行漏洞
- How can test engineers break through career bottlenecks?
- CAN光纤转换器CAN光端机解决消防火灾报警
- Google Earth Engine APP - one-click online viewing of global images from 1984 to this year and loading an image analysis at the same time
- unity中实现ue眼球的渲染
- 2018年南海区小学生程序设计竞赛详细答案
- VPC2187/8 current mode PWM controller 4-100VIN ultra-wide voltage startup, highly integrated power control chip recommended
- FE01_OneHot-Scala应用
- 【简答题】月薪4k和月薪8k的区别就在这里
猜你喜欢
随机推荐
powershell和cmd对比
margin 塌陷和重合的理解
ECCV 2022 | FPN错位对齐,实现高效半监督目标检测(PseCo)
Win10只读文件夹怎么删除
After EasyCVR is locally connected to the national standard device to map the public network, the local device cannot play and cascade the solution
GBase8s存储过程
PHP代码审计8—SSRF 漏洞
HCIA-R&S自用笔记(22)STP状态与计时器、STP拓扑变化、STP配置及实验
win10 uwp MVVM 语义耦合
Babbitt | Metaverse daily must-read: Weibo animation will recruit all kinds of virtual idols around the world and provide support for them...
Literature Review on Involution of College Students
如何让 JS 代码不可断点
情绪的波动起伏
实验室专利书写指南
Google Earth Engine APP——一键在线查看全球1984-至今年的影像同时加载一个影像分析
什么是网站监控,网站监控软件有什么用?
Short-term reliability and economic evaluation of resilient microgrids under incentive-based demand response programs (Matlab code implementation)
mood swings
基于激励的需求响应计划下弹性微电网的短期可靠性和经济性评估(Matlab代码实现)
Global electronics demand slows: Samsung's Vietnam plant significantly reduces capacity