google-site-verification: googlec11dd3c59de6bdc4.html
人工知能はどこまで人間に迫るのか
How close will artificial intelligence get to humans?
深層学習

9) 深層学習の技術的要素 全結合

CNN、MLPではしばしば全結合を用いるが、この問題点は1次元の入力となるためデータの形状が無視されてしまうことである。入力データが本研究のように分光反射スペクトルの場合、分光スペクトルのデータ群であるが全結合層に入力するときには1次元のデータになってしまう。

入力には吸収ピークの形状のデータなどが含まれているが、全結合層は形状に関する情報をわかりにくくしている。深層学習では出力層の手前で使われることが多く、この部分が検出された特徴の組み合わせから、予測結果に分類するための識別部となる。

言うまでもないが最終的な出力層のユニットの数は分類される数と一致している必要がある。

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


隠れ層1層、ノード数128個のモデルを準備する。
mnistを利用、28×28の784次元の入力とした。

mnistのデータセットをインポート

from keras.datasets import mnist

学習データとテストデータに分割

(x_train, y_train), (x_test, y_test) = mnist.load_data()

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

input_data = Input(shape=(28, 28)) # 入力データの形を指定(28×28)
x_in = Flatten()(input_data) # 入力データを1次元に直す 28×28 -> 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

学習

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)

Test loss: 0.437487
Test accuracy: 0.942600 を得た。

トップページへ