今回は、Dockerで構築したTensorFlowの環境で、機械学習(深層学習)に挑戦しました。
今回も Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第4章を参考にさせていただきながら、取り組んでいます。
TensorFlowの環境構築は、前回の記事をご参照ください。
また、Dockerの詳細を勉強したい方は、かめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」が非常にわかりやすいので、おすすめです。
では、振り返っていきたいと思います。
コードは以下の通りで、「mnist-train.py」というファイルに保存しました。 では、コードを順に振り返っていきます。 以前、SVMの機械学習時にも利用した、MNISTのデータセットをkeras.datasetsから読み込みます。 load_data()メソッドを使って、訓練データと、検証データに分割します。 MNISTのデータは、0~255の輝度データなので、255.0で割ることで、0~1の不動点小数値に変換(正規化)します。 keras.modelsのSequentialメソッドを使って、モデルを構築します。 引数に、積み重ねる層(layers)をリスト型で受け渡すことで、深層学習のモデルが構築できます。 1層目のFlattenは、縦横28x28の2次元データを784個の1次元データに変換します。 2層目のDenseは、入力データに重みをかけて、128個の出力に変換します。出力は「relu」という関数で変換して出力します。 3層目のDoropoutは、学習時に出力をランダムに削ります。これは学習時に訓練データに特化した「過学習」にならないように、する対策になります。 4層目のDenseは、入力データに重みをかけて、10個の出力に変換します。この層は最後の出力となるので、0~9のどの数字だったかを判定するために「softmax」という関数で変換して出力します。0~9のどの手書き文字であったかを確率を表しています。 訓練を実施するにあたり、compileメソッドを使って、各種設定を実施します。 optimizerでモデルを学習する際に重みの更新をする手法(最適化手法)を指定します、今回は「adam」を指定します。 optimizerについては、以下もご参照ください。 損失関数(loss)には、'sparse_categorical_crossentropy'を設定して、'accuracy'(精度)で評価します。 fitメソッドでモデルを訓練します。引数は、1つ目が説明変数、2つ目が目的変数、三つ目にエポック数(訓練データ全体を訓練する回数)を指定します。 評価は、evaluateメソッドで行います。引数は、1つ目、2つ目は、fitと同様に検証データの説明変数と目的変数を渡します。三つ目のverboseは、進捗表示をOnにします。 先ほど作成したファイルを実行してみます。 python3 mnist-train.py 実行した結果、accuracy(精度、正解率)が、0.9782とかなり高い精度で分類するモデルとすることができました。 以前SVMにて分類した際には、accuracy(精度、正解率)が、0.88程度でしたので、結構精度があがったようです。 SVMでの画像分類については、以下をご参照ください。 今回は、TensorFlowで実際に、機械学習(深層学習)を実施してきました。 深層学習って難しそうだなぁと思っていましたが、TensorFlowを使うことで、意外と簡単に構築できたのは、うれしかったです。 (実際の業務やコンペとかで使いこなせるようになるには、まだまだ修行が必要ですが・・・。) 今後も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピングと機械学習開発に取り組んでいきたいと思います。 【過去記事】 2019年8月31日(土)にE資格を受験して、合格しました! E資格対策として勉強の進め方や、参考書などをまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 2019年3月9日(土)にG検定を受験し、見事合格できました! 受験の体験記や勉強法などを別のブログにまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 【E資格対策に使った参考書】 TensorFlowで機械学習に挑戦
1.全体像
2.MNIST データセットを準備する
3.データを正規化する
4.層を積み重ねてモデルを構築する
5.訓練のためにオプティマイザと損失関数を設定する
loss='sparse_categorical_crossentropy', metrics=['accuracy'])
6.モデルを訓練して、評価する
model.evaluate(x_test, y_test, verbose=2)
6.コマンドラインから実行する。