Сообщение об ошибке ясно указывает на то, что ошибка произошла в строке
loss = criterion(outputs,target)
, где вы пытаетесь вычислить mean-squared error
между входом и целью.См. Эту строку: criterion = nn.MSELoss()
.
Я думаю, вам следует изменить свой код, где вы оцениваете потери между (выходной, целевой) парой входов, т. Е. loss = criterion(outputs,target)
, примерно так:
loss = criterion(outputs,target.view(1, -1))
Здесь вы делаете target
форму такой же, как outputs
из модели на линии
outputs = net(data)
Еще один способ заметить здесь - это вывод модели net
, т.е.выходные данные будут иметь форму batch_size X output_channels
, где размер пакета, если при первом измерении входных изображений, как во время обучения, вы получите пакеты изображений, так что ваша форма в прямом методе получит дополнительное измерение пакета в dim0
: [batch_size, channels, height, width
] и ouput_channels
- количество выходных объектов / каналов из последнего линейного слоя в модели net
.
И целевые метки будут иметь форму batch_size
, что составляет 10
в вашем случае отметьте batch_size
, который вы передали torch.utils.data.DataLoader()
.Поэтому при изменении его с помощью view(1, -1)
он будет преобразован в форму 1 X batch_size
, то есть 1 X 10
.
. Поэтому вы получаете ошибку:
RuntimeError: входные и целевые формы не совпадают: input [10 x 133], target [1 x 10]
Таким образом, обходной путь - заменить loss = criterion(outputs,target.view(1, -1))
на loss = criterion(outputs,target.view(-1, 1))
иизмените output_channels
последнего линейного слоя на 1
вместо 133
.Таким образом, и форма outputs
, и target
будут равны, и тогда мы сможем вычислить значение MSE
.
Узнайте больше о функции потери мощности из Pytorch *1051* здесь .