在 Keras 中获取非线性激活之前的输出
Getting the output prior to non-linear activation in Keras
当我使用以下语法在 Keras 中定义层时,如何在激活之前获取值:
model.add(Convolution2D(128, 5, 5, activation='relu'))
我知道我可以简单地使用:
model.add(Convolution2D(128, 5, 5))
model.add(Activation('relu'))
并从第一层得到输出,但是使用第一种语法时可以吗?
不,你不能用简单的方法做到这一点,因为激活函数is applied right after在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
不过,您也许能够编写自定义代码来执行卷积并定义自定义函数来获取卷积的原始输出。另一种选择是编写自己的卷积层(别担心,这样做很容易!)它有两个输出:应用卷积的结果和应用激活函数的结果。
当我使用以下语法在 Keras 中定义层时,如何在激活之前获取值:
model.add(Convolution2D(128, 5, 5, activation='relu'))
我知道我可以简单地使用:
model.add(Convolution2D(128, 5, 5))
model.add(Activation('relu'))
并从第一层得到输出,但是使用第一种语法时可以吗?
不,你不能用简单的方法做到这一点,因为激活函数is applied right after在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
不过,您也许能够编写自定义代码来执行卷积并定义自定义函数来获取卷积的原始输出。另一种选择是编写自己的卷积层(别担心,这样做很容易!)它有两个输出:应用卷积的结果和应用激活函数的结果。