如何在keras中间层的结果之间进行一些计算
How to do some calculation between the results from the middle layers in keras
如果我构建的 keras 神经网络模型看起来像:
模型 1:输入 -> layer1
模型2:输入->layer1->layer2->运算->layer3->输出
我想在 model1 的 layer1 的结果和 model2 的 layer2 的结果之间做一些计算,我该怎么做?我尝试使用一些 Tensorflow 代码进行计算但失败了。有什么方法可以实现我的目标吗?
您可以使用 Keras functional API 来达到这个目的:
from keras import layers
from keras import models
# define model 1 architecture
m1_input = layers.Input(shape=('arbitrary shape'))
m1_layer1 = layers.SomeLayer()(m1_input)
# define model 2 architecture
m2_input = layers.Input(shape=('arbitrary shape'))
m2_layer1 = layers.SomeLayer()(m2_input)
m2_layer2 = layers.SomeLayer()(m2_layer1)
merge_m1 = layers.Lambda(SomeOperation)([m1_layer1, m2_layer2])
m2_layer3 = layers.SomeLayer()(merge_m1)
m2_output = layers.SomeLayer()(m2_layer3)
# define the final model
model = models.Model(inputs=[m1_input, m2_input], outputs=[m2_output])
在上面的代码中,SomeOperation
应该是一个函数。查看 documentation for more information about Lambda layer in Keras. Alternatively, Keras has some simple built-in merge layers,例如 add 或 concatenate,您可以使用它们代替 Lambda 层。
如果我构建的 keras 神经网络模型看起来像:
模型 1:输入 -> layer1
模型2:输入->layer1->layer2->运算->layer3->输出
我想在 model1 的 layer1 的结果和 model2 的 layer2 的结果之间做一些计算,我该怎么做?我尝试使用一些 Tensorflow 代码进行计算但失败了。有什么方法可以实现我的目标吗?
您可以使用 Keras functional API 来达到这个目的:
from keras import layers
from keras import models
# define model 1 architecture
m1_input = layers.Input(shape=('arbitrary shape'))
m1_layer1 = layers.SomeLayer()(m1_input)
# define model 2 architecture
m2_input = layers.Input(shape=('arbitrary shape'))
m2_layer1 = layers.SomeLayer()(m2_input)
m2_layer2 = layers.SomeLayer()(m2_layer1)
merge_m1 = layers.Lambda(SomeOperation)([m1_layer1, m2_layer2])
m2_layer3 = layers.SomeLayer()(merge_m1)
m2_output = layers.SomeLayer()(m2_layer3)
# define the final model
model = models.Model(inputs=[m1_input, m2_input], outputs=[m2_output])
在上面的代码中,SomeOperation
应该是一个函数。查看 documentation for more information about Lambda layer in Keras. Alternatively, Keras has some simple built-in merge layers,例如 add 或 concatenate,您可以使用它们代替 Lambda 层。