我在Tensorflow中尝试构建我的自定义实验,但我不知道export_strategy参数的用途是什么?另外,您是如何构建serving_input_fn的?
谢谢!
回答:
答案灵感来自于CloudML示例
问题1:export_strategy的用途是什么(源码)?
另见第二个问题的回答,但export策略(正如其名所示)是在导出图时进行一些更改的可能性。在下面的示例中,添加了在服务模型时将使用的适当输入函数。
learn_runner.run( generate_experiment_fn( min_eval_frequency=args.min_eval_frequency, eval_delay_secs=args.eval_delay_secs, train_steps=args.train_steps, eval_steps=args.eval_steps, export_strategies=[saved_model_export_utils.make_export_strategy( model.SERVING_FUNCTIONS[args.export_format], exports_to_keep=1 )] ), run_config=tf.contrib.learn.RunConfig(model_dir=args.job_dir), hparams=hparam.HParams(**args.__dict__) )
问题2:如何构建serving_input_fn(源码)?
这实际上是当您保存模型并准备服务时,您需要图中的一些输入存在,根据所需的输入(在本例中为json, csv, …)它会向图中添加一些输入,如果缺少这些输入,将无法在服务时提供给图。
def csv_serving_input_fn(): """构建服务输入。""" csv_row = tf.placeholder( shape=[None], dtype=tf.string ) features = parse_csv(csv_row) # 忽略标签列 features.pop(LABEL_COLUMN) return tf.estimator.export.ServingInputReceiver( features, {'csv_row': csv_row})def example_serving_input_fn(): """构建服务输入。""" example_bytestring = tf.placeholder( shape=[None], dtype=tf.string, ) features = tf.parse_example( example_bytestring, tf.feature_column.make_parse_example_spec(INPUT_COLUMNS) ) return tf.estimator.export.ServingInputReceiver( features, {'example_proto': example_bytestring})def json_serving_input_fn(): """构建服务输入。""" inputs = {} for feat in INPUT_COLUMNS: inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype) return tf.estimator.export.ServingInputReceiver(inputs, inputs)SERVING_FUNCTIONS = { 'JSON': json_serving_input_fn, 'EXAMPLE': example_serving_input_fn, 'CSV': csv_serving_input_fn}