機械学習の流れをPython使って勉強してみました

日常生活の中でしらず知らずのうちに触れているであろう、機械学習が利用されているサービス。
医療から金融、さらにはエンターテイメント業界まで、機械学習はデータを解析し、予測し、
そして私たちの生活がより便利なものに変えるための技術となっていると思います。

これからもまだまだ進化する分野を勉強してみようと思って、
Pythonを使って機械学習の流れを勉強してみました。

Pthonを利用した実績がないので、これからPythonを使った案件でも役立つように少し前から
環境構築から基本的な表示の出力など簡単に触ってみて、
Pythonといえば、機械学習のライブラリが豊富にそろっていて入門にはよいのでは
ってことで、Pythonを使って機械学習の勉強をしているわけです。

画像認識

最終的にはデータを解析して、その結果からあることを予測する機能を作りたいと思っているんですが、
機械学習を進めるには大量のデータが必要になってくるので、まずは手元に大量のデータがある写真(写真が趣味なので)を
使って画像認識をしてみました。

まず画像をアップロードするUIを用意したました。

画像をアップロードして、そのアップロードされた画像に何がうつっているのか?
画像認識モデルが解析をして、その結果を返してくれるという流れです。
画像の認識モデルにはTensorFlowのMobileNetV2を利用しました。

猫が写っている写真をアップロードしてみます。

アップロード完了画面には、アップロードした画像と画像認識モデルが解析したスコアを表示するようにしました。
表示されている単語はモデルに登録されているクラス名が表示されています。そして数字がそのクラスに該当するであろうスコアです。

スコアの値が高いものから3つを表示するようにしてあります。
個人的には「cat」が返ってくるのかと期待していたのですが、画像の大部分が緑やボケていたりするので、このような結果になったのでしょうか?その辺は不明なんですが、個人的に期待した結果を返してもらうように、モデルに学習させます。

app\training\data\architecture
app\training\data\cat
app\training\data\dog
app\training\data\landscape
app\training\data\portrait
app\training\data\snap
app\training\data\street

こんな感じで訓練用にフォルダを分けて、それぞれのフォルダに画像を振り分けます。
catとdogはちゃんと犬と猫を識別できるようにと用意したフォルダで、
その他は、写真をアップロードした際に写真がどんなジャンルなのかなど、自動でタグ付けできる機能ができたらと思って
snapとかstreetとか用意してみました。

この猫の写真はcatのフォルダに入れて、その他大量の写真を自分で振り分けてフォルダに収めます。

学習用のデータが準備できたら、Pythonでモデルの再訓練を実行します。
まずは、TensorFlowにモデル再訓練用のライブラリがあるので、そちらを使ってプログラムを書いていきます。
100行にも満たないソースコードで再訓練用のプログラムが出来上がりました。
ライブラリが豊富にあると、すごく便利。

モデルの再訓練が終わるまで1時間以上かかりました。
PCの処理能力の問題もあると思いますが、結構時間がかかるものなんだなと。

プログラムの実行が完了したら、今度は画像アプロードのプログラムを修正。
先ほど画像認識に利用したモデルのMobileNetV2から
再訓練が終わった学習済みのモデルに切り替えます。
そして、再度同じ猫の画像をアップロードしてみました。

結果がこちら、「cat」が一番スコアが高くなりました。
snapやportraitには似たような雰囲気の画像があるので、そのあたりが結果として返ってきてるのではないかと。
このような感じで、機械学習をすすめるということがわかりました。

これを元にいろいろと機能を作っていってみたいと思います。

Pythonで機械学習を勉強してみたいって方へ、この本読みやすかったのでオススメです。

自分も環境構築からベーシックな部分のソースや作法などChatGPTを利用して実装進めたので、こんな本もオススメです。