我试图让张量流波士顿样本(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials/input_fn)在google cloudml上工作,我似乎成功接受了培训,但我对后续的预测感到困惑。
我已经调整了代码以适应tf.contrib.learn.Experiment和learn_runner.run()。它使用" gcloud ml-engine本地火车在本地和云端运行......" /" gcloud ml-engine工作提交培训......"。
我可以使用经过训练的模型运行estimator.predict(input_fn = predict_input_fn))并使用给定的boston_predict.csv集进行有意义的预测。
我可以使用" gcloud ml-engine模型在云中创建和修改模型......"和" gcloud ml-engine版本创建......"
但是
我用" $ gcloud ml-engine local predict --help查找了预期的格式 ",阅读https://cloud.google.com/ml-engine/docs/how-tos/troubleshooting,但一般无法通过google或stackexhange查找我的具体错误报告。
我是一个菜鸟,所以我可能会以一些基本的方式犯错,但我无法发现它。
所有和任何帮助表示赞赏,
: - )
yarc68000。
-------环境----------
(env1) $ gcloud --version
Google Cloud SDK 170.0.0
alpha 2017.03.24
beta 2017.03.24
bq 2.0.25
core 2017.09.01
datalab 20170818
gcloud
gsutil 4.27
(env1) $ python --version
Python 2.7.13 :: Anaconda 4.3.1 (64-bit)
(env1) $ conda list | grep tensorflow
tensorflow 1.3.0 <pip>
tensorflow-tensorboard 0.1.6 <pip>
------------执行和错误:boston_predict.csv ----------
$ gcloud ml-engine local predict --model-dir=<..>/export/Servo/1504780684 --text-instances 1709boston/boston_predict.csv
<..>
ERROR:root:Exception during running the graph: Could not parse example input, value: 'CRIM,ZN,INDUS,NOX,RM,AGE,DIS,TAX,PTRATIO'
[[Node: ParseExample/ParseExample = ParseExample[Ndense=9, Nsparse=0, Tdense=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], dense_shapes=[[1], [1], [1], [1], [1], [1], [1], [1], [1]], sparse_types=[], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_Placeholder_0_0, ParseExample/ParseExample/names, ParseExample/ParseExample/dense_keys_0, ParseExample/ParseExample/dense_keys_1, ParseExample/ParseExample/dense_keys_2, ParseExample/ParseExample/dense_keys_3, ParseExample/ParseExample/dense_keys_4, ParseExample/ParseExample/dense_keys_5, ParseExample/ParseExample/dense_keys_6, ParseExample/ParseExample/dense_keys_7, ParseExample/ParseExample/dense_keys_8, ParseExample/Const, ParseExample/Const_1, ParseExample/Const_2, ParseExample/Const_3, ParseExample/Const_4, ParseExample/Const_5, ParseExample/Const_6, ParseExample/Const_7, ParseExample/Const_8)]]
<..>
-------执行和错误无头boston_predict.csv ------
(这里我尝试使用省略第一行的boston_predict.csv)
$ gcloud ml-engine local predict --model-dir=<..>/export/Servo/1504780684 --text-instances 1709boston/boston_predict_headerless.csv
<..>
ERROR:root:Exception during running the graph: Could not parse example input, value: '0.03359,75.0,2.95,0.428,7.024,15.8,5.4011,252,18.3'
[[Node: ParseExample/ParseExample = ParseExample[Ndense=9, Nsparse=0, Tdense=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], dense_shapes=[[1], [1], [1], [1], [1], [1], [1], [1], [1]], sparse_types=[], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_Placeholder_0_0, ParseExample/ParseExample/names, ParseExample/ParseExample/dense_keys_0, ParseExample/ParseExample/dense_keys_1, ParseExample/ParseExample/dense_keys_2, ParseExample/ParseExample/dense_keys_3, ParseExample/ParseExample/dense_keys_4, ParseExample/ParseExample/dense_keys_5, ParseExample/ParseExample/dense_keys_6, ParseExample/ParseExample/dense_keys_7, ParseExample/ParseExample/dense_keys_8, ParseExample/Const, ParseExample/Const_1, ParseExample/Const_2, ParseExample/Const_3, ParseExample/Const_4, ParseExample/Const_5, ParseExample/Const_6, ParseExample/Const_7, ParseExample/Const_8)]]
<..>
答案 0 :(得分:0)
可能有两个问题。
首先,看起来您正在导出的图表需要tf.Example protos作为输入,即其中有一个parse_example(...)op。波士顿样本似乎没有添加该操作,因此我怀疑这是您修改的一部分。
在显示input_fn所需的代码之前,我们需要讨论第二个问题:版本控制。估计器存在于tensorflow.contrib下的先前版本的TensorFlow中。但是,各个部分已经迁移到具有连续TensorFlow版本的tensorflow.estimator中,并且API已经移动了。
CloudML Engine目前(截至2017年9月7日)仅支持TF 1.0和1.2,因此我将提供适用于1.2的解决方案。这基于census sample。这是使用CSV数据所需的input_fn,尽管我通常建议导出独立于输入格式的模型:
# Provides the data types for the various columns.
FEATURE_DEFAULTS=[[0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0], [0.0]]
def predict_input_fn(rows_string_tensor):
# Takes a rank-1 tensor and converts it into rank-2 tensor
# Example if the data is ['csv,line,1', 'csv,line,2', ..] to
# [['csv,line,1'], ['csv,line,2']] which after parsing will result in a
# tuple of tensors: [['csv'], ['csv']], [['line'], ['line']], [[1], [2]]
row_columns = tf.expand_dims(rows_string_tensor, -1)
columns = tf.decode_csv(row_columns, record_defaults=FEATURE_DEFAULTS)
features = dict(zip(FEATURES, columns))
return tf.contrib.learn.InputFnOps(features, None, {'csv_row': csv_row})
你需要这样的出口策略:
saved_model_export_utils.make_export_strategy(
predict_input_fn,
exports_to_keep=1,
default_output_alternative_key=None,
)
您将其作为大小为1的列表传递给tf.contrib.learn.Experiment
的构造函数。