• 学习pytorch13 神经网络-搭建小实战&Sequential的使用


    B站小土堆pytorch视频学习

    官网

    https://pytorch.org/docs/stable/generated/torch.nn.Sequential.html#torch.nn.Sequential

    sequential 将模型结构组合起来 以逗号分割,按顺序执行,和compose使用方式类似。
    在这里插入图片描述

    模型结构

    在这里插入图片描述

    根据模型结构和数据的输入shape,计算用在模型中的超参数

    在这里插入图片描述

    箭头指向部分还需要一层flatten层,展开输入shape为一维
    在这里插入图片描述

    code

    import torch
    from torch import nn
    from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
    from torch.utils.tensorboard import SummaryWriter
    
    
    class MySeq(nn.Module):
        def __init__(self):
            super(MySeq, self).__init__()
            self.conv1 = Conv2d(3, 32, kernel_size=5, stride=1, padding=2)
            self.maxp1 = MaxPool2d(2)
            self.conv2 = Conv2d(32, 32, kernel_size=5, stride=1, padding=2)
            self.maxp2 = MaxPool2d(2)
            self.conv3 = Conv2d(32, 64, kernel_size=5, stride=1, padding=2)
            self.maxp3 = MaxPool2d(2)
            self.flatten1 = Flatten()
            self.linear1 = Linear(1024, 64)
            self.linear2 = Linear(64, 10)
    
        def forward(self, x):
            x = self.conv1(x)
            x = self.maxp1(x)
            x = self.conv2(x)
            x = self.maxp2(x)
            x = self.conv3(x)
            x = self.maxp3(x)
            x = self.flatten1(x)
            x = self.linear1(x)
            x = self.linear2(x)
            return x
    
    class MySeq2(nn.Module):
        def __init__(self):
            super(MySeq2, self).__init__()
            self.model1 = Sequential(Conv2d(3, 32, kernel_size=5, stride=1, padding=2),
                                     MaxPool2d(2),
                                     Conv2d(32, 32, kernel_size=5, stride=1, padding=2),
                                     MaxPool2d(2),
                                     Conv2d(32, 64, kernel_size=5, stride=1, padding=2),
                                     MaxPool2d(2),
                                     Flatten(),
                                     Linear(1024, 64),
                                     Linear(64, 10)
                                     )
    
        def forward(self, x):
            x = self.model1(x)
            return x
    
    
    myseq = MySeq()
    input = torch.ones(64, 3, 32, 32)
    print(myseq)
    print(input.shape)
    output = myseq(input)
    print(output.shape)
    
    myseq2 = MySeq2()
    print(myseq2)
    output2 = myseq2(input)
    print(output2.shape)
    
    wirter = SummaryWriter('logs')
    wirter.add_graph(myseq, input)
    wirter.add_graph(myseq2, input)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    running log

    MySeq(
      (conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
      (maxp1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
      (conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
      (maxp2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
      (conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
      (maxp3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
      (flatten1): Flatten(start_dim=1, end_dim=-1)
      (linear1): Linear(in_features=1024, out_features=64, bias=True)
      (linear2): Linear(in_features=64, out_features=10, bias=True)
    )
    torch.Size([64, 3, 32, 32])
    torch.Size([64, 10])
    MySeq2(
      (model1): Sequential(
        (0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
        (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
        (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
        (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (6): Flatten(start_dim=1, end_dim=-1)
        (7): Linear(in_features=1024, out_features=64, bias=True)
        (8): Linear(in_features=64, out_features=10, bias=True)
      )
    )
    torch.Size([64, 10])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    网络结构可视化

    from torch.utils.tensorboard import SummaryWriter
    wirter = SummaryWriter('logs')
    wirter.add_graph(myseq, input)
    
    • 1
    • 2
    • 3
    tensorboard --logdir=logs
    
    • 1

    tensorboard 展示图文件, 双击每层网络,可查看层定义细节
    在这里插入图片描述

  • 相关阅读:
    HCIP---eth-trunk-链路聚合
    Windows启动谷歌浏览器Chrome失败(应用程序无法启动,因为应用程序的并行配置不正确)解决方法
    小白学安全-KunLun-M静态白盒扫描工具
    12种数据量纲化处理方式
    Midjourney使用教程
    jsp就业管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    「太阁干货」详细解析MPLS转发原理
    导航 习题【微机原理】【习题】
    BUUCTF 你竟然赶我走 1
    SpringCloud(十)——ElasticSearch简单了解(一)初识ElasticSearch和RestClient
  • 原文地址:https://blog.csdn.net/weixin_42831564/article/details/133811747