TensorFlow : TensorFlow で Fashion-MNIST
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/28/2017
* 本ページは、github 上の Fashion-MNIST の README.md を翻訳した上で、
簡単な MLP モデルの TensorFlow 実装で動作確認したものです :
【Fashion-MNIST Github README-ja】
- 本 Fashion-MNIST の README の翻訳ドキュメントを author の Dr. Han Xiao 氏の要望で README-ja として公式 repository に push する運びとなりました。
- Fashion-MNIST は既存の MNIST 用のモデルがそのまま流用できる便利なデータセットですので、MNIST に食傷気味の皆様、是非ご活用ください! ファイル名もフォーマットも MNIST と完全互換でありながら、学習難易度が少しだけ高めの優れものです。
60,000 サンプルの訓練セットと 10,000 サンプルのテストセットから成る、Zalando の記事の画像のデータセットです。各サンプルは 28×28 グレースケール画像で、10 クラスからのラベルと関連付けられています。Fashion-MNIST は、機械学習アルゴリズムのベンチマークのためのオリジナルの MNIST データセット の 直接的な差し込み式の (= drop-in) 置き換え としてサーブすることを意図しています。
ここにどのようにデータが見えるかのサンプルがあります (各クラスは3行取ります) :
何故でしょう?
オリジナルの MNIST データセットは沢山の手書き数字を含みます。AI/ML/データサイエンス・コミュニティの人々はこのデータセットを好みそして彼らのアルゴリズムを検証するためのベンチマークとしてそれを使用します。実際に、MNIST はしばしば試してみる最初のデータセットです。「もしそれが MNIST で動作しなければ、まったく動作しないだろう」と彼らは言いました。「そうですね~、もし MNIST で動作するとしても、他の上では依然として失敗するかもしれませんが。」
Fashion-MNIST は、機械学習アルゴリズムのベンチマークのためのオリジナルの MNIST データセットの直接的な差し込み式の (= drop-in) 置き換えとしてサーブすることを意図しています、というのはそれは同じ画像サイズでそして訓練及びテスト分割の構造を共有しているからです。
真面目な機械学習研究者へ
真面目な話し、MNIST を置き換えることについて話しをしています。幾つかの良い理由がここにあります :
- MNIST は簡単過ぎます。 私たちの比較ベンチマーク と “Most pairs of MNIST digits can be distinguished pretty well by just one pixel” を確かめてください。
- MNIST は使用され過ぎています。“Ian Goodfellow wants people to move away from mnist.” を確かめてください。
- MNIST はモダンな CV タスクを表現できません。“François Cholle: Ideas on MNIST do not transfer to real CV.” を確かめてください。
データを取得する
データセットをダウンロードするためには直接リンクを使用することができます。データはオリジナルの MNIST データと同じフォーマットでストアされています。
名前 | 内容 | サンプル | サイズ | リンク |
train-images-idx3-ubyte.gz | 訓練セット画像 | 60,000 | 26 MBytes | ダウンロード |
train-labels-idx1-ubyte.gz | 訓練セット・ラベル | 60,000 | 29 KBytes | ダウンロード |
t10k-images-idx3-ubyte.gz | テストセット画像 | 10,000 | 4.2 MBytes | ダウンロード |
t10k-labels-idx1-ubyte.gz | テストセット・ラベル | 10,000 | 5.0 KBytes | ダウンロード |
あるいはこのレポジトリを clone することもできます、データセットは data/fashion の下です。この repo はベンチーマークと可視化のための幾つかのスクリプトを含みます。
git clone git@github.com:zalandoresearch/fashion-mnist.git
ラベル
各訓練とテスト・サンプルは以下のラベル群の一つに割り当てられています :
ラベル | 記述 |
0 | T-shirt/top |
1 | Trouser |
2 | Pullover |
3 | Dress |
4 | Coat |
5 | Sandal |
6 | Shirt |
7 | Sneaker |
8 | Bag |
9 | Ankle boot |
使い方
Python (numpy が必要) でデータをロードする
- この repo の utils/mnist_reader を使用する :
import mnist_reader X_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train') X_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')
TensorFlow でデータをロードする
from tensorflow.examples.tutorials.mnist import input_data data = input_data.read_data_sets('data/fashion') data.train.next_batch(100)
他の言語でデータをロードする
機械学習コミュニティでもっとも人気のあるデータセットの一つですので、人々は多くの言語で MNIST loader を実装してきています。それらは Fashion-MNIST データセットをロードするためにも使用できるでしょう (最初に decompress する必要があるかもしれません)。それらは私たちによってテストはされていないことには注意してください。
ベンチマーク
scikit-learn ベースの自動ベンチマーキング・システムを構築しました、これは異なるパラメータの 125 の (深層学習ではない) 分類器をカバーします。結果はここで見つかります。
結果は benchmark/runner.py を実行することで再現できます。推奨方法はこの docker コンテナをビルドして deploy することです (訳注 : リンク欠落)。
貴方のベンチマークを submit することを歓迎します。新しい issue を作成してください、貴方の結果はここでリストされます。詳細は Contributing セクションを確認してください。ベンチマークを submit する前に、このリストにリストされていなことを必ず確認してください。
分類器 | 前処理 | テスト精度 | Submitter | コード |
2 Conv Layers with max pooling (Keras) | None | 0.876 | Kashif Rasul | zalando_mnist_cnn |
2 Conv Layers with max pooling (Tensorflow) >300 epochs | None | 0.916 | Tensorflow’s doc | convnet |
Simple 2 layer convnet <100K parameter | None | 0.925 | @hardmaru | pytorch_tiny_custom_mnist_adam |
GRU+SVM | None | 0.888 | @AFAgarap | gru_svm_zalando |
GRU+SVM with dropout | None | 0.855 | @AFAgarap | gru_svm_zalando_dropout |
WRN40-4 8.9M params | standard preprocessing (mean/std subtraction/division) and augmentation (random crops/horizontal flips) | 0.967 | @ajbrock | WideResNet & Freezout |
DenseNet-BC 768K params | standard preprocessing (mean/std subtraction/division) and augmentation (random crops/horizontal flips) | 0.954 | @ajbrock | DenseNets & Freezout |
MobileNet | augmentation (horizontal flips) | 0.950 | @苏剑林 | Chinese blog post |
他の探求
Generative adversarial networks (GANs)
可視化
t-SNE on Fashion-MNIST (左) とオリジナルの MNIST (右)
![]() |
![]() |
PCA on Fashion-MNIST (左) とオリジナルの MNIST (右)
![]() |
![]() |
Contributing, Contact, Citing Fashion-MNIST & License
(訳注 : 原文 をご確認ください。)
(訳注 : README の翻訳は以上です。)
(2) TensorFlow で Fashion-MNIST
さて、せっかくですので、TensorFlow 実装で簡単に Fashion-MNIST を試しておきます。取り敢えずのお試しということで、モデルには 512, 512 ノードを持つ2層の簡単な MLP を使いました。但し、Dropout は付けています。
データセットのロードは上記の方法でロードしても良いですし、MNIST データセットと同じ構造をしていますので自前の MNIST loader コードであれば単純にデータセットを置き換えても良いです。
要は、MNIST 用のモデルの実装を少しだけ修正すれば流用できます。
訓練結果
比較のために、最初にこのモデルをオリジナルの MNIST で動作確認しておきます。
わずか 20 epochs ほどで訓練損失は 0.02 を割り、テスト精度は 98 % を超えます :
![]() |
![]() |
次に、Fashion-MNIST データセットで試してみますと、20 epochs だと損失は 0.3 前後で精度は 88 % を超える程度です :
![]() |
![]() |
念のためにもう少し訓練を続けると、50 epochs で損失 0.2 前後、精度は 90 % を超え始めます。そして 100 epochs で損失 0.15 前後、精度 90.5 % 程度でした。下の画像は 100 epochs までの訓練損失の TensorBoard グラフと、テスト精度のグラフです :
![]() |
![]() |
上述のベンチマークと比較してみると、テスト精度 90% は MLP としては悪い数字ではないようです。
以上