我几乎完全使用了这段代码,只是改变了这一行:
f = gzip.open("../data/mnist.pkl.gz", 'rb')
training_data, validation_data, test_data = cPickle.load(f)
到这些行:
import pickle as cPickle
f = gzip.open("mnist.pkl.gz", 'rb')
u = cPickle._Unpickler(f)
u.encoding='latin1'
training_data, validation_data, test_data = u.load()
解决酸洗问题。原始 mnist.pkl.gz 是从他的 repo 下载的(可在此处获得),或者生成 .pkl.gz 的代码在此处。输出很棒,它是训练和测试数据的腌制 numpy 数组,经过检查,我可以看到是否打印了训练数据的长度,它是 250,000 个 numpy 数组。
我需要将数据恢复为与原始 MNIST 数据完全相同的格式(即 ubyte、训练和测试数据以及标签分开),以放入我无法控制的外部管道中,因此它必须与原来的。
我真的很困惑如何做到这一点。例如,我可以看到这样的事情可能会有所帮助,但我看不出它如何适合这个问题。如果有人可以帮助我将这个腌制的 numpy 数组的输出恢复为原始的 MNIST 格式(即 ubyte,训练和测试数据以及标签分开),我将非常感激。
编辑 1:我刚刚意识到这可能更容易,实际上我只需要将训练数据转换为 ubyte 格式,而不是测试数据,因为我已经拥有原始 ubyte 格式的测试数据。