我有两个我想要使用的软件包,一个用Keras1.2编写,另一个用tensorflow编写。我想使用在张量流中构建到Keras模型中的体系结构的一部分。
建议使用部分解决方案here,但这是针对顺序模型的。关于功能模型的建议 - 将预处理包装在Lambda层中 - 不起作用。
以下代码有效:
inp = Input(shape=input_shape)
def ID(x):
return x
lam = Lambda(ID)
flatten = Flatten(name='flatten')
output = flatten(lam(inp))
Model(input=[inp], output=output)
但是,当用预处理的输出张量flatten(lam(inp))
替换flatten(lam(TF_processed_layer))
时,我得到:“模型的输出张量必须是Keras张量。找到:Tensor(”Reshape:0“,形状=(?,?),dtype = float32)“
答案 0 :(得分:0)
您可以尝试将输入张量包装到Keras输入层中,然后从那里继续构建模型。像这样:
inp = Input(tensor=tftensor,shape=input_shape)
def ID(x):
return x
lam = Lambda(ID)
flatten = Flatten(name='flatten')
output = flatten(lam(inp))
Model(input=inp, output=output)
答案 1 :(得分:0)
您没有为Keras正确定义您的兰巴舞。 试试这样的东西
def your_lambda_layer(x):
x -= K.mean(x, axis=1, keepdims=True)
x = K.l2_normalize(x, axis=1)
return x
....
model.add(Lambda(your_lambda_layer))
看到您正在使用功能性API
def your_lambda_layer(x):
x -= K.mean(x, axis=1, keepdims=True)
x = K.l2_normalize(x, axis=1)
return x
....
x = SomeLayerBeforeLambda(options...)(x)
x = (Lambda(your_lambda_layer))(x)
但是,即使这样,lambda层也可能无法变平,因此请打印出lambda的形状并对其进行观察,看看它是什么。