2018年8月9日木曜日

ディープラーニングを体感しよう:第6章(プログラムコードを見ていこう2)



こんにちは。よっしーです。

これまでの記事:
ディープラーニングを体感しよう:第1章(まずは環境構築)
ディープラーニングを体感しよう:第2章(Python環境を構築する)
ディープラーニングを体感しよう:第3章(プログラムを動かしてみよう)
前回は、プログラムコードの内容を見ていきました。

・ライブラリのインポート処理
・手書き数字のデータセット取得
・学習用データ、テスト用データの整形

について解説しましたので、

今回も、前回に引き続き、プログラムコードを見ていきたいと思います。


model = Sequential()
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid"))
model.add(Dense(128))
model.add(Activation("sigmoid"))
model.add(Dropout(rate=0.5))
model.add(Dense(10))
model.add(Activation("softmax"))


ここの処理で、ニューラルネットワークを作成しています。
正直、このコードだけ見ても、なかなかイメージが沸きません。

1行目の Sequential() は、
Sequentialモデルというニューラルネットワークの層を積み重ねたモデルを使用することを表しています。

その後の add() で、ニューラルネットワーク層を構築しています。
ここでは3層の作られており、

784(入力層) → 256(隠れ層) → 128(隠れ層) → 10(出力層)

という形でが形成されます。(※入力層はカウントされないため3層となります。)
で、この数値はノードを表しています。

文字だけで書くと「チンプンカンプン」なので絵にしてみましょう。


イメージとしてはこのような構成となります。
実際に入力と出力を紐付けると、以下のような形となります。



層を進むにつれて、ノード間で情報を渡し、出力内容を導き出すといった形となります。
ここでは、「シグモイド」と「ソフトマックス」いう活性化関数を利用して、パターン検出しています。

これらの活性化関数については、数学の難しい公式を利用して結果を得ています。
正直、数学好きでないと内容についていけないレベルです。

なので、私は深追いせず、そういった名前のロジックを使っているんだな。
という程度で理解しています。


今日はこのあたりで。ではまた~。

0 件のコメント:

コメントを投稿