1. Neural NetworkとTensorflowについて(今回記事)
  2. 画像の処理について
  3. CNNの学習(Keras)について
    1. CNNに学習させてモデルを保存する
    2. 保存した学習したモデルを使って予測を行う
  4. Google Colabについて
  5. AutoKerasについて

麻酔モニターの数字であれ、患者の手書きの問診票であれ画像内の数字を自動で認識してくれるプログラムを作る際に役立つかもしれないメモ。

tensorflowの中に手書きの数字のデータセットがあるけどもそれを使わないでやりたい。自分の画像でconvolutional neural network(CNN)を作れるようになりたい。

まずは、イントロダクション。

Neural Networkは難しい

それにしてもneural networkは勉強に時間がかかった。CNNを習得するのに、教科書何冊も読んだし、ネットもたくさんみた。他の機械学習とは毛色が全く異なる。ほかの機械学習は、親切なAPIに成形したデータを入れ込めば自動でやってくれる感が強い。チュートリアルも1つや2つを見ればだいたい実践できる。一方、NNは設定しなければいけないハイパーパラメーターは多いし、仕組みを理解していないとlayerの設計ができない。tensorflowから機械学習に入ろうとしたらすぐに嫌になってしていたことだろう。

Tensorflowの書き方

ネットにはtensorflowの色々な書き方が氾濫していて、理解が浅いころは??だった。Sequentialの形とfunctional APIの形、低レベルAPIの書き方など、数種類ある。自分は、sequentialの形を一番最初に身に着けた。次はfunctional APIを身につけたい。

Tensorflow? Keras?

最初はkerasとtensorflowの関係性がわからなかった。今は(2021年3月)、Kerasがtensorflowに取り込まれている。tensorflowの中にkerasが入っているので、import kerasとなっている古い解説を見た場合には、import tensorflow.kerasとすることで進んでいける。もちろんkeras単独でインストールすればimport kerasの書き方ができるが、重複しているパッケージをインストールしていることになる。と言いつつも、たまにimport tensoflow.kerasでimportできない関数とかあるから、そのときは結局kerasもimportしている。

Neural Networkは楽しい

NNは難しい、しかし、楽しい。自分の設計したCNNがうまく分別できると嬉しい。fitを実行すると少しずつ成長していく感じもとても面白い。まるで自分の設計したオリジナルキャラクターが成長してくかのような気持ち。モンスターファームで色んな音楽CDを入れては変えて強いモンスターを再生していた若いころを思い出す。そんな面白さがある。sequentialで書いているうちは、層状の構造しか設計できないが、functional APIを使えば分岐したり、インプットが2個だったり、pretrained modelを2こ平行で使うこともできる。kaggleでも、誰かがアップした強めのmodelを1つ入れて、もう一つ他の人が作った強めのmodelを平行に並べて途中でつないで1つのモデルを作って精度を上げたりするらしい。自由度が高い。

Neural Networkの種類

Neural Networkは、dense層をつないだベーシックなneural networkと、画像の認識に特化したconvolutional neural network、時系列データを扱うrecurrent neural networkといった種類がある。もちろんほかにもあるだろうが、教科書にはだいたいこの3つが出てくる。正直、最初のベーシックなやつはほかのアルゴリズムのほうがいいのではないかと思う。CNN、RNNとなるとNNの真価が発揮される。

Regressionとclassification

NNは、Regressionとclassificationの両方に対応することができる。しかも、最終層のアクティベーション関数とloss関数を変えるだけ。

最終層のアクティベーションというのは、確率にするのか連続数にするのかというところだけ。

loss関数は、予測と正解ラベルとの評価方法。それだけでなく、back propagationをする際の、勾配方向を計算する元の関数となる。

Problem最終層 activation 関数
Regressionlinear(マイナス数値あり)
relu(マイナスはなくマイナス数値は0にする)
Classification 2クラスsigmoid
Classification 3クラス以上softmax
Problemloss function
Regressionmean_squared_error
mean_absolute_error
Classification 2クラスbinary_crossentropy
Classification 3クラス以上categorical_crossentropy

Autokeras

すごい技術。AutoML。層の設計を自動的に複数してくれて、1つづつ実行してみて一番いいものを保存してくれる。自分でちまちま層の設計を少しずつ変えて精度上げていったけど、結局はautokerasにボロ負け。最初からautokerasを使えばよかったかもしれない。でも、autokerasを使ってしまうと自分で設計できないのでNNの面白さがなくなってしまう感じがある。それは例えば、自分がやらなくても勝手にゲームをクリアしてくれるプログラムのようである。

所感だけで終わってしまいました。次の記事からコードをメモっておきます。

Categories:

category