今回は、Fashion Mnistという新しいデータセットを追加して、サンプルプロジェクトでクラス分類をしてみます
こんにちは cedro です。
今回は、SONY Neural Network Console に新しいデータセットを追加してみます。追加するのは、今年の1/8のブログで一度ご紹介した、Fashion Mnist です。

Fashion Mnist は、モノクロ28×28、10クラスのファッション画像が、学習データ60,000枚、評価データ10,000枚あるものです。特徴は、
1)Mnist とデータ構造で完全互換性がある。
2)Mnist と比べて適度に難しい。
3)あまりにも出回り過ぎたMnistと比べて新鮮味がある。
女房とデータセットは新しい方が良いとよく言います(笑)。新しいFashion Mnist を追加すると、刺激があって良いのではないでしょうか。
Fashion Mnist をデータセットに追加する
今回、Fashion Mnist のデータセット追加するには、Neural Network Libraries のインストールが必要ですので、まだの方は、ここを参考にインストールして下さい。
Fashion Mnist は、Mnist と同じく、Webからダウンロードして来たファイルを解凍するだけでは画像になりません。記録されているデータをプログラムで処理して画像を取り出す必要があります。
そのため、MNISTフォルダーの中にある、create_mnist_csv.py というプログラムを流用します。
以下に、その手順を書きます。
1)現行のMNISTデータセットの移動
一端、neural_network_console_110\samples\sample_dataset にある MNIST データセットをフォルダーごと、何処かに移動しておきます。
2)新規にMNISTフォルダーを作成
neural_network_console_110\samples\sample_dataset に、新たに MNISTフォルダーを作り、その中に、MNIST データセットのフォルダーの中にある、create_mnist_csv.py だけコピーして来て入れます。
3)create_mnist_csv.py の修正
エディターを使って、create_mnist_csv.py の一部を修正します。
1 2 3 4 5 6 7 8 9 10 11 |
def __init__(self, train=True, shuffle=False, rng=None): super(MnistDataSource, self).__init__(shuffle=shuffle) self._train = train if self._train: image_uri = 'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz' label_uri = 'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz' else: image_uri = 'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz' label_uri = 'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz' |
これは、ダウンロード先の URL 指定をしている部分です。
1 2 3 4 5 6 7 8 9 10 11 12 |
def __init__(self, train=True, shuffle=False, rng=None): super(MnistDataSource, self).__init__(shuffle=shuffle) self._train = train if self._train: image_uri = 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz' label_uri = 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz' else: image_uri = 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz' label_uri = 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz' |
ダウンロード先の URL を Mnist から Fashion Mnist に変更して、保存します。

そうすると、こんな形になります。
4)create_mnist_csv.py の実行

Anaconda Navigator を起動し、nnabla の仮想環境で、Open Terminal を開きます。

> cd C:\neural_network_console_110\samples\sample_datset\MNIST でプログラムの入ったフォルダーに移動します。
>Python create_mnist_csv.py で実行します。
Dataset Creation Completed と表示されれば、データセットの作成が完了です。

MNISTフォルダーの中を見てみます。見かけは、Mnistと全く同じですが、中身は Fashion Mnist のデータセットになっています。
5)リネームとNeural Network Cosole への登録

フォルダー名を MNIST から FASHION MNIST に変更し、CSVファイル名の先頭に、fashion_を追加します。
そして、先程移動しておいた、MNIST フォルダーを元に戻します。

後は、Neural Network Console を起動して、DATASET画面のOpen Dataset で Fashion Mnist のデータセットを順次登録して行けば完了です。
Fashion Mnist を使ってクラス分類をやってみる
サンプルプロジェクトは Lenet.sdcproj を選び、まずはベンチマークとしてMnist を使ってやってみます。
データセットは、mnist_train.csv(学習ファイル) とmnist_test.csv(評価ファイル) を使って、バッチ64、エポック10で実行します。

コスト、学習ロス、評価ロスのグラフです。

Confusion Matrix です。精度99.05%です、さすが LeNet!
と言いたいところですが、LeNet は1989年に論文で発表された古典的なネットワークなのに、それで精度が99%超えをしてしまうと、その後の革新は残り1%未満の極狭い世界でしか表せません。
Fashion Mnist のMnist 簡単すぎない?という主張は、なるほどと思ったりもします。
さて、次にFashion Mnist をやってみます。データセットは先程作った、fashion_mnist_train.csv(学習ファイル)と fashion_mnist_test.csv(評価ファイル)を使って、同じくバッチ64、エポック10でやってみます。

コスト、学習ロス、評価ロスのグラフです。コスト、学習ロスはさっきよりは下がりませんね。

Confusion Matrix です。精度は89.9%ということで、適度に難しいという感じです。
Confusion Matrix の画面で右クリックし、 Save CSV as…でファイルに書き出し、全体を見てみましょう。

Calc で開いて、ポイントだけ色付けするとこんな感じ。「黄色」は特に精度が低かったもので、「朱色」は何に間違えたかのトップ3です。
一番精度が悪かったのは、ダントツで label=6(シャツ) です。何と間違えているかと言うと、1番目が label=0(Tシャツ)、2番目が label=4(コート)、3番目が label=2(セーター)です。
実際に画像を実際に見てみると、なるほど、確かにこの4つはかなり似通っていますね。
特に、セーターとコートなんか、人間が識別しようと思っても結構むずかしそうです(笑)。
Fashion Mnist いかがでしたか。
新鮮味もありますし、精度計測のベンチマークとしても、結構使えるのではないでしょうか。
では、また。
PS 4と9のデータセットは使えません
今回作成した Fashion Mnist のデータセットの中には、Mnist 同様、fashion_small_mnist_4or9_training.csv とか、fashion_small_mnist_4or9_test.csv という、4と9を識別するデータセットがありますが、これは使えません。
なぜなら、Fashion Mnist では、4に該当するのが「コート」で、9に該当するのが「ブーツ」なんです。

さすがに、この識別は簡単過ぎますよね。皆が一番最初にやってみる、例の01_logistic_regression.sdcproj でクラス分類してみたら、なんと精度100%でした。
Fashion Mnist の場合の2値分類は、先程出て来た、label=0(Tシャツ)、label=2(セーター)、label=4(コート)、label=6(シャツ)あたりから選ぶのが良いのではないかと思います。
ディープラーニングの知識はなかったのですが、興味がありこのブログにたどり着きました。
このブログを見ているとどういうことができるかわかってきました。
過去のデータを見て未来を予測する。
簡単にディープランニングが使えるようになりそうでワクワクしています
これからこのブログを楽しみにしています
たかひろさんへ
コメントありがとうございます。
そう言って頂けると嬉しいです。
これからもワクワクする様なブログが書けるように頑張りたいと思います。
また、Neural Network Console は、ディープラーニングが初めての方でも、簡単に動かしてみることが出来ますので、お勧めです。
こんにちは、
チュートリアルありがとうございます。
今、ちょうどファションMNISTをインストールしているところなんですけどエラーがでて来ました。
エラー:
File “create_mnist_csv.py”, line 6, in
from scipy.misc import imsave
ModuleNotFoundError: No module named
scipy
です。
書いたいる通りに”create_mnist_csv.py” ファイルのリンクの部分だけ変更しました。又は、元のファイルを全部別のフォルダに入れました。
こちらのエラーをどうやって直したらいいですか?私はコーディング書くのは下手です。助けてください。
よろしくお願いします。
Moxy さんへ
コメントありがとうございます。
エラーを見ますと、scipy module が無いとありますので、
pip install scipy と入力し、 scipy module をインストールすれば良いと思います。