【Pytorch】搭建网络模型的实战

本文介绍了如何使用Pytorch构建CIFAR10数据集的分类网络模型,通过Sequential模块简化网络定义,并利用tensorboard进行网络结构的可视化。模型包含多层卷积、最大池化及全连接层。
摘要由CSDN通过智能技术生成

对CIFAR10数据集进行分类,根据图片内容识别这是哪一类

CIFAR10 model structure

在这里插入图片描述

  • 输入input:3通道的32 x 32 图片
  • 卷积操作的通道数不变 那是因为经过了padding操作
  • 最大池化 不改变channel数
  • 输出是一个一维向量 十种类别

搭建网络

第一次卷积操作之后,图片大小不变,经过了padding操作 padding = 2
在这里插入图片描述

from torch import nn
from  torch.nn import Conv2d,MaxPool2d,Flatten,Linear

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()

        #  第一层 卷积层  填充操作 保证图片大小不变
        self.conv1 = Conv2d(3,32,5,padding = 5)

        #  最大池化 操作
        self.maxpool1 = MaxPool2d(2)

        # 第二层卷积  通道数不变
        self.conv2 = Conv2d(32,32,5,padding=2)

        #  x最大池化 操作
        self.maxpool2 = MaxPool2d(2)

        #  第三层卷积操作
        self.conv3 = Conv2d(32,64,5,padding=2)

        # 最大池化操作
        self.maxpool3 = MaxPool2d(2)

        # 将数据进行展平 64 * 4 * 4 = 1024 一维向量

        # 64 x 1024  这里的64是batch_size
        self.flatten = Flatten()


        #  将展平之后的向量 输入全连接层

        # 输入1024  输出64
        self.linear1 = Linear(1024,64)
        self.linear2 = 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)

        return x
    
tudui = Tudui()

print(tudui)

input  = torch.ones((64,3,32,32))
output = tudui.forward(input)

print(output.shape)
    

使用Sequential进行搭建网络模型

将上面的代码使用sequential进行置换

from torch import nn
from  torch.nn import Conv2d,MaxPool2d,Flatten,Linear,Sequential
import torch

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()

        # #  第一层 卷积层  填充操作 保证图片大小不变
        # self.conv1 = Conv2d(3,32,5,padding = 5)

        # #  最大池化 操作
        # self.maxpool1 = MaxPool2d(2)

        # # 第二层卷积  通道数不变
        # self.conv2 = Conv2d(32,32,5,padding=2)

        # #  x最大池化 操作
        # self.maxpool2 = MaxPool2d(2)

        # #  第三层卷积操作
        # self.conv3 = Conv2d(32,64,5,padding=2)

        # # 最大池化操作
        # self.maxpool3 = MaxPool2d(2)

        # # 将数据进行展平 64 * 4 * 4 = 1024 一维向量

        # # 64 x 1024  这里的64是batch_size
        # self.flatten = Flatten()


        # #  将展平之后的向量 输入全连接层

        # # 输入1024  输出64
        # self.linear1 = Linear(1024,64)
        # self.linear2 = Linear(64,10)


        self.model1 = Sequential(
            Conv2d(3,32,5,padding=2),
            MaxPool2d(2),
            Conv2d(32,32,5,padding=2),
            MaxPool2d(2),
            Conv2d(32,64,5,padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024,64),
            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.model1(x)

        return x
    
tudui = Tudui()
print(tudui)

input  = torch.ones((64,3,32,32))
output = tudui.forward(input)
print(output.shape)

使用tensorboard查看网络结构

在这里插入图片描述

from torch import nn
# from tensorboardX import SummaryWriter
from  torch.nn import Conv2d,MaxPool2d,Flatten,Linear,Sequential
import torch

from torch.utils.tensorboard import SummaryWriter

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()

        self.model1 = Sequential(
            Conv2d(3,32,5,padding=2),
            MaxPool2d(2),
            Conv2d(32,32,5,padding=2),
            MaxPool2d(2),
            Conv2d(32,64,5,padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024,64),
            Linear(64,10)
        )

    def forward(self,x):

        x = self.model1(x)

        return x
    
tudui = Tudui()

print(tudui)

input  = torch.ones((64,3,32,32))
output = tudui.forward(input)


#  输出是 64 x 10 64代表batch_size
print(output.shape)

writer = SummaryWriter("../logs_seq")
writer.add_graph(tudui,input)
writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值