全結合層とは?DeepLearningの基本的なモデルを解説

スポンサーリンク
ディープラーニング
この記事を読んで分かること
  • 全結合層(Affine)とは何か
  • 全結合層の実装例(python)
  • 全結合層で構成されたモデルでの文字認識の結果

 

全結合層(Affine)とは?

全結合層とは、

全ての変数を使って計算する層
です。

全結合層のモデル

図は4つの全結合層で構成されているモデルとなります。

各ノードの入力を見ると、前の層の全ての変数がつながっていることが分かりますね。

入力層と隠れ層の結合部分を数式で表すと

$$ h_j^{(1)} =  w_1 x_1 + w_2 x_2 + w_3 x_3 + w_4 x_4$$

のようになります。

 

ロボくん
ロボくん

全結合層はこのようにとてもシンプルな構成となっています。

DeepLearningの結合層で最も基本的なものだからしっかり覚えておきましょう。

 

そもそも「Deep Learningって何?」という方はこちらの記事で解説をしているので読んでみて下さい。

ディープラーニング(Deep Learning)とは?人の脳をモデルにした手法!!
この記事を読んで分かること ディープラーニング(Deep Learning)とは何か ディープラーニングは何をしているのか ディープラーニングのpython実装例 ディープラーニング(Deep...

全結合のpythonで実装して精度確認

実際に全結合層を使って、手書き文字認識(mnist)でどれくらいの精度が出るか確認してみました。

0~9までの10パターンの手書き文字を画像認識します。

実行環境

  • colab(google colaboratory)
  • keras + tensorflow
  • mnist(手書き文字)

mnistのデータをダウンロード

#mnistのデータセットをインポート
from keras.datasets import mnist

# 学習データとテストデータに分割
(x_train, y_train), (x_test, y_test) = mnist.load_data()

Deeplearningに必要なライブラリをインポート

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Input, Flatten

keras(tensorflow)をインポートしました。

Deeplearningのモデルを作成

input_data = Input(shape=(28, 28)) # 入力データの形を指定(28×28)
x_in = Flatten()(input_data) # 入力データを1次元に直す 28x28 -> 784
z = Dense(units=128, activation='relu')(x_in) # 中間層を作成 dense(全結合) + ReLU
p = Dense(units=10, activation='softmax')(z) # 出力層を作成 dense + softmax

model = Model(
inputs=input_data,
outputs=p,
) # build DNN model

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc']) # compile model

隠れ層1層、ノード数128個のモデルを使用しました。

mnistを使ったので28×28の784次元の入力になっています。

全結合層_mnistモデル

モデルの学習

# 学習
result = model.fit(x=x_train, y=y_train, batch_size=128, epochs=10, validation_split=0.2)

訓練用のデータを使って学習し、評価用データの推定をしています。

モデルの評価

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

筆者の環境では、94.8%の正解率が得られました。

 

全結合層入力されたデータをそのまま全て使うシンプルな構造ですが、十分な精度で手書き文字の認識を行うことができました。

 

ロボくん
ロボくん

たった1層のDeeplearningでもある程度の文字認識ができてしまうんだね。

コードの量も100行に満たずに実装できるようになったので、すごい時代になったね。

まとめ

全結合層とは、全ての変数を使って計算する層です。

Deeplearningを使えば、シンプルな全結合層のみであってもある程度の精度で課題解決することはできることを確認できました。

もっとしっかりモデルの構成やチューニングを行うことで、車の自動運転など高度なタスクができると期待されています。

 

コメント

タイトルとURLをコピーしました