创建版本失败。模型验证失败:输出的外部维度必须未知,“Const\ u 1:0”的外部维度为5

2024-04-26 20:46:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我训练了一个图像分类器克拉斯特遣部队并在训练完成后导出模型,在云中服务并进行在线预测。你知道吗

我在本地主机上提供模型时使用了:

tensorflow_model_server --model_base $PATH_TO_SAVEDMODEL --rest_api_port=9000 --model_name=saved_model

我能够做出预测并得到结果。当我尝试在云中部署模型时,标题中出现了错误。你知道吗

问题是,我想用预测结果映射类名,我可以通过以下操作实现这一点:

# after i got the label names i convert the variable to a tensor
label_names_tensor = tf.convert_to_tensor(label_names) # shape (5,)

要导出模型,我使用以下方法:

tf.saved_model.simple_save(
    sess,
    "./saved_models/v1",
    inputs={'image': model.input},
    outputs={'label' : label_names_tensor,'prediction': model.output[0]})

注意:

  • 你知道吗型号.输出形状为(?)?(第5页)
  • 你知道吗型号.输出[0]的形状为(5,)

这在本地工作,我得到了与预测结果映射的类名。你知道吗

很明显问题出在哪里。。我怎样才能让它工作并将类名与预测结果正确地映射呢?你知道吗

我试图使用重塑功能,但我无法让它工作。我想我最后需要有这个:

  • 标签名称的形状\u张量-->;(?(第5页)

所以我可以这样做:

  • --outputs={'label':label\u names\u tensor,'prediction':型号.输出}你知道吗

非常感谢您的帮助


Tags: theto模型convertmodelnamestfoutputs
1条回答
网友
1楼 · 发布于 2024-04-26 20:46:54

一些介绍性说明。首先,要求输入的外部维度是None的原因是允许涉及输入批处理的优化。输入是基于行的:每个输入一行特征向量/矩阵/张量。另一个假设是每个输入行正好产生一个输出行。因为输入行的数量是可变的,所以输出行的数量也是可变的。你知道吗

这样做的一个后果是,如果不在每一行中重复“静态”信息,就无法输出它。也就是说,如果一次只传入一个输入,就不会有任何重复,但是处理案例时会有额外的开销,就像有多个输入/输出行一样。可以按如下方式重复标记的行:

batch_size = tf.expand_dims(tf.shape(model.output)[0], [-1])
new_shape = tf.stack([batch_size[0], -1])
label_names_tensor = tf.reshape(tf.expand_dims(tf.tile(label_names, batch_size), [-1]), new_shape)
# ...
tf.saved_model.simple_save(
    sess,
    "./saved_models/v1",
    inputs={'image': model.input},
    outputs={'label' : label_names_tensor,'prediction': model.output})

相关问题 更多 >