我想保存虚拟的tensorflow模型,以便稍后在tensorflow服务中使用。我尝试使用以下代码段准备这样的模型:
import tensorflow as tf
input0 = tf.keras.Input(shape=[2], name="input_0", dtype="int32")
input1 = tf.keras.Input(shape=[2], name="input_1", dtype="int32")
output = tf.keras.layers.Add()([input0, input1])
model = tf.keras.Model(inputs=[input0, input1], outputs=output)
predict_function = tf.function(
func=model.call,
input_signature=[input0.type_spec, input1.type_spec],
)
signatures = {
"predict": predict_function.get_concrete_function(
[input0.get_shape(), input1.get_shape()],
),
}
model.save(
filepath="some/dummy/path",
signatures=signatures,
)
运行代码以保存模型,最后出现以下错误:
AssertionError: Could not compute output KerasTensor(type_spec=TensorSpec(shape=(None, 2), dtype=tf.int32, name=None), name='add/add:0', description="created by layer 'add'")
我应该怎么做才能保存带有签名的虚拟模型,以便稍后在tensorflow服务中使用它?
1条答案
按热度按时间wfauudbj1#
根据
model.call
文档,您应该始终使用__call__
:打电话给我
不应直接调用此方法。仅当对tf.keras.Model进行子类化时才应重写此方法。若要对输入调用模型,请始终使用
__call__()
方法,即model(inputs)
,它依赖于基础call()
方法。然后,我不确定应该如何处理列表中的几个输入,所以我只使用lambda:
当我改变签名使它们匹配时,模型可以被保存。不知道tensorflow 服务。
加载后,模型似乎工作正常: