动手学PyTorch(李沐)16 ---- 使用块的网络VGG

本文介绍了VGG网络的设计原理,它是基于AlexNet的扩展,通过vgg_block构建更深更大的卷积结构。通过实例展示了如何使用PyTorch实现VGG网络并进行Fashion-MNIST数据集的训练。
摘要由CSDN通过智能技术生成

在这里插入图片描述
VGG的设计思路就是比AlexNet更深更大。

在这里插入图片描述
在这里插入图片描述
VGG块就是封装了AlexNet的三个卷积层加上一个池化层
在这里插入图片描述
VGG可以理解为一个更大更深的AlexNet
在这里插入图片描述
在这里插入图片描述

使用块的网络

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),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)

在这里插入图片描述
模型训练

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())

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值