Inconsitencies/Inaccuracies 在 torchvision.datasets.MNIST 和 Michael Nielsens neuralnetworksanddeeplearning 之间

Inconsitencies/Inaccuracies between torchvision.datasets.MNIST and Michael Nielsens neuralnetworksanddeeplearning

我打印了 pytorch 和 https://github.com/mnielsen/neural-networks-and-deep-learning/tree/master/data 的 mnist 数据集的第一个训练图像的矢量化形式。 对于浮点精度误差来说差异似乎太大了。

第一个 mnist 训练图像的完整差异: https://www.diffchecker.com/6y6YTFiN

重现代码:

import mnist_loader
import numpy
numpy.set_printoptions(formatter={'float': '{: 0.4f}'.format})

d = mnist_loader.load_data()
print numpy.array(d[0][0][0]).reshape(784,1)

火炬:

import torch
import torchvision
from torchvision import transforms as tf

dtype = torch.float32

transforms = tf.Compose([tf.ToTensor()])

mnist_data = torchvision.datasets.MNIST("./mnist", transform=transforms, download=True)
data_loader = torch.utils.data.DataLoader(mnist_data,
                                          batch_size=500,
                                          shuffle=False,
                                          num_workers=1)

data, target = next(data_loader.__iter__())
print(data[0].reshape(784,1))

有人知道是什么原因造成的吗?

MNIST 图像由 0 到 255(含)范围内的整数像素值组成。为了生成您正在查看的张量,这些整数值已被归一化为介于 0.0 和 1,0 之间,方法是将它们全部除以某个常数因子。看来您的两个来源选择了不同的归一化因子:一个是 255,另一个是 256。