我正在使用这样生成的导出服务我的模型:
features_placeholder = tf.placeholder(tf.float32, None)
labels_placeholder = tf.placeholder(tf.float32, None)
# Training loop code
......
# Train is finished.
# Export model
tf.saved_model.simple_save(sess,param.logs_dir + 'model_export',
{"features": features_placeholder}, {"binary_classif": labels_placeholder})
然后,我正在发出以下POST请求(原始正文):
{“实例”:[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]}
我得到的错误如下:
{“错误”:“您必须使用dtype float \ n \ t [[Node:Placeholder_1 = Placeholder_output_shapes = [],dtype = DT_FLOAT,shape =, _device = \“ / job:localhost /副本:0 / task:0 / device:CPU:0 \”]]“}
有人知道我在做什么错吗?
答案 0 :(得分:0)
您必须确保两个占位符features_placeholder
和labels_placeholder
的形状与两个变量features_feed
和labels_feed
的形状相对应,以避免出现错误。喂字典时有。
答案 1 :(得分:0)
对于那些寻求该问题答案的人,我将尝试一下。
导出模型时,simple_save函数需要张量指针,而不是占位符。一种方法是在定义模型时命名张量,如下所示:
def inference(features):
layer_1 = nn_layer(features, get_num_features(), get_num_hidden1(), 'layer1', act=tf.nn.relu)
logits = nn_layer(layer_1, get_num_hidden1(), get_num_classes(), 'out', act=tf.identity)
logits = tf.identity(logits, name='predictions')
return logits
由于我已将logits张量命名为'predictions',因此现在可以在保存模型之前以图形模式获取此张量:
features = graph.get_tensor_by_name('features:0')
predictions = graph.get_tensor_by_name('predictions:0')
tf.saved_model.simple_save(sess,param.logs_dir + 'model_export',
{"features": features},
{"predictions": predictions})
注意:Tensorflow文档非常简短,尤其是关于simple_save函数。这是我可以使之起作用的唯一方法,但是我不是100%地确定这样做的正确方法。