TensforFlow模型输入数据错误

时间:2019-11-01 06:42:57

标签: tensorflow keras amazon-sagemaker

我已经在Sagemaker上构建了TensorFlow模型,并且可以与实时推断很好地工作,但是我想使用批处理转换功能,因此我开始寻找输入数据的方法。我开始使用save_model_cli在本地调试模型:

saved_model_cli show \
--dir . \
--tag_set serve \
--signature_def serving_default

The given SavedModel SignatureDef contains the following input(s):
inputs['inputs'] tensor_info:
  dtype: DT_FLOAT
  shape: (-1, 50, 11)
  name: lstm_input:0
The given SavedModel SignatureDef contains the following output(s):
outputs['dense/BiasAdd:0'] tensor_info:
  dtype: DT_FLOAT
  shape: (-1, 1)
  name: dense/BiasAdd:0
Method name is: tensorflow/serving/predict

我假设,根据上面的输出,我的输入数据称为inputs,但是,当我运行以下代码时,会出现错误

saved_model_cli run \
--dir . \
--tag_set serve \
--signature_def predict \
--input_examples 'inputs=[{"":[1.2]}]'

ValueError:“输入”不是有效的输入键。请从“”中选择,或使用--show选项。

我试图提供一个npy文件(--inputs inputs=batch_transform.npy),它使用不同的数据表示形式,但是总是出现相同的错误。

用以下代码保存我的模型:

tf.saved_model.simple_save(  
   tf.keras.backend.get_session(),  
   os.path.join(model_dir, 'model/1'),  
   inputs={'inputs': model.input},  
   outputs={t.name: t for t in model.outputs})

我尝试了TF 1.12和1.14版本,但结果是相同的。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,解决方法很简单。您可以从您的订单中看到 "--signature_def serving_default",这意味着您的 signature_def_default"serving_default"

但是,当您运行它时,您使用的是 "--signature_def predict",这与 "serving_default" 明显不同。