【问题标题】:Making your own set of MNIST data (identical to MNIST format)制作自己的一组 MNIST 数据(与 MNIST 格式相同)
【发布时间】:2017-10-03 23:43:39
【问题描述】:

我正在尝试创建自己的 MNIST 数据版本。我已将我的训练和测试数据转换为以下文件;

test-images-idx3-ubyte.gz
test-labels-idx1-ubyte.gz
train-images-idx3-ubyte.gz
train-labels-idx1-ubyte.gz

(对于任何感兴趣的人,我使用JPG-PNG-to-MNIST-NN-Format 完成此操作,这似乎让我接近了我的目标。)

但是,这与 MNIST 数据 (mnist.pkl.gz) 的文件类型和格式并不完全相同。我知道 pkl 表示数据已被腌制,但我并不真正了解腌制数据的过程 - 腌制是否有特定的顺序?有人可以提供我应该用来腌制我的数据的代码吗?

【问题讨论】:

    标签: python pickle mnist


    【解决方案1】:
    import gzip
    import os
    
    import numpy as np
    import six
    from six.moves.urllib import request
    
    parent = 'http://yann.lecun.com/exdb/mnist'
    train_images = 'train-images-idx3-ubyte.gz'
    train_labels = 'train-labels-idx1-ubyte.gz'
    test_images = 't10k-images-idx3-ubyte.gz'
    test_labels = 't10k-labels-idx1-ubyte.gz'
    num_train = 17010
    num_test = 3010
    dim = 32*32
    
    
    def load_mnist(images, labels, num):
        data = np.zeros(num * dim, dtype=np.uint8).reshape((num, dim))
        target = np.zeros(num, dtype=np.uint8).reshape((num, ))
    
        with gzip.open(images, 'rb') as f_images,\
                gzip.open(labels, 'rb') as f_labels:
            f_images.read(16)
            f_labels.read(8)
            for i in six.moves.range(num):
                target[i] = ord(f_labels.read(1))
                for j in six.moves.range(dim):
                    data[i, j] = ord(f_images.read(1))
    
        return data, target
    
    
    def download_mnist_data():
    
        print('Converting training data...')
        data_train, target_train = load_mnist(train_images, train_labels,
                                              num_train)
        print('Done')
        print('Converting test data...')
        data_test, target_test = load_mnist(test_images, test_labels, num_test)
        mnist = {}
        mnist['data'] = np.append(data_train, data_test, axis=0)
        mnist['target'] = np.append(target_train, target_test, axis=0)
    
        print('Done')
        print('Save output...')
        with open('mnist.pkl', 'wb') as output:
            six.moves.cPickle.dump(mnist, output, -1)
        print('Done')
        print('Convert completed')
    
    
    def load_mnist_data():
        if not os.path.exists('mnist.pkl'):
            download_mnist_data()
        with open('mnist.pkl', 'rb') as mnist_pickle:
            mnist = six.moves.cPickle.load(mnist_pickle)
        return mnist
    download_mnist_data()
    

    【讨论】:

    • 这很棒 - 不知道为什么没有人喜欢它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2019-09-07
    • 1970-01-01
    • 2018-08-06
    • 2021-05-18
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多