我在存储和加载训练有素的模型时遇到问题。我正在导出我的模型
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.']
抛出错误。
我尝试过关注导出和加载张量流预制估算器的在线教程,但似乎都没有遇到这个问题。
答案 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数组)。