keras モデル構築 Sequentialモデルでの構築

Sequentialモデルでの構築

#.addで組む際はこのやり方
model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

#input_dim それぞれの入力blobのdim、各blobはnum, channels, height, widthの4つの次元を持つ。
  • initで層の重みの初期化方法を指定できる
  • uniformだと0~0.05の一様乱数。normalだと正規乱数。Deep Learning Tutorialの初期値重みで使われていたglorot_uniformもある層の活性化関数は、独立した層ではなくDenseのactivation引数でも指定できる
  • 隠れ層の活性化関数にはrelu、出力層の活性化関数にはsigmoidを指定
  • 出力層にsigmoidを使うと0.0から1.0の値が出力されるため入力データのクラスが1である確率とみなせる。0.5を閾値として0.5未満ならクラス0、0.5以上ならクラス1として分類する.

他に例えば
入力層784次元、中間層1024次元、出力層10次元のニューラルネットワークの構築は

model = Sequntial()
model.add(Dense(1024, input_dim=784))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('softmax'))

モデル:例2

model = Sequential(
model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation('softmax'))
return model

f:id:kobakenkken:20170724141139p:plain


KerasのConvolution2Dを使う時にborder_modeという引数があり、'valid'と'same'が選択できるのですが、これが何なのかを調べるとStackExchangeに書いてありました(convnet - border_mode for convolutional layers in keras - Data Science Stack Exchange)。

‘valid’
出力画像は入力画像よりもサイズが小さくなる。
f:id:ni4muraano:20170129144610j:plain

‘same’
ゼロパディングすることで、出力画像は入力画像と同じサイズになる。
f:id:ni4muraano:20170129145937j:plain

ゼロパディングすることのメリットについてはここ(定番のConvolutional Neural Networkをゼロから理解する - DeepAge)に書いてあります。

端のデータに対する畳み込み回数が増えるので端の特徴も考慮されるようになる
畳み込み演算の回数が増えるのでパラメーターの更新が多く実行される
カーネルのサイズや、層の数を調整できる