【问题标题】:How to construct a network with two inputs in PyTorch如何在 PyTorch 中构建具有两个输入的网络
【发布时间】:2019-01-13 00:08:46
【问题描述】:

假设我想拥有通用的神经网络架构:

Input1 --> CNNLayer 
                    \
                     ---> FCLayer ---> Output
                    /
Input2 --> FCLayer

Input1 是图像数据,input2 是非图像数据。我已经在 Tensorflow 中实现了这个架构。

我发现的所有 pytorch 示例都是通过每一层的一个输入。如何定义前向函数来分别处理 2 个输入,然后将它们组合在一个中间层中?

【问题讨论】:

    标签: python machine-learning neural-network computer-vision pytorch


    【解决方案1】:

    “组合它们”我假设您的意思是 concatenate 两个输入。
    假设您沿着第二个维度连接:

    import torch
    from torch import nn
    
    class TwoInputsNet(nn.Module):
      def __init__(self):
        super(TwoInputsNet, self).__init__()
        self.conv = nn.Conv2d( ... )  # set up your layer here
        self.fc1 = nn.Linear( ... )  # set up first FC layer
        self.fc2 = nn.Linear( ... )  # set up the other FC layer
    
      def forward(self, input1, input2):
        c = self.conv(input1)
        f = self.fc1(input2)
        # now we can reshape `c` and `f` to 2D and concat them
        combined = torch.cat((c.view(c.size(0), -1),
                              f.view(f.size(0), -1)), dim=1)
        out = self.fc2(combined)
        return out
    

    请注意,当您定义self.fc2 的输入数量时,您需要同时考虑out_channelsself.conv 以及c 的输出空间维度。

    【讨论】:

    • 如果我的两个输入都是图像数据,我该如何进行连接?说 2 张昏暗 120X90 的灰度图像?
    • @iCHAIT 你可以在“通道”维度上连接,只要它们的空间大小相同
    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多