当前位置:网站首页>动手学深度学习_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])
边栏推荐
猜你喜欢

袋鼠云思枢:数驹DTengine,助力企业构建高效的流批一体数据湖计算平台

巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...

After EasyCVR is locally connected to the national standard device to map the public network, the local device cannot play and cascade the solution

路由技术

在表格数据集上训练变分自编码器 (VAE)示例

Day018 Inheritance

面试官:MVCC是如何实现的?
[Distributed Advanced] Let's fill in those pits in Redis distributed locks.

Nintendo won't launch any new hardware until March 2023, report says

2019 Haidian District Youth Programming Challenge Activity Elementary Group Rematch Test Questions Detailed Answers
随机推荐
机器学习——线性回归
mood swings
猜数字游戏
Flink/Scala - Storing data with RedisSink
【CCIG 2022】视觉大模型论坛
C#爬虫之通过Selenium获取浏览器请求响应结果
通配符SSL证书不支持多域名吗?
PHP代码审计8—SSRF 漏洞
mq消息积压怎么对应
单行、多行文本超出显示省略号
How does EasyCVR call the double-speed playback of device recording through the interface?
【简答题】月薪4k和月薪8k的区别就在这里
阿里云技术专家秦隆:云上如何进行混沌工程?
全球电子产品需求放缓:三星越南工厂大幅压缩产能
数据集成:holo数据同步至redis。redis必须是集群模式?
不论你是大众,科班和非科班,我这边整理很久,总结出的学习路线,还不快卷起来
VPC2187/8 电流模式 PWM 控制器 4-100VIN 超宽压启动、高度集成电源控制芯片推荐
PHP代码审计7—文件上传漏洞
win10 uwp 修改Pivot Header 颜色
How can test engineers break through career bottlenecks?
