Получение вывода до нелинейной активации в Керасе

Как я могу получить значение до активации, когда я использую следующий синтаксис для определения слоя в Keras:

model.add(Convolution2D(128, 5, 5, activation='relu'))

Я знаю, что я могу просто использовать:

model.add(Convolution2D(128, 5, 5))
model.add(Activation('relu'))

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

1 ответ

Решение

Нет, вы не можете сделать это простым способом, так как функция активации применяется сразу после получения результата свертки при реализации слоя свертки в Keras:

if self.rank == 2:
    outputs = K.conv2d(
        inputs,
        self.kernel,
        strides=self.strides,
        padding=self.padding,
        data_format=self.data_format,
        dilation_rate=self.dilation_rate)

if self.activation is not None:
    return self.activation(outputs)
return outputs

Тем не менее, вы можете написать собственный код для выполнения свертки и определить пользовательскую функцию для получения необработанных результатов свертки. Другой вариант - написать свой собственный слой свертки (не волнуйтесь, это так легко сделать!), Который имеет два выхода: результат применения свертки, а также результат применения функции активации.

Другие вопросы по тегам