番外編3 ニューラルネットワークの応用(Courcera 機械学習より)

さて、今回は番外編ということで”Courcera Machine Learning Week 4”より、非常に難解だったニューラルネットワークを少し応用して遊んでみたいと思います。

今回やりたいことは、

  1. 与えられたデータをトレーニング/テストセットに分けてモデルの精度確認
  2. 予測の結果、学習させたモデルによって間違えて予測した数字の表示
  3. ペイントで書いた数字を入力して予測!

というようなことをOctaveを使って行いたいと思います。

※前提として、Courcera Machine Learning Week 4の課題が終わっていることとします。もし終わっていない方はこっそり参考にしてください。

3.ペイントで書いた数字を入力


ということで、ニューラルネットワークを使って実際に自分の書いた数字の分類を行っていきましょう。

まずは手書き数字データの用意ですが、これにはだいたいのWindows PCに標準的にあるソフト、ペイントを使います。

ただやみくもにペイントで数字を書いて、画像データにしてモデルに突っ込んでも予測の精度は高くありません。予測精度を上げるためには手書き数字画像データに対して以下のちょっとした工夫が必要となります。

・学習に用いたデータサイズ(20ピクセル×20ピクセル)を用いる

・手書き数字をグレースケールに変換する

✔学習に用いたデータサイズ(20ピクセル×20ピクセル)を用いる

ペイントは”ホーム”タブの中にある”イメージ”から”サイズ変更”を選ぶと、ペイントができる白い所のサイズを自由に変更することができます。

サイズ変更の中の単位をピクセルに変え、水平方向、垂直報告をそれぞれ20にすることで画像サイズを20×20ピクセルとすることができます。

この設定を行うと、描ける範囲が狭くなるので少し扱い辛くなるのが難点です…

実際に数字を適当に書いてみましょう。よりモデル学習時のデータと似せるために背景を黒くして白い文字で数字を書きました。

作成した画像を保存しましょう。

✔手書き数字をグレースケールに変換する

次に作成した画像をOctaveで読み取りますが、その際に以下のようなコードで上手く読み込めました。

input_imgにimread関数で読み取り、uint8(mean(input_img,3))にてグレースケール変換しています。

input_img=imread("pic9.png");
grey_input=uint8(mean(input_img,3));

グレースケールに変換した画像データをこれまで作ったモデルで処理できる形にするためにreshapeで1×400の行列とします。
re_input=reshape(grey_input,1,400);
re_input=inputconv(double(re_input));
re_input=inputconv(double(re_input));

✔予測関数に手書き数字データを入力する。

ここまできたら、後はシータ1、2と一緒にPred関数に数値を入力するだけです。

次のようにします。

pred = predict(theta1, theta2, re_input)
displayData(re_input);

二行目は手書き数字データを表示させているだけです。

それでは、試しに私が書いたきったない字を入れてみましょう。

数字の”4”を書いたつもりです。

結果は….”9”!!!

確かに、人間の目からすると4ですが9に近いくないこともない。。。

これならどうだ…!

結果は…”4”!!

やっと当たりがでました!ちょっと楽しいです!

こんな感じで、自分が作ったニューラルネットワークで遊ぶことができます。

字が奇麗な人のサンプルを集めて学習させてやれば、下手な字を入力したときにはじかれてしまい、自分の字も上達するかもしれませんね!

以上です!

とあるデータサイエンティストの競馬予測チャレンジ Optunaで精度UP編

本記事ではモデリング後に試行錯誤を繰り返した結果、LighGBMのパラメータを変更することで簡単に精度アップ!   競馬予測チャレンジ目次!   データ取得編1(過去のレースデータ取得) データ取得編 […]

コメントなし

とあるデータサイエンティストの競馬予測チャレンジ データ収集編1

最近、馬娘で人気沸騰中の競馬ですが、友人の勧めで競馬予測を始めました。   競馬予測チャレンジ目次! データ取得編1(過去のレースデータ取得) ⇦本記事はココ データ取得編2(スピード指数取得) 特徴量エンジニ […]

コメントなし

番外編3 ニューラルネットワークの応用(Courcera 機械学習より)

さて、今回は番外編ということで”Courcera Machine Learning Week 4”より、非常に難解だったニューラルネットワークを少し応用して遊んでみたいと思います。 今回やりたいことは、 与えられたデータ […]

コメントなし

番外編2 ニューラルネットワークの応用(Courcera 機械学習より)

さて、今回は番外編ということで”Courcera Machine Learning Week 4”より、非常に難解だったニューラルネットワークを少し応用して遊んでみたいと思います。

コメントなし

番外編1 ニューラルネットワークの応用(Courcera 機械学習より)

さて、今回は番外編ということで”Courcera Machine Learning Week 4”より、非常に難解だったニューラルネットワークを少し応用して遊んでみたいと思います。

コメントなし

コメント

タイトルとURLをコピーしました