【问题标题】:export serving_input_fn(): ValueError: too many values to unpack (expected 2)export serving_input_fn(): ValueError: too many values to unpack (expected 2)
【发布时间】:2019-02-01 23:11:46
【问题描述】:

我训练了一个 TensorFlow Estimator 模型。当我尝试将模型导出到 saved_model.pb 文件时,我编写了以下代码来提供我必须预测的输入函数。

def csv_serving_input():
    feature_placeholders = {
        'renancy': tf.placeholder(tf.float32, [None]),
        'freq': tf.placeholder(tf.float32, [None]),
        'monetary': tf.placeholder(tf.float32, [None])
    }
    features = feature_placeholders

    return tf.estimator.export.ServingInputReceiver(features,
                                                    feature_placeholders)

并导出模型

model = "trained_model/cluster_01"
export_dir = model_dir + "/export"
estimator.export_savedmodel(export_dir, csv_serving_input)

它抛出以下错误 ValueError: too many values to unpack (expected 2)

我正在发布完整的回溯错误以供参考

<ipython-input-93-ecb2562febb3> in <module>()
----> 1 estimator.export_savedmodel(export_dir, csv_serving_input_fn_vtwo)

c:\users\madhivarman\appdata\local\programs\python\python35\lib\site-packages\tensorflow\contrib\learn\python\learn\estimators\estimator.py in export_savedmodel(self, export_dir_base, serving_input_fn, default_output_alternative_key, assets_extra, as_text, checkpoint_path, graph_rewrite_specs, strip_default_attrs)
   1386       input_ops = serving_input_fn()
   1387       input_alternatives, features = (
-> 1388           saved_model_export_utils.get_input_alternatives(input_ops))
   1389 
   1390       # TODO(b/34388557) This is a stopgap, pending recording model provenance.

c:\users\madhivarman\appdata\local\programs\python\python35\lib\site-packages\tensorflow\python\util\deprecation.py in new_func(*args, **kwargs)
    248               'in a future version' if date is None else ('after %s' % date),
    249               instructions)
--> 250       return func(*args, **kwargs)
    251     return tf_decorator.make_decorator(
    252         func, new_func, 'deprecated',

c:\users\madhivarman\appdata\local\programs\python\python35\lib\site-packages\tensorflow\contrib\learn\python\learn\utils\saved_model_export_utils.py in get_input_alternatives(input_ops)
    171     input_alternatives[DEFAULT_INPUT_ALTERNATIVE_KEY] = default_inputs
    172   else:
--> 173     features, unused_labels = input_ops
    174 
    175   if not features:

ValueError: too many values to unpack (expected 2)

我已附上完整的 Github Repo code reference

【问题讨论】:

    标签: python google-cloud-ml tensorflow-serving tensorflow-estimator


    【解决方案1】:

    你可以试试这个:

    def serving_input_fn(): feature_placeholders = { 'var1' : tf.placeholder(tf.float32, [None]), 'var2' : tf.placeholder(tf.float32, [None]), ... } features = { key: tf.expand_dims(tensor, -1) for key, tensor in feature_placeholders.items() } return tf.estimator.export.ServingInputReceiver(features, feature_placeholders)

    【讨论】:

    • 是的,我也试过这段代码。尽管如此,它仍然显示相同的错误。但是当我使用函数 tf.contrib.learn.InputFnOps 返回功能时,它会保存 .pb 文件。
    • 可能是导出模型我正在使用这个功能tf.contrib.learn.make_export_strategyContribestimator 都是非常不同的模块。这就是为什么我认为我面临这个错误。我不确定这个解决方案。
    • 找到了解决方案。正如我所说,这是由于库不匹配。在对代码进行少量重构后,我从 cloudML 中得到了预测。
    • @Madhi - 很高兴听到你成功了!考虑为后代自行回答问题。
    • 酷。 tf.contrib.learn.Estimator 和 tf.estimator.Estimator 是不同的。你不能混搭。
    猜你喜欢
    • 2019-01-19
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多