【问题标题】:TensorFlow v2: Replacement for tf.contrib.predictor.from_saved_modelTensorFlow v2:替换 tf.contrib.predictor.from_saved_model
【发布时间】:2019-12-06 23:21:16
【问题描述】:

到目前为止,我使用tf.contrib.predictor.from_saved_model 加载SavedModeltf.estimator 模型类)。但是,很遗憾,此功能已在 TensorFlow v2 中删除。到目前为止,在 TensorFlow v1 中,我的编码如下:

 predict_fn = predictor.from_saved_model(model_dir + '/' + model, signature_def_key='predict')

 prediction_feed_dict = dict()

 for key in predict_fn._feed_tensors.keys():

     #forec_data is a DataFrame holding the data to be fed in 
     for index in forec_data.index:
         prediction_feed_dict[key] = [ [ forec_data.loc[index][key] ] ]

 prediction_complete = predict_fn(prediction_feed_dict)

使用tf.saved_model.load,我在 TensorFlow v2 中尝试以下操作失败:

 model = tf.saved_model.load(model_dir + '/' + latest_model)
 model_fn = model.signatures['predict']

 prediction_feed_dict = dict()

 for key in model_fn._feed_tensors.keys(): #<-- no replacement for _feed_tensors.keys() found

     #forec_data is a DataFrame holding the data to be fed in 
     for index in forec_data.index:
         prediction_feed_dict[key] = [ [ forec_data.loc[index][key] ] ]

 prediction_complete = model_fn(prediction_feed_dict) #<-- no idea if this is anyhow close to correct

所以我的问题是(都在 TensorFlow v2 的上下文中):

  1. 如何替换_feed_tensors.keys()
  2. 如何使用加载了tf.saved_model.loadtf.estimator 模型以简单的方式进行推理

非常感谢,感谢任何帮助。

注意:此问题与 here 发布的问题不是重复的,因为那里提供的答案都依赖于 TensorFlow v1 中已在 TensorFlow v2 中删除的功能。

编辑: postet here 的问题似乎问的基本相同,但直到现在(2020-01-22)也没有答案。

【问题讨论】:

    标签: python tensorflow tensorflow-serving tensorflow2.0 tensorflow-estimator


    【解决方案1】:

    希望您已经使用类似于下面提到的代码保存了估算器模型:

    input_column = tf.feature_column.numeric_column("x")
    estimator = tf.estimator.LinearClassifier(feature_columns=[input_column])
    
    def input_fn():
      return tf.data.Dataset.from_tensor_slices(
        ({"x": [1., 2., 3., 4.]}, [1, 1, 0, 0])).repeat(200).shuffle(64).batch(16)
    estimator.train(input_fn)
    
    serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
      tf.feature_column.make_parse_example_spec([input_column]))
    export_path = estimator.export_saved_model(
      "/tmp/from_estimator/", serving_input_fn)
    

    您可以使用下面提到的代码加载模型:

    imported = tf.saved_model.load(export_path)
    

    Predict通过传递输入特征来使用您的模型,您可以使用以下代码:

    def predict(x):
      example = tf.train.Example()
      example.features.feature["x"].float_list.value.extend([x])
      return imported.signatures["predict"](examples=tf.constant([example.SerializeToString()]))
    
    print(predict(1.5))
    print(predict(3.5))
    

    更多详情请参考this link,其中解释了使用 TF Estimator 保存的模型。

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2016-06-27
      • 2020-06-30
      相关资源
      最近更新 更多