【问题标题】:pytorch multiple branches of a modelpytorch 模型的多个分支
【发布时间】:2023-03-10 04:25:01
【问题描述】:

您好,我正在尝试使用 pytorch 制作这个模型。

每个输入由20张大小为28 X 28的图像组成,即图像中的C1~Cp。 每个图像都进入相同结构的 CNN,但它们的输出最终会连接起来。

我目前正在努力为每个 CNN 模型提供多个输入。 第一个带有三个卷积层的模型中的每个模型在代码中看起来像这样,但我不太确定如何将 20 个不同的输入放入相同结构的不同模型中以最终连接。

        self.features = nn.Sequential(
            nn.Conv2d(1,10, kernel_size = 3, padding = 1),
            nn.ReLU(),
            nn.Conv2d(10, 14, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.Conv2d(14, 18, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.Flatten(),
            nn.Linear(28*28*18, 256)
        )

我尝试提供一个输入列表作为转发功能的输入,但它最终出现错误并且无法通过。 如果有任何不清楚的地方,我很乐意进一步解释。

【问题讨论】:

    标签: pytorch concatenation conv-neural-network


    【解决方案1】:

    假设每条路径都有自己的权重,可能这可以通过分组卷积来完成,尽管预融合 Linear 可能会造成一些麻烦。

        P = 20
        self.features = nn.Sequential(
            nn.Conv2d(1*P,10*P, kernel_size = 3, padding = 1, groups = P ),
            nn.ReLU(),
            nn.Conv2d(10*P, 14*P, kernel_size=3, padding=1, groups = P),
            nn.ReLU(),
            nn.Conv2d(14*P, 18*P, kernel_size=3, padding=1, groups = P),
            nn.ReLU(),
            nn.Conv2d(18*P, 256*P, kernel_size=28,          groups = P),  # not shure about this one
            nn.Flatten(),
            nn.Linear(256*P, 1024 )
        )
    

    【讨论】:

    • 如果每条路径需要共享相同的权重怎么办?
    • 在所有卷积中? 已删除:(然后您将获得所有路径的相同结果)。然后它只是对这批 20 张图像的应用路径功能。
    • 已检查。答案是一样的:把你的张量当作一批图像,技术上只是重塑它 (1, A, X, Y) -> (A, 1, X, Y)
    【解决方案2】:

    只需将forward 定义为将张量列表作为输入,然后使用相应的 CNN 处理每个输入(在示例 sn-p 中,CNN 共享相同的结构但不共享参数,这是我假设的您需要。您需要根据您的要求填写点...

    class MyModel(torch.nn.Module):
       def __init__(self, ...):
           ...
           self.cnns = torch.nn.ModuleList([torch.nn.Sequential(...) for _ in range(20)])
       
       def forward(xs: list[Tensor]):
           return torch.cat([cnn(x) for x, cnn in zip(xs, self.cnns)], dim=...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 2021-06-23
      • 2012-12-21
      • 2021-10-12
      • 2020-11-23
      • 2020-06-14
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多