当前位置:网站首页>动手学深度学习_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])
边栏推荐
- 开发那些事儿:如何通过EasyCVR平台获取监控现场的人流量统计数据?
- win10 uwp DataContext
- Understanding of margin collapse and coincidence
- unity中实现ue眼球的渲染
- 群友求助,一周没有搞定的需求,3分钟就解决了?
- 基于 eBPF 的 Kubernetes 可观测实践
- EasyCVR本地接入国标设备映射公网后,本地设备出现无法播放与级联的解决方法
- 关于使用腾讯云HiFlow场景连接器每天提醒签到打卡
- Nintendo won't launch any new hardware until March 2023, report says
- 敏捷开发项目管理的一些心得
猜你喜欢
随机推荐
CAN光纤转换器CAN光端机解决消防火灾报警
敏捷开发项目管理的一些心得
巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...
作业8.3 线程同步互斥机制条件变量
server
报道称任天堂在2023年3月前不会推出任何新硬件产品
什么是网站监控,网站监控软件有什么用?
单行、多行文本超出显示省略号
在表格数据集上训练变分自编码器 (VAE)示例
GBase8s存储过程
Nintendo won't launch any new hardware until March 2023, report says
Scala104 - Built-in datetime functions for Spark.sql
全球电子产品需求放缓:三星越南工厂大幅压缩产能
动态数组底层是如何实现的
VPC2187/8 current mode PWM controller 4-100VIN ultra-wide voltage startup, highly integrated power control chip recommended
合宙Cat1 4G模块Air724UG配置RNDIS网卡或PPP拨号,通过RNDIS网卡使开发板上网(以RV1126/1109开发板为例)
股票开户广发证券,网上开户安全吗?
YOLOv7-Pose尝鲜,基于YOLOv7的关键点模型测评
How can test engineers break through career bottlenecks?
ros2订阅esp32发布的电池电压数据