IT

【Dense】hyperasを使ってパラメータチューニングする-part1

こんにちは。Toruです。

 

今回はディープラーニングで必要不可欠とされるパラメーターチューニングを勝手にやってくれるhyperasというライブラリについて紹介します。このライブラリはインストールしてしまえば後は簡単に利用することができるので、是非使ってみてください。

 

それではやっていきます!

 



hyperasをインストール

まずはhyperasをインストールしましょう。私の開発環境は以下の通りです。

  • MacBook Pro (2017) – MacOS  Catalina 10.15.3
  • Visual Studio Code – 1.42.1
  • python – 3.7.0
  • keras – 2.3.1

 

今回もVSCodeを使ってやりますのでVSCodeのターミナルからhyperasをインストールしましょう。過去にVSCodeでライブラリインストールの仕方について記事を書きましたのでこちらも参考にしてください。

 

■第一回

【初心者】10分でVSCodeセットアップ〜前編〜こんにちは。Toruです。 今回はプログラム開発用フレームワークVisual Studio Codeの簡単なセットアップの仕方について...

■第二回

【初心者でも解る】VSCodeでライブラリ簡単インストール〜後編〜今回はVSCodeを使ってpythonの色々なライブラリを簡単にインストールしてく方法についてご紹介してきます。セットアップについては前回記事にしましたのでまだ見ていない方はそちらもご覧になってください。...

 

 

インストールが終わったら早速使っていきましょう。

 

hyperas実装する前に

今回はminstデータの分類の正解率を、hyperasを使用する前と後で比較したいので、まずは以下のどこにでもあるプログラムを実行します。ここでのパラメータはなんでも構いません。

 

グラフにするとこんな感じ。

まぁこんなもんですね。色んな人がMNISTデータの正解率を上げることに努めてくれているので簡単にこのくらいの正解率が出てしまいます。(本当にありがとうございます。)

 

いよいよhyperasを実装!

さて、前置きが長くなりましたが、早速hyperasを使って上のプログラムのパラメーターチューニングを行なっていきます。ここで注意なのですが、hyperasを使ったプログラムは上のプログラムと少し構成などが違うので、注意して下さい。

もう気づいたかと思いますが、model()の中に {{choice([64, 128, 256, 512])}} があると思います。ここで言っているのは「ニューロン数を64, 128, 256, 512のどれにすればいい?」ということです。この中から最適なものを自動で選んで結果を出力してくれます。

 

他にも最適な活性化関数を知りたい場合は、 {{choice(['tanh', 'relu', 'elu'])}}

SGDの学習率で最適な値が知りたい場合は、 SGD(lr = {{uniform(0, 1)}})

 

例えば学習率を0〜1の間に設定したい場合はuniform()を使ってあげればOKです。それでは実行しどんな値が返ってくるか見てみましょう。

私は5分くらい時間がかかってしまいましたが、このような結果が帰ってきました。最初のDenseは3つ目、つまり512(0, 1, 2, 3と並んでいます。)次のDenseは2つ目、つまり256が最適じゃないですか?と言ってます。

 

しかし、正解率は97.92%と先ほどと比べて0.1%しか上がっていない…。結局、Denseの中のパラメータだけ変えても結果はそんなに変わらないということです。



まとめ

今回はhyperasをインストールし、実際に動かしてみました。さらに、hyperasでDenseの中のパラメータ数を最適な値が返ってくるようにしました。しかし、結果は0.1%上がっただけで驚愕するほど上がるということはありませんでした。これはシリーズ化して正解率99%以上を目指してやってみたいと思います。

 

次回はDropoutをhyperasを使ってハイパラメータチューニングをしていきます。よければ次回も読んでみてください!

 

さらにhyperasに興味がある方はこちらもご覧ください。

https://qiita.com/wataoka/items/f46224ccccc5321543bd

 

おすすめ記事

【python】natsortをインストール・使い方今回はpythonのライブラリであるnatsortの使い方について説明します。普段はsort()を使うかと思いますがこれを使うと1, 10, 11, ...のように不自然な数字の並びになってしまいます(文字列の場合)。それを解決することができます。PHPにもあるようですが、本記事ではpythonの方を紹介します。...






ABOUT ME
Toru
24歳。会社資料の文章力を鍛えるためにブログ開設。機械学習・ディープラーニング勉強中。プログラミング、デバイス、PC、ガジェット類について紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です