Как применить расширенные слои активации со слоем CNN? - PullRequest
0 голосов
/ 18 апреля 2020

Я попытался применить ReLU и PReLU со слоем CNN для сравнения результатов, и я попробовал следующий код:

с ReLU:

model.add(Conv1D(filters, kernel_size, activation='relu'))

с PReLU:

model.add(Conv1D(filters, kernel_size))
model.add(PReLU())

Использует ли слой Conv1D PReLU в качестве функции активации?

Я сомневаюсь, потому что я распечатал сводку модели, и она показывает отдельные слои между CNN и PReLU с другим количеством параметров, а слой CNN с помощью функции ReLU они находятся на одном уровне.

enter image description here

Если я использовал неправильный код, как я могу его исправить?

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Да, слой Conv1D будет использовать функцию активации PReLu. Когда вы определяете слой типа Conv2D,

x = tf.keras.layers.Conv2D( 13 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' )( inputs )

Вышеприведенный оператор эквивалентен

x = tf.keras.layers.Conv2D( 13 , kernel_size=( 3 , 3 ) , strides=1 )( inputs )
x = tf.keras.layers.Activation( 'relu' )( x )

Причина предоставления функций активации в виде отдельных слоев заключается в том, что иногда нам нужно добавить нашу логику c к картам объектов перед передачей карт объектов в функцию активации.

Например, слой BatchNormalization добавляется перед передачей карт объектов к функции активации

x = tf.keras.layers.Conv2D( 13 , kernel_size=( 3 , 3 ) , strides=1 )( inputs )
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation( 'relu' )( x )

Возвращаясь к вашему вопросу,

Добавлены некоторые специальные функции активации, такие как elu, LeakyReLU и PReLU как отдельные слои, и мы не можем включить их в слои Conv1D, используя аргумент activation=.

Что касается обучаемых параметров, слой conv1d_18 имеет 15050 параметров, которые образуют ядро ​​в одномерной свертке. Эти параметры не имеют ничего общего с функцией активации.

4900 параметров PReLU - это параметры наклона, которые оптимизированы с обратным распространением. Эти параметры, наряду с весами ядра, будут обновляться с каждым пакетом и, следовательно, включены в обучаемые параметры.

Таким образом, выходы (неактивированные) слоя Conv1D будут проходить через PReLU Активация, которая действительно использует параметр наклона для расчета активированных выходов.

1 голос
/ 18 апреля 2020

Согласно keras docs

Это будет эквивалентно

model.add(Dense(64))
model.add(Activation('tanh'))

этому

model.add(Dense(64, activation='tanh'))

Я не знаю, почему расширенные функции активации должны использоваться в качестве слоя, но PReLu может использоваться с CNN, и здесь нет никаких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...