【问题标题】:Placeholder tensors require a value in ml-engine predict but not local predict占位符张量在 ml-engine predict 中需要一个值,但不是 local predict
【发布时间】:2017-10-14 01:43:14
【问题描述】:

我一直在开发一个模型,用于云 ML 引擎的在线预测服务。我的模型包含一个 placeholder_with_default 张量,我用它来保持预测显着性的阈值。

threshold = tf.placeholder_with_default(0.01, shape=(), name="threshold")

我注意到在使用本地预测时:

gcloud ml-engine local predict --json-instances=data.json --model-dir=/my/model/dir

我不需要为这个张量提供值。例如这是一个有效的输入:

{"features": ["a", "b"], "values": [10, 5]}

但是在使用在线预测时:

gcloud ml-engine predict --model my_model --version v1 --json-instances data.json

如果我使用上面的 JSON,我会得到一个错误:

{
    "error": "Prediction failed: Exception during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"input size does not match signature\")"
}

但是,如果我包含阈值,那么我不会。例如:

{"features": ["a", "b"], "values": [10, 5], "threshold": 0.01}

有没有办法让“阈值”成为可选输入?

谢谢

马修

【问题讨论】:

    标签: google-cloud-ml-engine


    【解决方案1】:

    目前看来,这在 CloudML 中是不可能的。如果您从 JSON 文件中获取预测,则需要显式添加默认值(就像您对 "threshold": 0.01 所做的那样)。

    在 Python 中,我只是在执行 API 请求之前动态添加所需的属性:

    def add_empty_fields(instance):
        placeholder_defaults = {"str_placeholder": "", "float_placeholder": -1.0}
        for ph, default_val in placeholder_defaults.items():
            if ph not in instance:
                instance[ph] = default_val
    

    这将改变将占位符名称映射到占位符值的instance dict。对于具有许多可选占位符的模型,这比手动为每个实例设置缺失的占位符值要好一些。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 2019-02-08
      • 2018-08-09
      • 2018-12-06
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多