PyTorch: немного разные результаты для разных размеров партий - PullRequest
2 голосов
/ 24 апреля 2019

Я использую сеть VGG19 для классификации изображений CIFAR10, но у меня есть немного другие результаты для данных разных размеров. Код:

net.eval()

f_image = net.forward(Variable(image, requires_grad=True)).data

f_image2 = net.forward(Variable(image[0].unsqueeze(0), requires_grad=True)).data

f_image3 = net.forward(Variable(image[0].unsqueeze(0), requires_grad=True)).data

print(‘f_image - f_image2 = {}’.format((f_image[0] - f_image2).cpu().data.numpy()))
print(‘f_image - f_image3 = {}’.format((f_image[0] - f_image3).cpu().data.numpy()))
print(‘f_image2 - f_image3 = {}’.format((f_image2 - f_image3).cpu().data.numpy()))

В частности, изображение имеет размер [batch_size, n_channels, height, width]. И я ожидаю, что f_image[0].unsqueeze(0) будет таким же, как f_image2 и f_image3. Тем не менее, они немного отличаются:

f_image - f_image2 = [[ 0.0000000e+00 3.7252903e-09 -1.8626451e-09 3.7252903e-09
0.0000000e+00 -3.7252903e-09 3.7252903e-09 -1.8626451e-09
3.7252903e-09 -1.3969839e-09]]
f_image - f_image3 = [[ 0.0000000e+00 3.7252903e-09 -1.8626451e-09 3.7252903e-09
0.0000000e+00 -3.7252903e-09 3.7252903e-09 -1.8626451e-09
3.7252903e-09 -1.3969839e-09]]
f_image2 - f_image3 = [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

Разница очень мала, это ошибка или ожидаемое поведение PyTorch?

...