Почему BatchNorm1d не работает с размером пакета 1 в режиме обучения?Python

Программы на Python
Ответить
Anonymous
 Почему BatchNorm1d не работает с размером пакета 1 в режиме обучения?

Сообщение Anonymous »

Я обучаю небольшую модель PyTorch и хочу использовать nn.BatchNorm1d.

Когда размер пакета равен 1 и модель находится в режиме обучения, я получаю следующую ошибку:

Код: Выделить всё

ValueError
[/b]

Код: Выделить всё

: Expected more than 1 value per channel when training, got input size torch.Size([1, 20])

Код: Выделить всё

import torch
import torch.nn as nn

class BNModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(10, 20)
self.bn1 = nn.BatchNorm1d(20)
self.fc2 = nn.Linear(20, 1)

def forward(self, x):
x = self.fc1(x)
x = self.bn1(x)
x = torch.relu(x)
x = self.fc2(x)
return x

model = BNModel()

# batch size = 1
x = torch.randn(1, 10)

model.train()
print(model(x))
Если я увеличу размер пакета до 4 (x = torch.randn(4, 10)), он запустится без каких-либо ошибок. Я также использовал метод оценки model.eval() с размером пакета 1, и он по-прежнему работает без ошибок.
Мне трудно понять, почему BatchNorm требует более одной выборки в режиме обучения и каков правильный подход при обучении с размером пакета 1?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ining-mode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»