35
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kerasでニューラルネットワークの作成の簡単イメージ

Last updated at Posted at 2018-01-02

背景

分かりにくい、ほんとわかりにくい。
私でもスッとわかるような説明がない。
なので作ってみた。

前提条件

  • 身長、体重、肩幅、性別のデータセットが大量にあつまった
  • これをもとに、身長、体重、肩幅から性別を判定したい
  • この判定のため、Kerasを用いてモデルを作成する

完成形

https://gyazo.com/7610e6941cf936d9db7d9ff20c814679

第1段階(事前準備。そしてモデルを作るぞ!と宣言。)

コードで書くと以下の通り。

# 事前準備
from keras.models import Sequential
from keras.layers import Dense, Activation

# モデルを作るぞ!と宣言
model = Sequential()

第2段階(1層目のレイヤー作成)

  • 1層目のレイヤーの丸いやつは3個にしよう。
  • 入力データは身長、体重、肩幅だから3つだ。
  • 活性化関数はシグモイド関数にしよう。

活性化関数次の丸いやつにとって便利な形に変換する関数のこと

コードで書くと以下の通り。

model.add(Dense(3, input_dim = 3, activation='sigmoid'))
# Denseの第1引数が「丸いやつは3個」の「3」
# Denseの第2引数が「入力データは身長、体重、肩幅」の「input_dim = 3」
# Denseの第3引数が「活性化関数はシグモイド関数」の「activation='sigmoid'」

https://gyazo.com/00c1986e03a779740a457f3e0661df23

第3段階(2層目のレイヤー作成)

  • 2層目のレイヤーの丸いやつは2個にしよう。
  • 入力データはもう関係ない。丸いやつ同士が勝手にやってくれる。
  • 活性化関数はシグモイド関数にしよう。

コードで書くと以下の通り。

model.add(Dense(2, activation='sigmoid'))
# Denseの第1引数が「2層目のレイヤーの丸いやつは2個にしよう。」の「2」
# Denseの第2引数が「活性化関数はシグモイド関数にしよう。」の「activation='sigmoid'」

https://gyazo.com/0ec19321a75f2e2dd61ffa1cf421e61c

第4段階(3層目のレイヤー作成)

  • 3層目のレイヤーの丸いやつは3個にしよう。
  • 入力データはもう関係ない。丸いやつ同士が勝手にやってくれる。
  • 活性化関数はシグモイド関数にしよう。

コードで書くと以下の通り。

model.add(Dense(3, activation='sigmoid'))
# Denseの第1引数が「このレイヤーの丸いやつは3個にしよう。」の「3」
# Denseの第2引数が「活性化関数はシグモイド関数にしよう。」の「activation='sigmoid'」

https://gyazo.com/09debb0d65779ab4302fe1bf297b3a40

第5段階(男女に結び付ける)

  • 入力データはもう関係ない。丸いやつ同士が勝手にやってくれる。
  • 活性化関数はソフトマックス関数にしよう。

コードで書くと以下の通り。

model.add(Dense(2, activation='softmax'))
# Denseの第1引数が「男女」2種類の「2」
# Denseの第2引数が「活性化関数はソフトマックス関数」の「activation='softmax'」

https://gyazo.com/7610e6941cf936d9db7d9ff20c814679

第6段階(学習方法を決めよう!)

  • 学習スタイルは'rmsprop'にしよう
  • 男と女の分類問題なので損失関数は'binary_crossentropy'にしよう
  • 学習結果が正解かどうかの評価方法は'accuracy'にしよう

学習スタイルは、目的関数の最小値をいかにして探すかという手法のこと
損失関数は、入力データからモデルを通じて出力した結果と、データセットの実際の答え差分を計算式で表現したもの

コードで書くと以下の通り。

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
# compileの第1引数が「学習スタイルは'rmsprop'」の「optimizer='rmsprop'」
# compileの第2引数が「目的関数は'binary_crossentropy'」の「loss='binary_crossentropy'」
# compileの第3引数が「評価方法は'accuracy'」の「metrics=['accuracy']」

これでモデル完成です。

モデルの良しあしは、

  • レイヤーを何層にするか
  • 各レイヤーの丸いやつ(ユニットと呼ぶ)を何個にするか
  • 活性化関数を何にするか(いろいろあります。)
  • 学習スタイルを何にするか(これもいろいろあります。)
  • 損失関数を何にするか(これもいろいろあります。)
  • 評価方法を何にするか(これもいろいろあります。)
  • その他、いろいろあるらしいが、私は分からない

で決まるのです!

35
38
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?