Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

背景

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

前提条件

  • 身長、体重、肩幅、性別のデータセットが大量にあつまった
  • これをもとに、身長、体重、肩幅から性別を判定したい
  • この判定のため、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']」

これでモデル完成です。

モデルの良しあしは、

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

で決まるのです!

kakiuchis
京都の大学と大学院で光合成の基礎研究→中国のパン屋で見習いパン職人→インドネシアの工場で小さな備品調達→IT人材サービス会社で苦手な営業担当→RubyとAIのプログラミングスクールでちょっとだけ教材作成お手伝い。
https://www.techpit.jp/p/python_-cloudfunding
itpm-gk
頑張るエンジニアを応援する会社です。まだまだ発展途上です!
https://www.itpm-gk.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした