在keras中修改特征图

Modifying feature maps in keras

可以使用以下方法获取特征图:

from keras import backend as K
# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input],
                                  [model.layers[
                                  [model.layers[
                                  [model.layers[3].output])
layer_output = get_3rd_layer_output([X])[
      layer_output = get_3rd_layer_output([X])[
      layer_output = get_3rd_layer_output([X])[0]

这有利于数据的可视化。但是,我还打算修改每一层的输出,然后将此输出反馈给网络。谁能建议我如何做同样的事情?

谢谢

如果你只想做一次,你可以这样做:

modified_layer_output = your_old_function([X]) * some_modification
get_final_layer_output = K.function([model.layers[3].input],
                                  [model.layers[-1].output])
result = get_final_layer_output(modified_layer_output)

您还可以创建一个新模型来学习修改后的图层输出。

编辑: 您可以编写自己的 keras 层来对输入做任何您想做的事情,并将其传递到下一层,如下所示 (https://keras.io/layers/writing-your-own-keras-layers/)。

我正在通过编辑来恢复此答案以反映更多信息。

假设您有一个类似于此的模型:

model = Sequential()
model.add(Dense(1000, input_dim=1000))
model.add(Dense(1000))

并且您想 运行 在将第一层的输出传递到第二层之前对其进行自定义修改,您可以这样使用 lambda layer

f = K.function(\* some function *\)

model = Sequential()
model.add(Dense(1000, input_dim=1000))
model.add(Lambda(lambda x: f(x))
model.add(Dense(1000))