学習まとめ参考こんにちは。今回から、写真を分類する機械学習モデルを作成する手順を3回にわたってご紹介します。この記事では、桜とコスモスを分類する畳み込みニューラルネットワーク(CNN)をゼロから作成します。Serviceを紹介しました。Serviceは、訓練データを自分で用意することで、画像の分類器を自動的に作成してくれるサービスです。Serviceに桜の写真とコスモスの写真を10枚ずつ訓練データとして与え、精度100%の分類器を作成しました。この記事では、KerasやTensorFlowといったディープラーニング用ライブラリを使って、桜とコスモスの写真を分類する機械学習モデルを、ゼロから作成します。既成のサービスでよい精度が発揮できている場合でも、原理・原則をふまえて自力で対処できるようになることで、既成のサービスでは対応できない問題も解決できるようになることが狙えます。TensorFlowは最も有名なディープラーニング用フレームワークの一つであり、KerasはTensorFlow上の高レベルAPIとして使用できます。Kerasを使うことで、簡単に実験が進められます。EC2を使うことにします。EC2から、今回使うためのインスタンスを立ち上げます。6.0」を選択し、インスタンスタイプは「p2.xlarge」を選択します。P2インスタンスはディープラーニングなどGPUコンピューティング向けに設計されており、今回作成する機械学習モデルの学習を高速に行うことができます。AMIにはKerasやTensorFlowなどのソフトウェアがあらかじめインストールされています。次に、立ち上げたインスタンスにSSH接続し、以下の手順でセットアップをおこないます。以前の記事で使ったものと同じ桜とコスモスの写真を使います。これを仮想マシンにダウンロードしておきます。「/home/ubuntu/sakura/」と「/home/ubuntu/cosmos/」以下にそれぞれ15枚ずつ配置します。コスモス15)環境の有効化KerasとTensorFlowをつかうため、環境を有効化します。tensorflow_p36また、画像処理ライブラリPillowと機械学習ライブラリscikit-learnをインストールします。PillowはKerasから画像を読み込むために、scikit-learnは訓練データとバリデーションデータの分割のために使います。準備が整ったので、いよいよ機械学習モデルの作成に入ります。IPythonを起動します。ipython3再現性確保のため、Kerasのドキュメントを参考にして乱数のシードを固定します。config=session_conf)K.set_session(sess)次に、データを読み込み、訓練データとバリデーションデータを準備します。3)最後に、小さな畳み込みニューラルネットワークを構築し、訓練データを使って学習させます。このネットワークはKerasのMNIST用の例を参考にしています。y_test))すると、以下のように学習が進みます。数分程度で学習は完了します。0.7000(今回作成した畳み込みニューラルネットワークのネットワーク構造)学習した結果、最終的に訓練データに対する精度が100%、バリデーションデータに対する精度が70%になっています。それぞれの精度の推移を可視化するとわかるように、過学習の兆候が見られます。20枚と、非常に少ないために起こっていることです。(訓練データとバリデーションデータに対する精度の推移)エポック数を5倍の500に増やすと、過学習の傾向がより顕著に観察できます。100エポック目では70%程度あったバリデーションデータに対する精度が、500エポックが経過するころには60%前後に下がっています。訓練データに対する損失関数の値は下がり続けていますが、バリデーションデータに対する損失関数の値が100エポックくらいを境に逆に上がり始めています。(学習を続けると過学習が顕著になる)まとめこの記事では、桜とコスモスを分類する畳み込みニューラルネットワークを作成しました。訓練データに対する精度は100%を達成しましたが、訓練データが非常に少ないために過学習を起こし、バリデーションデータに対する精度は70%ほどにとどまりました。次回の記事では、ファインチューニングという技法を使って機械学習モデルを作成します。ファインチューニングによって、学習が高速化し、過学習が抑えられることを観察します。Azure#Python#TensorFlow#ニューラルネットワーク#機械学習#画像認識tmtkデータ分析と機械学習とソフトウェア開発をしています。アルゴリズムとデータ構造が好きです。