《动手学深度学习(PyTorch版)》笔记7.2

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过,同时对于书上部分章节也做了整合。

Chapter7 Modern Convolutional Neural Networks

7.2 Network Using Blocks: VGG

在这里插入图片描述

import matplotlib.pyplot as plt
import torch
from torch import nn
from d2l import torch as d2l

def vgg_block(num_convs, in_channels, out_channels):
    layers = []
    for _ in range(num_convs):
        layers.append(nn.Conv2d(in_channels, out_channels,kernel_size=3, padding=1))
        layers.append(nn.ReLU())
        in_channels = out_channels
    layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
    return nn.Sequential(*layers)#可变参数

#指定每个vgg块的卷积层个数和输出通道个数
conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))

def vgg(conv_arch):
    conv_blks = []
    in_channels = 1
    # 卷积层部分
    for (num_convs, out_channels) in conv_arch:
        conv_blks.append(vgg_block(num_convs, in_channels, out_channels))
        in_channels = out_channels

    return nn.Sequential(*conv_blks, nn.Flatten(),
        # 全连接层部分
        nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5),
        #the spatial dimensions of the input tensor after the convolutional blocks are reduced to 7x7
        nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5),
        nn.Linear(4096, 10))

net = vgg(conv_arch)
X = torch.randn(size=(1, 1, 224, 224))
for blk in net:
    X = blk(X)
    print(blk.__class__.__name__,'output shape:\t',X.shape)

ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]#由于VGG-11比AlexNet计算量更大,因此构建一个通道数较少的网络
net = vgg(small_conv_arch)

#训练
lr, num_epochs, batch_size = 0.05, 10, 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
plt.show()

训练结果:
在这里插入图片描述

参考文献:VGG原始论文

相关推荐

  1. 动手深度学习(PyTorch)》笔记1

    2024-02-05 06:02:04       63 阅读
  2. 动手深度学习(PyTorch)》笔记3.5

    2024-02-05 06:02:04       51 阅读
  3. 动手深度学习(PyTorch)》笔记4.9

    2024-02-05 06:02:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 06:02:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 06:02:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 06:02:04       87 阅读
  4. Python语言-面向对象

    2024-02-05 06:02:04       96 阅读

热门阅读

  1. WPF DispatcherTimer用法

    2024-02-05 06:02:04       52 阅读
  2. 常用的正则表达式

    2024-02-05 06:02:04       52 阅读
  3. 力扣:17. 电话号码的字母组合

    2024-02-05 06:02:04       52 阅读
  4. Vivado Tri-MAC IP端口说明

    2024-02-05 06:02:04       60 阅读
  5. Objective-C中的“description“方法

    2024-02-05 06:02:04       50 阅读
  6. Objective-C 中的SEL

    2024-02-05 06:02:04       45 阅读
  7. 架构篇32:可扩展架构的基本思想和模式

    2024-02-05 06:02:04       45 阅读
  8. 网络爬虫的基本原理

    2024-02-05 06:02:04       47 阅读
  9. 什么是IDE,新手用哪个IDE比较好

    2024-02-05 06:02:04       44 阅读
  10. 【c++】跟webrtc学引用计数

    2024-02-05 06:02:04       39 阅读
  11. 【webrtc】跟webrtc学list遍历

    2024-02-05 06:02:04       43 阅读
  12. hive表加字段

    2024-02-05 06:02:04       53 阅读