Pytorch学习日记03-Sequential的使用及模型实操

文章展示了如何使用PyTorch的Sequential模块构建一个基于CIFAR10数据集的类分类网络。网络结构包括卷积层、池化、Flatten和线性层。通过手动实现和使用Sequential两种方式,验证了网络的正确性,并利用TensorBoard进行网络可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sequential的使用

torch.nn.Sequential(arg: OrderedDict[str, Module])
官网示例:

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )
像是能够组合实现全过程网络。和transform中compose有相似作用!

为能够说明使用Sequential效果,搭建一个最开始的对CIFAR10的简单分类过程!

首个复杂模型-类分类网络

 创建的网络是根据对CIFAR10的分类网络为基底进行初步创建,并利用手动数据进行验证网络是否正确!
在这里插入图片描述
针对分类问题设计的网络模型为:
在这里插入图片描述

 网络结构有:卷积层5*5-池化2*2-卷积-池化-卷积-池化-flatten展开-线性变换。注意模型中是少了一部分的线性层得到64。

import torch.nn
from torch import nn
from torch.utils.tensorboard import SummaryWriter

""""
    真实利用所学的各种网络层进行手动实现。
    并在过程中演示Sequential的使用体验。
    使用tensorboard进行一个网络视图的绘制!
    注:	
    	在建成自己的网络模型或download其他程序,请手动创建一个数据进行验证网络的正确性。
"""

class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        # padding值和stride值需要计算。一般dilation默认为1不适用空洞卷积  原尺寸卷积padding设置为kernel_size/2
        # 计算公式请看卷积章节的shape计算公式
        self.conv1 = nn.Conv2d(3, 32, 5, padding=2, )
        self.maxpool1 = nn.MaxPool2d(2)
        self.conv2 = nn.Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = nn.MaxPool2d(2)
        self.conv3 = nn.Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = nn.MaxPool2d(2)
        #     引入flatten层  进行展平
        self.flatten = nn.Flatten()
        self.linear1 = nn.Linear(1024, 64)
        self.linear2 = nn.Linear(64, 10)
        # 解释Sequential的使用
        # self.module1 = nn.Sequential(
        #     nn.Conv2d(3, 32, 5, 1, 2),
        #     nn.MaxPool2d(2),
        #     nn.Conv2d(32, 32, 5, 1, 2),
        #     nn.MaxPool2d(2),
        #     nn.Conv2d(32, 64, 5, 1, 2),
        #     nn.MaxPool2d(2),
        #     nn.Flatten(),
        #     nn.Linear(1024,64),
        #     nn.Linear(64,10),
        # )

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        # x = self.module1(x)
        return x


mymodule = MyModule()
print(mymodule)
# 自己创建过一个模型后需要去利用一个实际能够计算的值去验证其搭建的正确性!全为1的数据
input = torch.ones(64, 3, 32, 32)
output = mymodule(input)
print(output.shape)

writer = SummaryWriter("Sequential")
# 计算图?
writer.add_graph(mymodule,input)
writer.close()

这是没有使用Sequential的结果与绘图结果:
网络结构及验证结果
在这里插入图片描述

使用Sequential的结果与绘图结果:
运行网络结构结果

tensorboard
结果表明,实验结果是都能达到要求,且绘图工具对每一层之间的数据格式传输能够表达一致清楚,且针对各层设置的参数情况也能显示出来,Sequential能简化代码更有结构化思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值