私はTheanoをバックエンドとしてKerasを使用しています。私はSequentialニューラルネットワークモデルを持っています。Kerasでニューラルネットワークレイヤーを追加する2つの方法の違いは何ですか?
以下の違いはありますか?
model.add(Convolution2D(32, 3, 3, activation='relu'))
と
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
私はTheanoをバックエンドとしてKerasを使用しています。私はSequentialニューラルネットワークモデルを持っています。Kerasでニューラルネットワークレイヤーを追加する2つの方法の違いは何ですか?
以下の違いはありますか?
model.add(Convolution2D(32, 3, 3, activation='relu'))
と
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
彼らは基本的に同じです。別々に置くことの利点は、間に他のレイヤー(たとえばBatchNormalization
)を追加できることです。 Kerasで
は、指定されていない場合は、Convolution2D
は
def linear(x):
'''
The function returns the variable that is passed in, so all types work.
'''
return x
だけ恒等関数であり、すべてのことActivation
層は入力に活性化関数を適用しているんれ、デフォルトでは「線形」の活性化を使用します
def call(self, x, mask=None):
return self.activation(x)
編集:
だから、基本的には
Convolution2D(activation = 'relu')
はConvolution2D
層のcall
関数の最後の2行は、output
での出力であるoutput = self.activation(output) return output
である
Convolution2D(32, 3, 3)
後Activation('relu')
を適用することと同じである、畳み込みを行った後relu活性化関数を適用します畳み込み。したがって、活性化機能を適用することがわかっているのは、Convolution2D
の最後のステップです。
ソースコード:
Convolution2D
層:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/convolutional.py
Activation
層:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/core.py
活性化関数:https://github.com/fchollet/keras/blob/master/keras/activations.py
だけで明確にします。だからConvolution2D(activation = 'relu')は、Convolution2D(32,3,3)の後にActivation( 'relu')を適用するのと同じコンボルーションを実行した後、relu activation関数を適用しますか? – angubenko
@angubenkoはい、答えにいくつかのコードと説明を追加しました。 – dontloo
多くのことに助けてくれてありがとう! – angubenko