VGG网络架构实现,并用于MNIST数据集

详见李沐视频 与 同济子豪兄论文VGG的讲解

代码大致结构是看李沐大神的视频,由于使用d2l库中的函数老是报错(可能是我安装的版本有问题),于是将代码进行修改,但是功能一样


#关于VGG


#VGG中有许多block,block内部是n个卷积层加上一个maxpooling层
import torch
import torch.nn as nn
from d2l import torch as d2l
import torchvision
import torchvision.transforms as transforms

# d2l.load_data_fashion_mnist()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

#创建block
def vgg_block(num_conv,in_channels,out_channels):
    '''

    :param num_conv:  block中conv层的个数
    :param in_channels: 输入的通道数
    :param out_channels: 输出的通道数
    :return: 返回一个nn.Sequential包括的block
    '''
    layers=[]
    for _ in range(num_conv):
        layers.append(nn.Conv2d(in_channels=in_channels,
                                out_channels=out_channels,
                                kernel_size=3,
                                padding=1))
        layers.append(nn.ReLU(True))
        in_channels=out_channels
        #注意:
        #   conv2d的   stride默认为1
        #   maxPool2d的stride默认为None
    layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
    return nn.Sequential(*layers)

#VGG网络分为两部分:
#      blocks + FC

#VGG16结构如下:16(包括FC层) = 2+2+3+3+3+3
#      5个blocks
#               第一个block:2个卷积层:224*224*64
                            # maxpool(下采样(长宽减半))
#               第二个block:2个卷积层:224*224*128
                            # maxpool(下采样(长宽减半))
#               第三个block:3个卷积层:224*224*2
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值