• PyTorch入门学习(十二):神经网络-搭建小实战和Sequential的使用


    目录

    一、介绍

    二、先决条件

    三、代码解释


    一、介绍

    在深度学习领域,构建复杂的神经网络模型可能是一项艰巨的任务,尤其是当您有许多层和操作需要组织时。幸运的是,PyTorch提供了一个方便的工具,称为Sequential API,它简化了神经网络架构的构建过程。在本文中,将探讨如何使用Sequential API构建一个用于图像分类的卷积神经网络(CNN)。接下来将详细探讨每部分代码,并讨论每个组件,并清楚地了解如何在项目中充分利用PyTorch的Sequential API。

    二、先决条件

    • 对神经网络和PyTorch有基本了解。
    • 安装了PyTorch的Python环境。

    三、代码解释

    1. import torch
    2. from torch import nn
    3. from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
    4. from torch.utils.tensorboard import SummaryWriter

    在此代码片段中,导入了必要的库,包括PyTorch及其用于神经网络操作的模块,以及用于TensorBoard可视化的SummaryWriter。

    1. class Tudui(nn.Module):
    2. def __init__(self):
    3. super(Tudui, self).__init__()
    4. self.model1 = Sequential(
    5. Conv2d(3, 32, 5, padding=2),
    6. MaxPool2d(2),
    7. Conv2d(32, 32, 5, padding=2),
    8. MaxPool2d(2),
    9. Conv2d(32, 64, 5, padding=2),
    10. MaxPool2d(2),
    11. Flatten(),
    12. Linear(1024, 64),
    13. Linear(64, 10),
    14. )

    Tudui类定义了神经网络模型。并使用Sequential API创建一系列层和操作,而不是逐一定义每个层并分别管理它们。在这种情况下,我们有三个卷积层,每个卷积层后跟一个最大池化层。然后,将输出展平并添加两个全连接(线性)层。这些层是按顺序定义的,使代码更加简明和可读。

    1. def forward(self, x):
    2. x = self.model1(x)
    3. return x

    forward方法中,通过模型构造函数传递输入张量x。由于层在self.model1中按顺序组织,并不需要在前向传递中单独调用每个层。这简化了代码并增强了其清晰度。

    tudui = Tudui()
    

    创建了Tudui模型的一个实例。

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

    生成一个形状为(64, 3, 32, 32)的示例输入张量,并将其通过模型传递以获得输出。

    1. writer = SummaryWriter("logs")
    2. writer.add_graph(tudui, input)
    3. writer.close()

    为了使用TensorBoard可视化模型的架构和计算图,所以创建了一个SummaryWriter并添加了图形。这一步对于调试和理解数据流经网络的过程非常有价值。

    完整代码如下:

    1. """
    2. 输入大小为3*32*32
    3. 经过3次【5*5卷积核卷积-2*2池化核池化】操作后,输出为64*4*4大小
    4. 展平后为1*1024大小
    5. 经过全连接层后输出为1*10
    6. """
    7. import torch
    8. from torch import nn
    9. from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
    10. from torch.utils.tensorboard import SummaryWriter
    11. class Tudui(nn.Module):
    12. def __init__(self):
    13. super(Tudui,self).__init__()
    14. # self.conv1 = Conv2d(3,32,5,padding=2)
    15. # # self.maxpool1 = MaxPool2d(2)
    16. # # self.conv2 = Conv2d(32,32,5,padding=2)
    17. # # self.maxpool2 = MaxPool2d(2)
    18. # # self.conv3 = Conv2d(32,64,5,padding=2)
    19. # # self.maxpool3 = MaxPool2d(2)
    20. # # self.flatten = Flatten()
    21. # # self.linear1 = Linear(1024,64)
    22. # # self.linear2 = Linear(64,10)
    23. # 构建一个序列化的container,可以把想要在神经网络中添加的操作都放进去,按顺序进行执行。
    24. self.model1 =Sequential(
    25. Conv2d(3, 32, 5, padding=2),
    26. MaxPool2d(2),
    27. Conv2d(32, 32, 5, padding=2),
    28. MaxPool2d(2),
    29. Conv2d(32, 64, 5, padding=2),
    30. MaxPool2d(2),
    31. Flatten(),
    32. Linear(1024, 64),
    33. Linear(64, 10),
    34. )
    35. """
    36. 可以看到上面神经网络进行搭建时非常繁琐,在init中进行了多个操作的定以后需要在forward中逐次进行调用,
    37. 因此我们使用sequential方法,在init方法中直接定义一个model,然后在下面的forward方法中直接使用一次model即可。
    38. """
    39. def forward(self,x):
    40. # x = self.conv1(x)
    41. # x = self.maxpool1(x)
    42. # x = self.conv2(x)
    43. # x = self.maxpool2(x)
    44. # x = self.conv3(x)
    45. # x = self.maxpool3(x)
    46. # x = self.flatten(x)
    47. # x = self.linear1(x)
    48. # x = self.linear2(x)
    49. x = self.model1(x)
    50. return x
    51. tudui = Tudui()
    52. print(tudui)
    53. input = torch.ones((64,3,32,32))
    54. output = tudui(input)
    55. print(output.shape)
    56. writer = SummaryWriter("logs")
    57. writer.add_graph(tudui,input)
    58. writer.close()

    参考资料:

    视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】

  • 相关阅读:
    【Python脚本进阶】2.1、端口扫描器(上):TCP全连接扫描
    DOM系列之scroll系列
    框架的重要组成
    高压配电安全监测系统:确保电力系统的稳定运行
    图神经网络
    Android App 启动流程学习
    Google Earth Engine(GEE)——Landsat 全球土地调查 1975年数据集
    2023年09月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
    vscode中vue项目引入的组件的颜色没区分解决办法
    神经网络的三种训练方法,神经网络训练速度
  • 原文地址:https://blog.csdn.net/qq_46179411/article/details/134180472