当前位置: 首页 > article >正文

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


http://www.kler.cn/a/232002.html

相关文章:

  • 了解 Solon MVC 的参数注入规则
  • 高光谱深度学习调研
  • 【操作系统不挂科】<Linux进程概念(4)>选择题(带答案与解析)
  • zabbix7.0实操指南:基于麒麟V10操作系统部署zabbix7.0
  • Java项目实战II基于微信小程序的电子商城购物平台(开发文档+数据库+源码)
  • vue2/vue3中使用的富文本编辑器vue-quill
  • Vue3.0(五):Vue-Router 4.x详解
  • 推动海外云手机发展的几个因素
  • 前端开发之deepmerge的使用和示例(对象的深度合并)
  • Docker-Learn(二)保存、导入、使用Docker镜像
  • ChatGPT 3.5与4.0:深入解析技术进步与性能提升的关键数据
  • 3分钟带你了解Vue3的nextTick()
  • LabVIEW网络测控系统
  • jsp康养小镇管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 【MIMO】
  • ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排
  • bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具
  • NLP入门系列—词嵌入 Word embedding
  • JAVA面试汇总总结更新中ing
  • ICLR 2024 | Harvard FairSeg:第一个研究分割算法公平性的大型医疗分割数据集
  • Linux内核与驱动面试经典“小”问题集锦(5)
  • 服务器和云计算之间有什么关系?
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • 水题中的稀奇古怪trick合集
  • MySQL的MVCC机制
  • Android studio打开md无法显示md渲染问题