将 MNIST 数据从 numpy 数组转换为原始 ubyte 数据

Convert MNIST data from numpy arrays to original ubyte data

我几乎完全使用 this 代码,只是更改了行:

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()

考虑到 pickling issues.The 原始 mnist.pkl.gz 是从他的 repo 下载的(可用 here), or the code to generate the .pkl.gz is here。输出很棒,它是训练和测试数据的 pickle numpy 数组,检查时,我可以看到是否打印了训练数据的长度,它是 250,000 个 numpy 数组。

我需要将数据恢复为与原始 MNIST 数据(即 ubyte、训练和测试数据以及标签分开)完全相同的格式,以便将其放入我无法控制的外部管道中,因此它必须和原来一样。

我真的不知道该怎么做。例如,我可以看到 this 之类的东西可能会有所帮助,但我看不出它如何解决这个问题。如果有人可以帮助我将这个腌制的 numpy 数组的输出恢复为原始 MNIST 格式(即 ubyte、训练和测试数据以及标签分开),我将非常感激。

编辑 1:我刚刚意识到这可能更容易,我实际上只需要将训练数据转换为 ubyte 格式,而不是测试数据,因为我已经有了原始 ubyte 格式的测试数据.

一旦你有了numpy数组中的数据,你就可以将numpy数组转换成mnist格式 参考这个 https://github.com/davidflanagan/notMNIST-to-MNIST/blob/17823f4d4a3acd8317c07866702d2eb2ac79c7a0/convert_to_mnist_format.py#L92

您可以在此处阅读更多关于 mnist 数据格式的信息 http://yann.lecun.com/exdb/mnist/

您还可以从此处验证转换后的图像