如何使用Tensorflow张量设置功能模型的Keras层的输入?

时间:2017-05-24 07:32:23

标签: tensorflow keras keras-layer

我有两个我想要使用的软件包,一个用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)“

2 个答案:

答案 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的形状并对其进行观察,看看它是什么。