PerlでMNISTを画像ファイルでやりたい
AI::MXNetを最近使って機械学習を勉強中。
0-9の手書き文字の認識するサンプルMNISTはサンプルコードもあるのですが
MNISTデータは28*28次元のバイナリデータでして、応用しようとしても
そのままだと使いづらい、画像データ(pngなど)でやりたいのです。
Githubを調べた結果MNISTのバイナリデータをpngに変換するツールがありました。
github.com
pngファイルになりますので。コントロールファイル形式(パス一覧のようなもの)のファイルをperlのスクリプトで作りました。
use strict; use warnings; open my $train, ">./training.ctl"; open my $test, ">./testing.ctl"; my @png = glob "./*/*/*.png"; for my $png(@png){ $png =~ /(training|testing)\/(\d)\/(\d+)\.png/; my $file; if ($1 eq "training" ){ $file = $train; } else{ $file = $test; } printf $file "%s\t%s\t./%s/%s/%s.png\n", $3 , $2, $1 , $2, $3; } close $train; close $test;
コントロールファイルの内容はこんな感じです。
index label pngファイルのパス
コントロールファイルから今度はmxnetのファイル形式のrecord形式に変えてあげます
im2recというコマンドがmxnetには用意されています。color=0とする所が肝です
グレースケールのrecordファイルになります。
im2rec testing.crl ./ testing.rec encoding=.png color=0
詳細は、以下を参照してください。
github.com
テストが通らない!!
しかし、テストが通らない。仕方ない甘えではありますが、Issueを発行して
聞いてみようということで聞いてみました。
AI::MXNetモジュールの作者さんから回答があっという間にいただけました。
感謝の極みです。データをシャッフルしないとだめとか、色々と添削をいただきました。
これでテストが通りました!!!
やっと、次の段階に進むことができます。