2017-10-03 15 views
2

J'essaie de créer ma propre version des données MNIST. J'ai converti mes données d'entraînement et de test aux fichiers suivants.Création de votre propre ensemble de données MNIST (identique au format MNIST)

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

(Pour les personnes intéressées Je l'ai fait en utilisant JPG-PNG-to-MNIST-NN-Format qui me semble se rapprocher de ce que je vise.)

Toutefois, ce n'est pas tout à fait le même que le type de fichier et le format de les données MNIST (mnist.pkl.gz). Je comprends que pkl signifie que les données ont été décapées, mais je ne comprends pas vraiment le processus de décapage des données - y a-t-il un ordre spécifique au décapage? Quelqu'un peut-il fournir du code que je devrais utiliser pour décaper mes données?

Répondre

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

c'est super - je ne sais pas pourquoi personne d'autre n'a aimé – javadba