機械学習

ニューラルネットワークにKerasを利用してみた

これまでは、ニューラルネットワークを自前で作成していたが、TensorflowやKeras、PyTorchといった、深層学習のフレームワークも利用することができる。

今回は、自前で作成していたニューラルネットワークをKerasで作成してみたので、その手順とサンプルプログラムを共有する。

前提条件

下記記事のAnacondaをインストールしJupyter Notebookを利用できること。

Python開発用のAnacondaをインストールしJupyter Notebookを利用してみた今回は、Pythonを勉強してみたいと思い、Python開発環境を構築してみたので、その手順を共有する。 Python開発用として...

やってみたこと

  1. tensorflowパッケージのインストール
  2. Kerasによるサンプルプログラムの作成と実行

tensorflowパッケージのインストール

AnacondaでKerasを利用するには、Anacondaでtensorflowパッケージを使えるようにする必要がある。その手順は、以下の通り。

1) Windowsのスタートメニューから「Anaconda Prompt」を選択する。
tensorflowパッケージのインストール_1

2) 以下のように、「conda list -f tensorflow」コマンドを実行し、Anacondaにtensorflowパッケージが含まれていないことを確認する。
tensorflowパッケージのインストール_2

3)「pip install tensorflow」コマンドを実行し、tensorflowパッケージをインストールする。
tensorflowパッケージのインストール_3

4)「conda list -f tensorflow」コマンドを再度実行し、Anacondaにtensorflowパッケージがインストールされたことを確認する。
tensorflowパッケージのインストール_4



「DroidKit」はAndroid端末のデータ復元や画面ロック解除等が行える便利なツールだった「DroidKit」は、画面ロック解除、FRPバイパス、データ復元、システム修復、および4つのより効果的なツールを含んでいて、ほぼすべて...

Kerasによるサンプルプログラムの作成と実行

今回実装するニューラルネットワークの全体構成は、以下のようになる。
ニューラルネットワーク

また、重み\(\boldsymbol w\)の最適解は、下図における誤差関数\(E=(x_3 – y)^2\)が最小となる箇所で、これは誤差関数を(桃枠の)各変数について偏微分した結果が\(0\)になる値となる。
ニューラルネットワークの誤差関数

上記を、行列を用いて自前で実装したサンプルプログラムは、以下の記事に記載している。

ニューラルネットワークで行列の積を利用してみた ニューラルネットワークのフォワードプロパゲーションやバックプロパゲーションで、行列の積を利用すると、計算をシンプルにできる。 ...

これと同等の内容を、Kerasで作成したサンプルプログラムの内容は、以下の通り。

なお、確率的勾配(最急)降下法(SGD)のクラスは、以下のサイトを参考にして設定している。

SGDクラスの説明
出所:SGDクラスの説明

また、損失(誤差)関数(loss)、最適化関数(optimizer)については、以下のサイトを参照のこと。

●損失(誤差)関数
https://qiita.com/Hatomugi/items/d00c1a7df07e0e3925a8

●最適化関数
https://qiita.com/tokkuman/items/1944c00415d129ca0ee9

上記サンプルプログラムの最終実行結果は以下の通りで、出力結果\(y\)は、入力値\(x_0=x_1=0\)または\(x_0=x_1=1\)の場合に\(0\)に近く、そうでない場合は\(1\)に近いことが確認できる。
サンプルプログラムの実行結果_10000

また、上記サンプルプログラムを実行した場合の途中の結果は、以下の通り。

<実行開始時点>
サンプルプログラムの実行結果_1

<3,000回程度繰り返した結果>
サンプルプログラムの実行結果_3000

<5,000回程度繰り返した結果>
サンプルプログラムの実行結果_5000

<10,000回程度繰り返した結果>
サンプルプログラムの実行結果_10000

要点まとめ

  • 深層学習のフレームワークには、TensorflowやKeras、PyTorchがある。
  • Kerasを利用すると、ニューラルネットワークのモデル構築や学習を簡単に行うことができる。