この記事を読んで分かること
- 全結合層(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パターンの手書き文字を画像認識します。
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次元の入力になっています。
モデルの学習
# 学習 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を使えば、シンプルな全結合層のみであってもある程度の精度で課題解決することはできることを確認できました。
もっとしっかりモデルの構成やチューニングを行うことで、車の自動運転など高度なタスクができると期待されています。
コメント