TensorFlow v2:替代 tf.contrib.predictor.from_saved_model
TensorFlow v2: Replacement for tf.contrib.predictor.from_saved_model
到目前为止,我正在使用 tf.contrib.predictor.from_saved_model
加载 SavedModel
(tf.estimator
模型 class)。然而,不幸的是,这个功能在 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 的上下文中):
- 如何替换
_feed_tensors.keys()
?
- 如何使用加载有
tf.saved_model.load
的 tf.estimator
模型以直接的方式进行推理
非常感谢,感谢任何帮助。
注意:此问题与 here 发布的问题不重复,因为那里提供的答案都依赖于已在 TensorFlow v2 中删除的 TensorFlow v1 功能。
编辑: postet here 的问题似乎问的基本上是同样的事情,但直到现在 (2020-01-22) 也没有答案。
希望您已经使用类似于下面提到的代码保存了 Estimator 模型:
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 估计器保存的模型。
到目前为止,我正在使用 tf.contrib.predictor.from_saved_model
加载 SavedModel
(tf.estimator
模型 class)。然而,不幸的是,这个功能在 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 的上下文中):
- 如何替换
_feed_tensors.keys()
? - 如何使用加载有
tf.saved_model.load
的
tf.estimator
模型以直接的方式进行推理
非常感谢,感谢任何帮助。
注意:此问题与 here 发布的问题不重复,因为那里提供的答案都依赖于已在 TensorFlow v2 中删除的 TensorFlow v1 功能。
编辑: postet here 的问题似乎问的基本上是同样的事情,但直到现在 (2020-01-22) 也没有答案。
希望您已经使用类似于下面提到的代码保存了 Estimator 模型:
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 估计器保存的模型。