• 深度学习——使用块的网络VGG(笔记)


    使用块的网络VGG

    1.AlexNet比LeNet更深更大来得到精度,能不能更深和更大?

    选项:

    ①更多的全连接层(太贵)

    ②更多的卷积层

    ③将卷积层组合成块

    2.VGG块的选择

    ①深或者宽?

    5*5卷积

    3*3卷积

    选择深且窄的效果更好

    ②VGG块

    3*3卷积(填充1):学习到更多的特征且参数更少(n层,m通道)

    2*2最大池化层(步幅2)

    3.VGG架构

    ①多个VGG块后连接成全连接层

    ②不同次数的重复块得到的不同架构VGG-16,VGG-19

    4.VGG进度

    ①LeNet(1995)

    2卷积+池化层

    2全连接层

    ②AlexNet

    更大更深

    ReLu,DropOut数据增强

    ③VGG

    更大更深的AlexNet(重复的VGG块)

    【总结】

    ①VGG使用可重复使用的卷积块来构建深度卷积神经网络

    ②不同的卷积块个数和超参数可以得到不同复杂度的变种。

    【代码实现】

    1. import torch
    2. from torch import nn
    3. from d2l import torch as d2l
    4. # 函数由三个参数 卷积层数量num_convs,输入通道in_channels,输出通道out_channels
    5. # VGG块
    6. def vgg_block(num_convs, in_channels, out_channels):
    7. layers = []
    8. for _ in range(num_convs):
    9. layers.append(nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1))
    10. layers.append(nn.ReLU())
    11. in_channels = out_channels # 上一次的输出是下一次的输入
    12. layers.append(nn.MaxPool2d(kernel_size=2, stride=2))
    13. return nn.Sequential(*layers)
    14. # VGG网络 超参数变量conv_arch:每个VGG块里卷积层个数和输出通道数
    15. conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))
    16. # 定义VGG-11
    17. def vgg(conv_arch):
    18. conv_blks = []
    19. in_channels = 1
    20. # 卷积层部分
    21. for (num_convs, out_channels) in conv_arch:
    22. conv_blks.append(vgg_block(num_convs, in_channels, out_channels))
    23. in_channels = out_channels
    24. return nn.Sequential(
    25. *conv_blks, nn.Flatten(),
    26. # 全连接层部分
    27. nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5),
    28. nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5),
    29. nn.Linear(4096, 10)
    30. )
    31. net = vgg(conv_arch)
    32. # 模型训练
    33. ratio = 4
    34. small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
    35. net = vgg(small_conv_arch)
    36. lr, num_epochs, batch_size = 0.05, 10, 128
    37. train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
    38. d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
    39. d2l.plt.show()

  • 相关阅读:
    一次完整的支付链路
    JUC P5 自定义线程池,线程池应用 基础+代码
    Node.js的多版本管理工具 gnvm(win环境)的详细安装教程(图解步骤、通俗易懂、亲测有效)
    Rust中的并发性:Sync 和 Send Traits
    Hive3 - HiveSQL 特征及操作
    App测试和Web测试的区别
    【COS 加码福利】COS 用户实践有奖征文,等你来投稿!
    论机器学习(ML)在网络安全中的重要性
    C++设计模式之适配器模式
    MR源码解析和join案例
  • 原文地址:https://blog.csdn.net/jbkjhji/article/details/128191029