《动手学深度学习(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原始论文

相关推荐
科士威传动3 分钟前
丝杆支撑座同轴度如何安装?
人工智能·科技·机器学习·自动化
2401_841495646 分钟前
【自然语言处理】中文 n-gram 词模型
人工智能·python·算法·自然语言处理·n-gram·中文文本生成模型·kneser-ney平滑
百***24377 分钟前
GPT5.1 vs Claude-Opus-4.5 全维度对比及快速接入实战
大数据·人工智能·gpt
腾讯云开发者19 分钟前
与 AI 共生,腾讯云携手行业专家共话数智驱动新质生长
人工智能
嘻哈baby20 分钟前
为什么越来越多的人放弃Flask转向FastAPI?
python
San3027 分钟前
从零到一:彻底搞定面试高频算法——“列表转树”与“爬楼梯”全解析
javascript·算法·面试
WLJT12312312330 分钟前
AI懂你,家更暖:重塑生活温度的智能家电新范式
人工智能·生活
F_D_Z33 分钟前
最长连续序列(Longest Consecutive Sequence)
数据结构·算法·leetcode
ss27334 分钟前
Java并发编程:DelayQueue延迟订单系统
java·python·算法
JHC00000036 分钟前
118. 杨辉三角
python·算法·面试