【Keras】Fashion-MNISTにチャレンジしてみた

 

皆さんは、Fashion-MNISTを知っているでしょうか。

MNISTデータセットといえば、0から9の手書き数値の画像データセットだ。

昔このデータセットを使ってディープラーニングをやってみたことがあった。詳しくは以下の記事を参照。

【Keras】MNISTのアラビア数字を識別する

 

この手書き数字を服や靴にしたのがFashion-MNISTだ。

 

最近になってこのデータを提供しているgithubを発見した。

https://github.com/zalandoresearch/fashion-mnist

 

この提供している人によると、

「MNISTは簡単すぎて高精度がでまくっているので、もう少し難しいデータセットを用意したよ〜」ということらしい。

面白そうなので、このデータセットでディープラーニングを試してみることにした。

 

スポンサーリンク

データセットの中身

 

まずはじめに上記のレポジトリをクローンして準備完了。容量が大きいので10分ほど時間かかりました。

まず、このデータセットを読み込むところから始める。

GithubのReadmeのUsageをみると、データセットの読み込み方が書いてあるので、その通りにコードを書いてみる。

データセットの画像とラベルもついでに表示させてみよう。

utils/mnist_reader.py が置いてあるディレクトリと同じ場所に新しくjupyternotebookのファイル(.ipynb)を作成しコードを書いていきます。

 

最初の数値はラベルだ。ラベルと服の対応表がこれまたreadmeに書いてあるので見てみると、

Label Description
0 T-shirt/top
1 Trouser
2 Pullover
3 Dress
4 Coat
5 Sandal
6 Shirt
7 Sneaker
8 Bag
9 Ankle boot

 

Ankle boot(アンクルブーツ), T-shirt(ティーシャツ), T-shirt, Dress(ドレス) … の順に並んでいる。

ちなみに、アンクルブーツというのはくるぶし丈のブーツのことらしい。

 

画像はintで読み込んでいたのでfloatに変換、ラベルはベクトルに変換する。

MNISTだと(28,28)の2次元配列として画像を読み込んでいたが、MNIST_fashionのmnist_reader.pyではすでに1次元のベクトルとして画像データを読み込んでくれているため次元数の変換は必要ない。

配列の形を出力してみる

これで学習に使用する6万枚の訓練用画像と1万枚のテスト用画像が用意できた。

機械学習をしてみる

 

機械学習用のネットワークを組んでみる。

784次元のデータを入力し、最終的には10個のカテゴリに分類する。

csv_loggerは学習結果のログを残してくれるものだが必要ないかもしれない。

訓練用データのうち、0.1、つまり10%を検証用データとして使用する。

最初の方だけ画像を貼っておきます。実際にはEarlyStoppingを使っているので、17エポック目で終了しました。

テスト用画像を用いてテストしましょう。

 

そこそこの精度ですが、もう少しあげたいですね。MNISTだと90%後半の精度が出ていたので、このファッションデータセットはより難しいことになります。

学習結果を可視化するとこんな感じ。

 

おわり。

 

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog