【问题标题】:PyTorch - unable to use batchnorm1d with LinearPyTorch - 无法将 batchnorm1d 与 Linear 一起使用
【发布时间】:2019-10-17 08:14:38
【问题描述】:

在一维张量上使用 PyTorch 的 BatchNorm1D 会产生错误:

RuntimeError: running_mean 应该包含 1 个元素而不是 2304

有什么可能出错的建议吗?

我的代码:

self.net_common = nn.Sequential (
    nn.Linear(64*64, 48*48),
    nn.BatchNorm1d(48*48),
    nn.Tanh(),
    nn.Dropout(p=0.25),
    nn.Linear(48*48, 32*32),
    nn.BatchNorm1d(32*32),
    nn.Tanh(),
)

【问题讨论】:

    标签: pytorch batch-normalization


    【解决方案1】:

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

    参数说明

    num_features – 来自大小为 (N, C, L) 的预期输入的 C 或来自大小为 (N, L) 的输入的 L 我认为 C 表示通道,L 表示数据长度,N 表示批量大小。所以如果你输入的形状是(N,C,L),也许C是1或3,你可以使用

    ···
    nn.BatchNorm1d(1)
    ···
    

    为了测试,你可以使用下面的代码:

    m = nn.BatchNorm1d(1)
    d = torch.randn(4, 1, 8)
    output = m(d)
    

    【讨论】:

      【解决方案2】:

      您应该使用 2D 张量作为输入,因为 BatchNorm1d 适用于小批量:

      在 2D 或 3D 输入(具有可选附加通道维度的小批量 1D 输入)上应用批量标准化... More

      您可以尝试torch.unsqueeze 来修正您的输入尺寸。 More

      【讨论】:

        猜你喜欢
        • 2020-04-17
        • 1970-01-01
        • 2019-03-10
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        相关资源
        最近更新 更多