在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))
可以使用以下方法获取特征图:
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))