tensorflow 如何对单个数据项使用tf.estimator.predict

njthzxwz  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(154)

我是tf.estimator的新手,之前使用过一个旧版本的tensorflow。传入“input_fn”让我有点困惑。我有一个DNNClassifier和一个numpy数组,其中包含一个数据项(x),我想为它预测一个“y”值。
这是我目前掌握的代码。

dnn_clf = tf.estimator.DNNClassifier(feature_columns=feature_columns, n_classes=14, hidden_units=[60, 100], model_dir="/home/Ehoward14/mysite/dnn_model")

predict_fn = tf.estimator.inputs.numpy_input_fn(x=scaled_X,
                                                    y=None,
                                                    batch_size=1,
                                                    shuffle=False,
                                                    num_epochs=1)

y_pred = dnn_clf.predict(input_fn=predict_fn)

我想这样打印单个y值:

//This will only print one value
    for result in y_pred:
            print(result)

scaled_X包含如下内容:[[ 1.42857143 0.0.16.36363636 0.1.818182 0.12 0.2.896 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
此代码返回错误:

for result in y_pred:
  File "/usr/lib/python3.6/site- 
packages/tensorflow/python/estimator/estimator.py", line 543, in predict
features, None, model_fn_lib.ModeKeys.PREDICT, self.config)
  File "/usr/lib/python3.6/site- 
packages/tensorflow/python/estimator/estimator.py", line 1133, in _call_model_fn
     model_fn_results = self._model_fn(features=features, **kwargs)
  File "/usr/lib/python3.6/site- 
   packages/tensorflow/python/estimator/canned/dnn.py", line 385, in _model_fn
    batch_norm=batch_norm)
  File "/usr/lib/python3.6/site- 
   packages/tensorflow/python/estimator/canned/dnn.py", line 179, in _dnn_model_fn
    'Given type: {}'.format(type(features)))
    ValueError: features should be a dictionary of `Tensor`s. Given type: <class 'tensorflow.python.framework.ops.Tensor'>

实际上,我只需要知道我的方法是否正确,如果不正确,那么任何改进的建议都将受到赞赏。
提前感谢!

kq0g1dla

kq0g1dla1#

这对我很有效:您应该加载之前保存的导出模型,并为其提供一个示例

model_estimate_k = tf.saved_model.load('estimatior_k/save_model/1666855778')

def predict(scores: list):
    example = tf.train.Example()
    example.features.feature["scores"].float_list.value.extend(scores)
    return model_estimate_k.signatures["predict"](examples=tf.constant([example.SerializeToString()]))

print(predict([0.8, 0.9, 0.7]))

相关问题