1 问题
问题1:了解VGG网络并利用PyTorch实现VGG网络.
问题2:探索卷积层参数量,计算量的计算方法
2 方法
问题1:了解VGG网络并利用PyTorch实现VGG网络
1.了解VGG网络
VGG是Oxford的Visual Geometry Group的组提出的,VGG的缩写也来自于这个组的名字。VGG网络探索了提升网络的深度对最终的图像识别准确率的重要性,同时在VGG中尝试使用小的卷积核来构建深层的卷积网络。VGG在当年的ILSVRC 2014上取得了第一的成绩,证明了增加网络的深度能够在一定程度上提高网络的性能。
2.利用Pytorch实现VGG网络
class VGG16(nn.Module): def __init__(self): super(VGG16, self).__init() self.features = nn.Sequential( nn.Conv2d(1, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(256, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2) ) self.classifier = nn.Sequential( nn.Linear(512, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 10) # 输出层,共10个类别 ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) x = self.classifier(x) return x |
问题2:探索卷积层参数量,计算量的计算方法
1.卷积层参数量的计算方法
卷积层需要关注的参数conv(kernel_size,in_channel,out_channel),即卷积核大小,输出通道数,和偏差bias.
计算公式:conv_param=(k_size*k_size*in_channel+bias)*out_channe
卷积层卷积核大小的计算:一个卷积层的卷积核参数量计算其实就受输入通道、输出通道、卷积核大小的影响,而实际卷积过程中我们还会给每个卷积核都加个偏置。
卷积核参数量= kernel.shape × kernel.num + bias.num
= ( channel(input) × kernel_width × kernel_height ) × channel(output) + channel(output)
2.卷积层计算量的计算方法
若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量为Cout,则输出特征图的大小为Cout×Hout×Wout。浮点运算量(FLOPs)作为计算量的指标,FLOPs原本指乘法和加法的计算次数总和,即单次乘法和单次加法各算一次浮点运算。如:(a*b+c)浮点运算量是2,(a*b+c*d)的浮点运算量是3。涉及到了乘法运算和加法运算。
乘法运算量 = Cout×Hout×Wout×(Cin×K1×K2)。bias=True,则加法运算次数为Cout×Hout×Wout×1;bias=False,则加法运算次数为0。
bias为True时,总的FLOPS为:Cout×Hout×Wout×(Cin×K1×K2+1)
bias为False时,总的FLOPS为:Cout×Hout×Wout×(Cin×K1×K2)
3 结语
通过本次学习VGG网络,我们明白了VGG网络的基本知识,了解到如果需要构建VGG网络,我们就需要对维度先进行定义,其中主要的部分就是提取特征网络结构与分类网络结构,之后我们要对权重参数进行构造,对于VGG网络的优点是它拥有小卷积核以及它采用连续的几个3x3的卷积核,带来了精度的提升。对于卷积层参数量,计算量的计算方法,我们通过CSDN了解到了它的基础定义与计算方法。