PyTorch - невозможно использовать batchnorm1d с Linear - PullRequest
0 голосов
/ 31 мая 2019

Использование PyTorch's BatchNorm1D на 1-D тензоре дает ошибку:

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(),
)

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

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

объяснение параметров

num_features - C из ожидаемого ввода размера (N, C, L) или L из ввода размера (N, 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)
0 голосов
/ 04 июня 2019

Вы должны использовать 2D-тензор в качестве входных данных, поскольку BatchNorm1d работает с мини-пакетами:

Применяет пакетную нормализацию через 2D или 3D вход (мини-пакет 1D входов с дополнительным дополнительным размером канала) ... Подробнее

Вы можете попробовать torch.unsqueeze, чтобы исправить ваши входные размеры. Подробнее

...