从保存的DNN估算器预测,无效的Predict_Dict

时间:2018-06-16 04:55:16

标签: python-3.x tensorflow

我在存储和加载训练有素的模型时遇到问题。我正在导出我的模型 feature_spec = { 'BUY': parsing_ops.FixedLenFeature(shape=(1,), dtype=tf.float32, default_value=1), 'ASK': parsing_ops.FixedLenFeature(shape=(1,), dtype=tf.float32, default_value=2), 'DIFF': parsing_ops.FixedLenFeature(shape=(1,), dtype=tf.float32, default_value=3) } classifier.export_savedmodel('Y:\Checkers\Model1', tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec))

并且代码的这一部分顺利运行,我只是将其包含在导出偏差的情况下。然后我尝试将此模型加载到另一个文件中

BUY = float(PriceState.bidVol)
ASK = float(PriceState.askVol)
DIFF = float(PriceState.bidVol) - float(PriceState.askVol)
predict_dict = {
    "inputs": [BUY, ASK, DIFF]
}
predict_fn = predictor.from_saved_model('Y:/Checkers/Model1/1529118977')
predictions = predict_fn(predict_dict)

但是,我在这里得到错误

" 文件" ./ GDAXfinal.py",第40行,在GetPrediction中     predictions = predict_fn(predict_dict)   文件" C:\ Users \ Andy \ Python \ lib \ site-packages \ tensorflow \ contrib \ predictor \ predictor.py",第77行,调用     return self._session.run(fetches = self.fetch_tensors,feed_dict = feed_dict)   文件" C:\ Users \ Andy \ Python \ lib \ site-packages \ tensorflow \ python \ client \ session.py",第900行,运行中     run_metadata_ptr)   文件" C:\ Users \ Andy \ Python \ lib \ site-packages \ tensorflow \ python \ client \ session.py",第1135行,在_run中     feed_dict_tensor,options,run_metadata)   文件" C:\ Users \ Andy \ Python \ lib \ site-packages \ tensorflow \ python \ client \ session.py",第1316行,在_do_run中     run_metadata)   文件" C:\ Users \ Andy \ Python \ lib \ site-packages \ tensorflow \ python \ client \ session.py",第1335行,在_do_call     提升类型(e)(node_def,op,message) tensorflow.python.framework.errors_impl.InternalError: 无法将元素作为字节。 "

我尝试通过首先将float转换为字符串,然后转换为字节(bytes(str(<myVal>), encoding="utf-8")

来将输入设置为字节。

然后我收到以下错误

&#34;

InvalidArgumentError(参见上面的回溯):无法解析示例输入,值:&#39; 0.0&#39;          [[Node:ParseExample / ParseExample = ParseExample [Ndense = 3,Nsparse = 0,Tdense = [DT_FLOAT,DT_FLOAT,DT_FLOAT],dense_shapes = [[1],[1],[1]],sparse_types = [],_ device =&#34; / job:localhost / replica:0 / task:0 / device:CPU:0&#34;](_ arg_input_example_tensor_0_0,ParseExample / ParseExample / names,ParseExample / ParseExample / dense_keys_0,ParseExample / ParseExample / dense_keys_1,ParseExample / ParseExample / dense_keys_2,ParseExample / Reshape,ParseExample / Reshape_1,ParseExample / Reshape_2)]]

&#34;

我猜是因为输入是浮点数,但它们被收到字符串。但是,出于某种原因,如果我设置

"inputs": [b'0.', b'0.', b'0.']

然后预测会没有错误。

但是任何轻微的变化都会引发float / str错误。

的示例:

"inputs": [b'0.0', b'0.0', b'0.0']
 "inputs": [b'10.', b'10.', b'10.']

抛出错误。

我尝试过关注导出和加载张量流预制估算器的在线教程,但似乎都没有遇到这个问题。

1 个答案:

答案 0 :(得分:0)

build_parsing_serving_input_receiver_fn指的是解析序列化tf.train.Example协议缓冲区。要按原样使用SavedModel,您需要构建并序列化tf.train.Example并将其作为单个字符串提供。

还有tf.estimator.export.build_raw_serving_input_receiver_fn可让您分别为要素字典的每个元素提供信息。这应该适用于您的第一个示例(将可转换的内容传递给浮点Numpy数组)。