<jupyter_start><jupyter_text>PyTorch 初心者ハンズオン MNISTデータセットへのアクセスここでは、MNISTと呼ばれる、よく知られる手書き文字データ・セットによって、NNの流れを体感していただきましょう。  ページ内目次MNISTデータセットを読み込むMNISTデータセットの確認（1/5）MNISTデータセットの確認（2/5）MNISTデータセットの確認（3/5）MNISTデータセットの確認（4/5）MNISTデータセットの確認（5/5） MNIST（正式名称 THE MNIST DATABASE of handwritten digits) は、以下のURLで公開されている手書き持ちのデータ・セットです。http://yann.lecun.com/exdb/mnist/    このデータセットには、下記のものが含まれます。学習用の手書き文字 60,000 サンプル評価用の手書き文字 10,000 サンプル各手書き文字サンプルは、 タテ28ドット、ヨコ28ドット、合計784ドットで構成されています。また各手書き文字画像がどの文字であるかを示す「ラベル」が付けられています。ラベルは、学習時の教師信号として利用できるほか、評価時には得られた結果が目的値であるかを確認するために利用できます。まずは、MNISTデータセットをロードして、内容を確認してみましょう。  MNISTデータセットを読み込む 使用するモジュールをインポート<jupyter_code>import torch
import torchvision as tv<jupyter_output><empty_output><jupyter_text>MNISTに対して行うpreprocessを定義しておきます。<jupyter_code>preprocess = tv.transforms.Compose([tv.transforms.ToTensor()])<jupyter_output><empty_output><jupyter_text>MNISTデータセット（訓練用、評価用）をそれぞれダウンロード。  パスは`/content/data`にしておきます。<jupyter_code>trainset = tv.datasets.MNIST(root='./data', 
                                           train=True,
                                           download=True,
                                           transform=preprocess)
testset = tv.datasets.MNIST(root='./data', 
                                         train=False, 
                                         download=True, 
                                         transform=preprocess)<jupyter_output><empty_output><jupyter_text>※ MNISTデータがローカルにキャッシュされていない場合はダウンロードに時間がかかります  MNISTデータセットの確認（1/5） trainsetオブジェクトの型を確認する。<jupyter_code>type(trainset)<jupyter_output><empty_output><jupyter_text>MNISTオブジェクトは特殊メソッド`__len__`を持っているので、組み込み関数`len`で要素数を取得できます。<jupyter_code>len(trainset)<jupyter_output><empty_output><jupyter_text>演習　: testset インスタンスの要素数を確認テスト用データセット testset の長さが 10,000 であることを確認してください  MNISTデータセットの確認（2/5）<jupyter_code>trainset[123]
testset[456]<jupyter_output><empty_output><jupyter_text>MNISTデータセットの確認（3/5） torchvision.datasets.MNIST による得られる各サンプルデータは、以下の構造になっています。(画像データ, ラベル)- 画像データ: （28x28 合計784ピクセルの明るさを 0.0 ~ 1.0 にスケールしたもの)- ラベル: その画像データがどの数字かを、 0~9 の整数値として持つ 訓練用サンプル [54] の目標値（クラスラベル）を確認<jupyter_code>trainset[54][1]<jupyter_output><empty_output><jupyter_text>訓練用サンプル [54] の画像データ (784次元) を確認<jupyter_code>trainset[54][0]<jupyter_output><empty_output><jupyter_text>MNISTデータセットの確認（4/5） 作業なし  MNISTデータセットの確認（5/5） trainsetに含まれている画像データの型と形を見てみましょう。<jupyter_code>type(trainset[54][0])
trainset[54][0].shape<jupyter_output><empty_output><jupyter_text>torch型はCPUデバイスに乗っている場合はNumpyとほぼ互換するので構いません。  ただし、３次元データでは画像として出力することができないので、成形しましょう。0次元目にはCHデータが入っていますが、そのデータが邪魔なので単純に28x28次元に変換します。<jupyter_code>data = trainset[54][0].reshape(28,28)<jupyter_output><empty_output><jupyter_text>出力処理自体は`matplotlib`を使います。<jupyter_code>import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(data)<jupyter_output><empty_output><jupyter_text>さらに一手間かけてモノクロ表示化<jupyter_code>plt.imshow(data, cmap='gray', vmin=0, vmax=1)<jupyter_output><empty_output><jupyter_text>クラスラベル目標値の表示<jupyter_code>trainset[0][1]<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10727212898979928, 'fraction_numerical': 0.031918394208621255, 'mean_word_length': 6.6767676767676765, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 14, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '589696', 'license': 'MIT', 'n_tokens_mistral': 1882, 'n_tokens_neox': 1753, 'n_words': 82, 'path': '20_MNIST_Dataset.ipynb', 'repo_name': 'Riliumph/PyTorchBeginner', 'size': '3039'}