RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1123755
Accepted
bard182
bard182
Asked:2020-05-11 18:29:39 +0000 UTC2020-05-11 18:29:39 +0000 UTC 2020-05-11 18:29:39 +0000 UTC

如何在其他两个卷积层之间添加一个卷积层?

  • 772

我想在其他两个卷积层之间添加一个卷积层。我应该如何计算它可能的超参数,以免违反传输张量的预期大小?

    self.conv1 = torch.nn.Conv2d(
        in_channels=1, out_channels=6, kernel_size=5, padding=2)
    self.act1  = torch.nn.Tanh()
    self.pool1 = torch.nn.AvgPool2d(kernel_size=2, stride=2)

    self.conv2 = torch.nn.Conv2d(
        in_channels=6, out_channels=16, kernel_size=5, padding=0)
    self.act2  = torch.nn.Tanh()
    self.pool2 = torch.nn.AvgPool2d(kernel_size=2, stride=2)
python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. MaxU - stop genocide of UA
    2020-05-11T19:54:55Z2020-05-11T19:54:55Z

    原理是新的中间层的输入通道数应该等于上一层的输出通道数,新层的输出通道数应该等于下一层的输入通道数层:

    class LeNet5(torch.nn.Module):
        def __init__(self):
            super(LeNet5, self).__init__()
    
            self.conv1 = torch.nn.Conv2d(
                in_channels=1, out_channels=6, kernel_size=5, padding=2)
            #######
            self.conv1_1 = torch.nn.Conv2d(
                in_channels=6, out_channels=6, kernel_size=5, padding=2)
            #######
            self.act1  = torch.nn.Tanh()
            self.pool1 = torch.nn.AvgPool2d(kernel_size=2, stride=2)
    
            self.pool1 = torch.nn.AvgPool2d(kernel_size=2, stride=2)
    
    
            self.conv2 = torch.nn.Conv2d(
                in_channels=6, out_channels=16, kernel_size=5, padding=0)
            self.act2  = torch.nn.Tanh()
            self.pool2 = torch.nn.AvgPool2d(kernel_size=2, stride=2)
    
            self.fc1   = torch.nn.Linear(5 * 5 * 16, 120)
            self.act3  = torch.nn.Tanh()
    
            self.fc2   = torch.nn.Linear(120, 84)
            self.act4  = torch.nn.Tanh()
    
            self.fc3   = torch.nn.Linear(84, 10)
    
        def forward(self, x):
    
            x = self.conv1(x)
            x = self.act1(x)
            #######
            x = self.conv1_1(x)
            x = self.act1(x)
            #######
            x = self.pool1(x)
    
            x = self.conv2(x)
            x = self.act2(x)
            x = self.pool2(x)
    
            x = x.view(x.size(0), x.size(1) * x.size(2) * x.size(3))
    
            x = self.fc1(x)
            x = self.act3(x)
            x = self.fc2(x)
            x = self.act4(x)
            x = self.fc3(x)
    
            return x
    
    • 1
  2. Best Answer
    nexoma
    2020-05-21T21:03:21Z2020-05-21T21:03:21Z

    或者,犯错误。运行脚本时输出和输入层数的不一致会给出异常,指示必须组合的数字。

    例如,

    RuntimeError: running_mean 应该包含 768 个元素而不是 32

    为了

       nn.Conv2d(48, **768**, 2, 1, 1), nn.BatchNorm2d(**32**), nn.ReLU(True),  
    

    或者

    RuntimeError: 给定组=1,大小为 [6, 512, 2, 2] 的权重,预期输入 [300, 768, 33, 9] 有 512 个通道,但有 768 个通道

        nn.Conv2d(48, 768, 2, 1, 1), nn.BatchNorm2d(768), nn.ReLU(True), 
    
        nn.Conv2d(512, 6, 2, 1), nn.ReLU(True), nn.MaxPool2d(2, 2),
    

    在 SO 上,他们经常引用一个考虑通道、填充和跨步的公式,

    也使用模型可视化

    ZZNet(
      (cnn): Sequential(
        (0): Conv2d(3, 3, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))
        (1): ReLU(inplace=True)
        (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (3): Conv2d(3, 48, kernel_size=(2, 2), stride=(1, 1))
        (4): ReLU(inplace=True)
        (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (6): Conv2d(48, 768, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
        (7): BatchNorm2d(768, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (8): ReLU(inplace=True)
        (9): Conv2d(512, 6, kernel_size=(2, 2), stride=(1, 1))
        (10): ReLU(inplace=True)
        (11): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (12): Conv2d(6, 6, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
        (13): BatchNorm2d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (14): ReLU(inplace=True)
        (15): Conv2d(6, 6, kernel_size=(2, 2), stride=(1, 1))
        (16): ReLU(inplace=True)
        (17): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (18): Conv2d(6, 6, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
        (19): BatchNorm2d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (20): ReLU(inplace=True)
        (21): Conv2d(6, 6, kernel_size=(2, 2), stride=(1, 1))
        (22): ReLU(inplace=True)
        (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
        (24): Conv2d(6, 6, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
        (25): BatchNorm2d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (26): ReLU(inplace=True)
        (27): LeakyReLU(negative_slope=0.1)
        (28): Flatten()
        (29): Linear(in_features=60, out_features=60, bias=True)
        (30): LeakyReLU(negative_slope=0.1)
        (31): Linear(in_features=60, out_features=12, bias=True)
      )
    )
    

    更新,渲染层

    net = ZZNet().to(device)
    
    #1
    print(net)
    
    #2
    # Print model's state_dict
    print("Model's state_dict:")
    for param_tensor in net.state_dict():
        print(param_tensor, "\t", net.state_dict()[param_tensor].size())
    
    
    #3
    torchstat.stat(net, (3, 32, 128))
    
    #4 - отброшенные варианты
    # for idx, m in enumerate(net.modules()):
    #         print(idx, '->', m, type(m))
    #
    # # for name, param in net.parameters():
    # #     if name in ['bias']:
    # #         print('param: ', param.size())
    #
    # print('NN: ',net.parameters())
    # for param in net.parameters():
    #     print(type(param.data), param.size())
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5