更改神经网络中隐藏层的数量会导致错误

问题描述 投票:0回答:1

如标题所述,如果我将 pytorch 神经网络中的隐藏层数量更改为与输入节点数量不同的任何值,则会返回以下错误。

运行时错误:mat1 和 mat2 形状无法相乘(380x10 和 2x10)

我认为该架构的编码不正确,但我对 pytorch 和神经网络相对较新,所以我无法发现错误。非常感谢任何帮助,我已经包含了下面的代码

class FCN(nn.Module):

def __init__(self, N_INPUT, N_OUTPUT, N_HIDDEN, N_LAYERS):
    super().__init__()
    activation = nn.Tanh
    self.fcs = nn.Sequential(*[
        nn.Linear(N_INPUT, N_HIDDEN),
        activation()])
    self.fch = nn.Sequential(*[
                  nn.Sequential(*[
                      nn.Linear(N_INPUT, N_HIDDEN),
                      activation()]) for _ in range(N_LAYERS-1)])
    self.fce = nn.Linear(N_INPUT, N_HIDDEN)

def forward(self, x):

    x = self.fcs(x)
    x = self.fch(x)
    x = self.fce(x)
    
    return x


torch.manual_seed(123)

pinn = FCN(2, 2, 10, 8)

如果 pinn 架构定义为

pinn = FCN(2, 2, 2, 8)
,则不会返回任何错误,但神经网络性能不佳。

其他信息:

  • 输入是批量大小为 380 的矩阵张量

如果您需要更多信息,请告诉我,谢谢!

python pytorch neural-network
1个回答
0
投票

您得到的错误是因为第一层 (

fcs
) 的输出具有维度
N_HIDDEN
(即 10),而
fch
中的隐藏层具有输入维度
N_INPUT
(即 2) .

要解决此问题,您必须确保所有层的输入大小与前一层的输出大小匹配。在你的代码中:

class FCN(nn.Module):
    def __init__(self, N_INPUT, N_OUTPUT, N_HIDDEN, N_LAYERS):
        super().__init__()
        activation = nn.Tanh
        self.fcs = nn.Sequential(
            nn.Linear(N_INPUT, N_HIDDEN),
            activation()
        )
        self.fch = nn.Sequential(*[
            nn.Sequential(
                nn.Linear(N_HIDDEN, N_HIDDEN),  # Adjust input size to N_HIDDEN
                activation()
            ) for _ in range(N_LAYERS - 1)
        ])
        self.fce = nn.Linear(N_HIDDEN, N_OUTPUT)  # Output layer

    def forward(self, x):
        x = self.fcs(x)
        x = self.fch(x)
        x = self.fce(x)
        return x

最后,为了获得良好的性能,您应该调整隐藏大小(不仅仅是 2 到 10 之间,您还可以尝试 100 或 1000)和优化器的学习率。

© www.soinside.com 2019 - 2024. All rights reserved.