PyTorchは、Pythonで書かれたオープンソースの機械学習ライブラリです。ニューラルネットワークを実装するためのAPIを提供し、ニューラルネットワークを簡単に実装できるように設計されてます。
この記事の目的は2つ
- PyTorchチュートリアルのクイックスタートのサンプルを変える。
- 今回作った学習済みのモデルをStreamlitで作ったWEBアプリに入れ公開してみる。
PyTorchチュートリアルにクイックスタートのサンプルがあります。このサンプルプログラムは画像の分類プログラムです。これを機械学習のプログラムでよく利用される「あやめ」の種類分類に変更するのが1つ目の目的です。プログラムの変更はクイックスタートに対応させていきますのでクイックスタートがより分かりやすくなると思います。
クイックスタートと同じGoogle Colaboratoryを使います。
最終的にはGoogle Colaboratoryで学習して完成したモデルを実用化としてScreamlitで運用してみます。これが2つ目の目的。そうすることでより全体像がつかめるのではないかと思います。
またデータセットも入力4個の数字と答え1個の数字の組なので応用もしやすいかと思います。
完成品 あやめの分類
なのでニュートラルネットワークの解説はありません。ただ私が勉強に使ったYoutubeをご紹介しますので、そちらで学習してください。
Streamlitについてはこちらをご覧ください。
機械学習はscikit-learnを使うと、あまり分からなくても実装できます。
仕組みの理解より実用することが目的ならscikit-learnを勉強したほうがいいです。
ディープラーニングの専門家ではなく初学者なので、勘違いしているところがあるかもしれいので、その辺はご了承ください。
ニューラルネットワークとは
PyTorchのメインになるニューラルネットワークについて私の認識している範囲で簡単に説明すると(あくまで個人的認識で参考程度としてください。)
ニューラルネットワークとは、あるデータセットをニューラルネットワークに入れると分類してくれるもの。ニューラルネットワークは多数のパラメータからできている。出力は、そのパラメータと入力値で決まる。パラメータを決定するために学習用のサンプルデータを入力し対応する答えになるようにパラメータを決定する。その決定する過程がディープラーニング。
内容
ここからはZenn本にしてあるので、こちらをご覧ください。
あやめ分類アプリ
完成品 あやめの分類
本記事で最終的に作ったものです。以下の特徴があります。
- Google Colaboratoryで学習させたモデルmodel.pthをScreamlitに持っていって作りました。なのでScreamlit内では学習していません。
- Iris Dataset:あやめの全データ150個を試せるようにしています。
- 用意されたデータではなく任意の特徴量でも試せるようにしました。4個の数字。任意なので正解はありませんので、既存の150個の中の1個を選んで、その特徴量に近い値±1ぐらいを入力すれば、そのあやめと判定されるはずです。
- テストデータの正解率は28/30です。
実測して試した
アヤメらしき物を見つけたのでノギスで図ってアプリで判別してみました。
測定値は「ガク長さ」,「ガク幅」,「花びら長さ」,「花びら幅」の順で
5.1,4,3.9,1.9
結果は種類予測: "1:versicolor"
しかし見た目からすると0:setosaのような感じです。正解かどうかの確認のしようがありません。幅はいいとしても長さが、どこからなのか分からない。そもそもこれはアヤメなのか?
おすすめYoutube
あやめの分類は入力を特徴量、出力をあやめの種類としたものでした。このしくみが分かれば、難しそうにみえる他のディープラーニングも入力と出力のセットを変えるだけということがわかります。そのことについて着目して説明してくれているYoutubeです。
Deep Learning入門:Deep Learningでできること
さらに具体的な入力値がわかるのがこちら
実践Deep Learning:波形データの入出力
PyTorchはこれがまとまっています。
いまにゅのプログラミング塾さんの【完全版】この動画1本でディープラーニング実装(PyTorch)の基礎を習得!忙しい人のための速習コース
ディープラーニング基礎
説明のアプローチの仕方が違うので
分からなくてもほかの人の説明を色々見ると少しずつ理解が深まります。
予備校のノリで学ぶ「大学の数学・物理」さんの【機械学習】深層学習(ディープラーニング)とは何か
Neural Network Consoleさんの夏休みの自由研究!ディープラーニング画像認識実験
夏休みの自由研究#2:自分で集めた画像で!ディープラーニング画像認識実験(Windows版編)
SonyのNeural Network Consoleというツールを使って
具体的にディープラーニングの作業の流れを見せてくれます。
#2のほうはじゃんけんの画像を自分で用意して
ディープラーニングさせるのでより具体的でわかりやすいです。
シリーズものなので長いけどじっくり学習できる動画2つ。
AIcia Solid ProjectさんのDeep Learning の世界
ちょっと数学的なアプローチが多いので
途中ついていけなくなったら下の Able Programmingさん を見てから
戻ってみると理解しやすくなります。
Able Programmingさんの【深層学習】深層学習とは?|ディープラーニングの意味、ニューラルネットワーク おすすめ!個人的にはこの動画見て理解が深まりました。
今回作ったコードで、これがloss_fn = nn.CrossEntropyLoss()がよくわからなかったけど、こちらを見て損失関数についてピンときました。【深層学習】損失関数/勾配降下法|交差エントロピー誤差、ミニバッチ勾配降下法
まとめ
簡単なデータと学習済みのモデルを使ったアプリを作ることでディープラーニングの全体像が見えてくればと思い書きました。実際のあやめを見かけたてノギスで図って実証実験してみたけど予想はできたものの正解がわからなかった。
目次へ
この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。
コメント