[PYTHON] Différentes façons d'importer Mnist

(Cet article est une réécriture pour Qiita qui a été écrite à ici.)

introduction

L'ensemble de données de reconnaissance de caractères manuscrits est un ensemble de données bien connu.

Il est préparé pour pouvoir être utilisé à partir de diverses bibliothèques, mais à ce moment-là j'étais comme "je ne lis pas les fichiers de l'extérieur" (← je pense que maintenant, je ne comprends pas bien) ou le net J'étais confus parce qu'il y avait différentes façons de le lire même si je le recherchais, et je ne comprenais pas la relation.

J'ai pensé qu'il pourrait y avoir d'autres personnes comme ça, alors je l'ai écrit dans le but d'organiser l'information.

supposition

Nous partons de l'hypothèse que sklearn, tensorflow et pytorch sont installés. (J'ai utilisé Anaconda pour préparer l'environnement)

Tous les sklearn, tensorflow et pytorch ne sont pas nécessaires. Cela signifie expliquer chaque cas.

Le système d'exploitation est Mac OS X.

Mise en garde

C'est un soi-disant jeu de données de reconnaissance de caractères manuscrits, mais il en existe deux similaires.

L'un est un ensemble de données pour la reconnaissance de caractères manuscrits qui est fourni avec l'installation de sklearn (incluse en standard).

Le second a été obtenu par une méthode autre que celle ci-dessus.

Le premier consiste en une image de 8x8 pixels.

Le second consiste en une image de 28x28 pixels.

Les deux ont été capturés en recherchant «reconnaissance de caractères manuscrits» ou «Mnist», et d'une manière ou d'une autre, l'atmosphère de l'image était la même, donc j'étais confus de différentes manières.

Installation standard de sklearn (données de taille 8 x 8)

Emplacement de l'ensemble de données

Le jeu de données standard sklearn peut être trouvé à:

 /(Pièces qui diffèrent selon l'environnement)/lib/python3.7/site-packages/sklearn/datasets

Pour référence, reportez-vous à la structure des répertoires dans mon cas. (J'utilise Anaconda)

$ls  /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/    //Afficher la liste des fichiers et répertoires spécifiés par le chemin

__check_build			dummy.py			model_selection
__init__.py			ensemble			multiclass.py
__pycache__			exceptions.py			multioutput.py
_build_utils			experimental			naive_bayes.py
_config.py			externals			neighbors
_distributor_init.py		feature_extraction		neural_network
_isotonic.cpython-37m-darwin.so	feature_selection		pipeline.py
base.py				gaussian_process		preprocessing
calibration.py			impute				random_projection.py
cluster				inspection			semi_supervised
compose				isotonic.py			setup.py
conftest.py			kernel_approximation.py		svm
covariance			kernel_ridge.py			tests
cross_decomposition		linear_model			tree
datasets			manifold			utils
decomposition			metrics
discriminant_analysis.py	mixture

Et si vous regardez le dossier des ensembles de données,

s /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/datasets

__init__.py					california_housing.py
__pycache__					covtype.py
_base.py					data
_california_housing.py				descr
_covtype.py					images
_kddcup99.py					kddcup99.py
_lfw.py						lfw.py
_olivetti_faces.py				olivetti_faces.py
_openml.py					openml.py
_rcv1.py					rcv1.py
_samples_generator.py				samples_generator.py
_species_distributions.py			setup.py
_svmlight_format_fast.cpython-37m-darwin.so	species_distributions.py
_svmlight_format_io.py				svmlight_format.py
_twenty_newsgroups.py				tests
base.py						twenty_newsgroups.py

Il est devenu.

En plus de la reconnaissance de caractères manuscrits, des ensembles de données sont également disponibles ici.

De plus, allez plus loin dans le dossier.

$ ls /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/datasets/data
boston_house_prices.csv		diabetes_target.csv.gz		linnerud_exercise.csv
breast_cancer.csv		digits.csv.gz			linnerud_physiological.csv
diabetes_data.csv.gz		iris.csv			wine_data.csv

Vous trouverez ici les ensembles de données iris et boston_house_prices qui sont souvent cités dans les articles traitant de sklearn.

Comment importer un ensemble de données

Bien que le code sur la page officielle de sklearn soit le même.

Le travail suivant est effectué en démarrant python à partir du terminal.

>>> from sklearn.datasets import load_digits
>>> import matplotlib.pyplot as plt
>>> digit=load_digits()
>>> digit.data.shape
(1797, 64)      // (8×8=Stocké sous forme de matrice de 64 colonnes)

>>> plt.gray()
>>> digit.images[0]
array([[ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.],
       [ 0.,  0., 13., 15., 10., 15.,  5.,  0.],
       [ 0.,  3., 15.,  2.,  0., 11.,  8.,  0.],
       [ 0.,  4., 12.,  0.,  0.,  8.,  8.,  0.],
       [ 0.,  5.,  8.,  0.,  0.,  9.,  8.,  0.],
       [ 0.,  4., 11.,  0.,  1., 12.,  7.,  0.],
       [ 0.,  2., 14.,  5., 10., 12.,  0.,  0.],
       [ 0.,  0.,  6., 13., 10.,  0.,  0.,  0.]])
>>> plt.matshow(digit.images[0])
>>> plt.show()

Ensuite, l'écran suivant apparaîtra.

スクリーンショット 2020-04-18 9.42.30.png

Télécharger les données originales (données de taille 28 x 28)

Les données originales de Mnist peuvent être trouvées ici [http://yann.lecun.com/exdb/mnist/).

Cependant, ce qui est disponible ici est un fichier binaire qui ne peut pas être utilisé tel quel.

Donc, je dois traiter les données sous une forme que je peux utiliser moi-même, mais comme je le verrai ci-dessous, Mnist est un ensemble de données très célèbre, c'est donc un outil qui est préparé pour pouvoir être utilisé immédiatement dans diverses bibliothèques. il y a.

Bien sûr, il semble y avoir un moyen de restaurer ces données binaires par elles-mêmes, mais je ne pouvais pas les suivre autant, et j'ai pensé que ce serait une bonne idée de passer du temps là-bas, donc je ne parlerai pas de cette méthode.

Télécharger via sklearn (taille 28 x 28)

En regardant les articles sur le net, dans l'ancien article

from sklearn.datasets import fetch_mldata

Il y a un article qui dit, mais maintenant la page à laquelle vous essayez d'accéder n'est pas disponible, donc une erreur se produit.

Alors maintenant, il semble utiliser fetch_openml comme ci-dessous. (Solution d'erreur Scikit-learn (sklearn) fetch_mldata)

Ceci est également démarré à partir du terminal.

>>> import matplotlib.pyplot as plt   //Il a peut-être déjà été importé du haut, mais pour le moment. Faites cela si vous ne l'avez pas encore importé.
>>> from sklearn.datasets import fetch_openml
>>> digits = fetch_openml(name='mnist_784', version=1)
>>> digits.data.shape
(70000, 784)
>>> plt.imshow(digits.data[0].reshape(28,28), cmap=plt.cm.gray_r)
<matplotlib.image.AxesImage object at 0x1a299dd850>
>>>>>> plt.show()

スクリーンショット 2020-04-18 10.37.11.png

tensorflow (taille 28 x 28)

Comment entrer à partir du tutoriel tensorflow.

>>> from tensorflow.examples.tutorials.mnist import input_data

Il semble que je puisse le faire, mais dans mon cas, j'ai eu l'erreur suivante.

En conclusion, il semble que le dossier du tutoriel ne puisse pas être téléchargé lors de l'installation de tensorflow.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tensorflow.examples.tutorials'

J'ai regardé le contenu du répertoire actuel.

 $ls /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/examples/
__init__.py	__pycache__	saved_model

Il est devenu.

Je me suis référé à la page suivante.

Tout d'abord, accédez à la page github Tensorflow et téléchargez et décompressez le fichier zip n'importe où.

スクリーンショット 2020-04-18 13.58.00のコピー.png

Il existe un dossier appelé tensorflow-master, il existe donc un dossier appelé tutorials à l'emplacement de tensorflow-master \ tensorflow \ examples .

Copiez ce dossier appelé turorials dans /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/examples/.

Si possible jusqu'à présent

>>> import matplotlib.pyplot as plt   //Il a peut-être déjà été importé du haut, mais pour le moment. Faites cela si vous ne l'avez pas encore importé.
>>> from tensorflow.examples.tutorials.mnist import input_data
>>> mnist = input_data.read_data_sets("MNIST_data", one_hot=True)
>>> im = mnist.train.images[1]
>>> im = im.reshape(-1, 28)
>>> plt.imshow(im)
<matplotlib.image.AxesImage object at 0x64a4ee450>
>>> plt.show()

Si tel est le cas, l'image doit également être affichée.

keras (taille 28 x 28)

>>> import matplotlib.pyplot as plt   //Il a peut-être déjà été importé du haut, mais pour le moment. Faites cela si vous ne l'avez pas encore importé.
>>> import tensorflow as tf
>>> mnist = tf.keras.datasets.mnist
>>> mnist
>>> mnist_data = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
>>> type(mnist_data[0])
<class 'tuple'>   //Il reviendra avec un taple.
>>> len(mnist_data[0])
2
>>> len(mnist_data[0][0])
60000
>>> len(mnist_data[0][0][1])
28
>>> mnist_data[0][0][1].shape
(28, 28)

>>> plt.imshow(mnist_data[0][0][1],cmap=plt.cm.gray_r)
<matplotlib.image.AxesImage object at 0x642398550>
>>> plt.show()

Je ne publierai plus l'image, mais j'espère qu'elle sera à nouveau affichée.

pytorch (taille 28 x 28)

Tout d'abord, il semble que si vous ne pouvez pas faire cela, vous ne pouvez pas continuer,

>>> from torchvision.datasets import MNIST

J'ai eu l'erreur suivante. Il ne semble pas y avoir de vision de la torche.

Dans mon cas, quand je mets du pytorch en conda, je viens

conda install pytorch

Il semblait que je n'y suis allé.

Il semble faire comme suit pour inclure des accessoires.

conda install pytorch torchvision -c pytorch 

Une confirmation vous sera demandée, alors appuyez sur y.

Après avoir effectué les opérations ci-dessus (si nécessaire), essayez d'exécuter un code similaire à ce qui suit.

>>> import matplotlib.pyplot as plt   //Il a peut-être déjà été importé du haut, mais pour le moment. Faites cela si vous ne l'avez pas encore importé.


>>> import torchvision.transforms as transforms
>>> from torch.utils.data import DataLoader
>>> from torchvision.datasets import MNIST
>>> mnist_data = MNIST('~/tmp/mnist', train=True, download=True, transform=transforms.ToTensor())
>>> data_loader = DataLoader(mnist_data,batch_size=4,shuffle=False)
>>> data_iter = iter(data_loader)
>>> images, labels = data_iter.next()
>>> npimg = images[0].numpy()
>>> npimg = npimg.reshape((28, 28))
>>> plt.imshow(npimg, cmap='gray')
<matplotlib.image.AxesImage object at 0x12c841810>
>>plt.show()

Édition supplémentaire (à partir du premier apprentissage Dee)

["Deep Learning from scratch"] de O'Reilly (https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82% 89% E4% BD% 9C% E3% 82% 8B Apprentissage profond-% E2% 80% 95Python% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82 % A3% E3% 83% BC% E3% 83% 97% E3% 83% A9% E3% 83% BC% E3% 83% 8B% E3% 83% B3% E3% 82% B0% E3% 81% AE % E7% 90% 86% E8% AB% 96% E3% 81% A8% E5% AE% 9F% E8% A3% 85-% E6% 96% 8E% E8% 97% A4-% E5% BA% B7 % E6% AF% 85 / dp / 4873117585) se fait indépendamment dans les fichiers fournis par ce livre.

Plus précisément, dans le dossier téléchargé depuis page github des fichiers utilisés dans "Deep Learning from scratch" Je vais tout lire. (Bien sûr, vous devez préparer python, numpy, etc. à l'avance.

Suivez les étapes ci-dessous.

Tout d'abord, téléchargez ou clonez le dossier à partir de la page Github mentionnée ci-dessus.

Ici, nous allons le télécharger. Puis décompressez-le.

スクリーンショット 2020-04-18 22.56.57のコピー.png

Cela créera un dossier appelé deep-learning-from-scratch-master.

** Puisque chaque chapitre est divisé en dossiers, on a l'impression de passer au dossier de ce chapitre et de le lire. ** **

Le dossier lui-même provient de ch01, mais comme les données Mnist sont utilisées dans le chapitre 3, je vais les entrer dans ch03.

$ pwd
/Volumes/SONY_64GB/deep-learning-from-scratch-master/ch03

Démarrez python ...

>>> import sys,os
>>> sys.path.append(os.pardir)
>>> from dataset.mnist import load_mnist
>>> (x_train,t_train),(x_test,t_test) = load_mnist(flatten=True,normalize=False)
Downloading train-images-idx3-ubyte.gz ... 
Done
Downloading train-labels-idx1-ubyte.gz ... 
Done
Downloading t10k-images-idx3-ubyte.gz ... 
Done
Downloading t10k-labels-idx1-ubyte.gz ... 
Done
Converting train-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting train-labels-idx1-ubyte.gz to NumPy Array ...
Done
Converting t10k-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting t10k-labels-idx1-ubyte.gz to NumPy Array ...
Done
Creating pickle file ...
Done!
>>> print(x_train.shape)
(60000, 784)
>>> print(t_train.shape)
(60000,)
>>> print(x_test.shape)
(10000, 784)
>>> print(t_test.shape)
(10000,)
>>> 


Page référencée

Données d'origine Mnist

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges → Une page avec les données originales de Mnist. Les données binaires peuvent être téléchargées ici.

sklearn

Page numérique de la documentation officielle de Sklearn (→ Cliquez sur l'ensemble de données en haut pour accéder à la page montrant les autres ensembles de données fournis par sklearn.)

Reconnaître les nombres manuscrits avec SVM de Scikit learn (Qiita) Solution d'erreur Scikit-learn (sklearn) fetch_mldata (Qiita)

Comprendre les spécifications des données MNIST

Gérez les données numériques manuscrites! Comment utiliser mnist avec Python [Pour les débutants]

7.5.3. Downloading datasets from the openml.org repository¶

Tensorflow

Utilisation de base de TensorFlow, Keras (construction de modèle / formation / évaluation / prédiction)

ModuleNotFoundError: Aucun module nommé'tensorflow.examples '(Stackoverflow) 5e réponse depuis le haut Page Github Tensorflow

Keras

Utilisation de base de TensorFlow, Keras (construction de modèle / formation / évaluation / prédiction)

Pytorch Essayez MNIST avec PyTorch conda install pytorch torchvision -c pytorch dit PackageNotFoundError: Dépendances manquantes dans les canaux osx-64 actuels: --pytorch-> mkl> = 2018

Autre

OpenML (en particulier la page de liste de données) ["Deep Learning from scratch"](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD % 9C% E3% 82% 8BApprentissage en profondeur-% E2% 80% 95Python% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% A3% E3% 83% BC% E3% 83% 97% E3% 83% A9% E3% 83% BC% E3% 83% 8B% E3% 83% B3% E3% 82% B0% E3% 81% AE% E7% 90% 86% E8% AB% 96% E3% 81% A8% E5% AE% 9F% E8% A3% 85-% E6% 96% 8E% E8% 97% A4-% E5% BA% B7% E6% AF% 85 / dp / 4873117585) Page Github des fichiers utilisés dans "Deep Learning from scratch"

Recommended Posts

Différentes façons d'importer Mnist
Divers traitements de Python
Diverses méthodes de classe et méthodes statiques
À propos de divers encodages de Python 3
J'ai mesuré différentes méthodes de communication inter-processus en multitraitement de python3
Pratiquer des méthodes typiques de statistiques (1)
[Classification des phrases] J'ai essayé différentes méthodes de mise en commun des réseaux de neurones convolutifs
[Python] La pierre d'achoppement de l'importation
Résumé des différentes opérations dans Tensorflow
À propos de l'erreur d'importation de PyQt5.QtWidgets (Anaconda)
Traitement des données 2 Analyse de divers formats de données
Diverses méthodes pour créer numériquement la fonction inverse d'une certaine fonction Introduction