2017-08-03 7 views
0

Google CloudのMLエンジンでTensorForestEstimatorモデルをホストしようとしています。すべてが右に動作しますが、非常にモデルがスタックトレースをエクスポートするために失敗終わりに:その軌跡に基づいてTensorFlow:TensorForestEstimatorモデルのエクスポートエラー

Traceback (most recent call last): 
[...] 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/experiment.py", line 502, in train_and_evaluate 
    export_results = self._maybe_export(eval_result) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/experiment.py", line 597, in _maybe_export 
    eval_result=eval_result)) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/export_strategy.py", line 87, in export 
    return self.export_fn(estimator, export_path, **kwargs) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/utils/saved_model_export_utils.py", line 412, in export_fn 
    checkpoint_path=checkpoint_path) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 1280, in export_savedmodel 
    actual_default_output_alternative_key) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/utils/saved_model_export_utils.py", line 252, in build_all_signature_defs 
    for input_key, inputs in input_alternatives.items() 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/utils/saved_model_export_utils.py", line 254, in <dictcomp> 
    in output_alternatives.items()} 
File "/root/.local/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/utils/saved_model_export_utils.py", line 119, in build_standardized_signature_def 
    input_tensors, output_tensors) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py", line 146, in predict_signature_def 
    signature_constants.PREDICT_METHOD_NAME) 
File "/root/.local/lib/python2.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py", line 45, in build_signature_def 
    signature_def.outputs[item].CopyFrom(outputs[item]) 
TypeError: None has type NoneType, but expected one of: bytes, unicode 

、私はエラーが考えていることはdefault_output_alternative_key=Nonemake_export_strategy機能です。それでは、私がやったことはdefault_output_alternative_key='default'を設定するが、その後エラーを得ている:

ValueError: Requested default_output_alternative: default, but available output_alternatives are: [None]

だから、これは何も出力の選択肢が存在しないことを示していると私のモデルは、単一の頭です。ここでは、コードは次のとおりです。

def serving_input_fn(): 
    feature_placeholders = { 
    column['name']: tf.placeholder(dtype=column['dtype'], shape=[None]) 
    for column in columns_list if column['derived'] == 'N' and column['column_role'] != 'label' 
    } 

    features = { 
     key: tf.expand_dims(tensor, -1) 
     for key, tensor in feature_placeholders.items() 
    } 

    return InputFnOps(
     features=features, 
     labels=None, 
     default_inputs=feature_placeholders 
    ) 

def get_experiment_fn(args): 
    def _experiment(run_config, hparams): 
     return Experiment(
      estimator=TensorForestEstimator(
       params=ForestHParams(
        num_trees=args.num_trees, 
        max_nodes=10000, 
        min_split_samples=2, 
        num_features=7, 
        num_classes=args.num_projections, 
        regression=True 
       ), 
       model_dir=args.job_dir, 
       graph_builder_class=RandomForestGraphs, 
       config=run_config, 
       report_feature_importances=True, 
      ), 
      train_input_fn=get_input_fn(
       project_name=args.project, 
       data_location=args.train_data, 
       dataset_size=args.train_size, 
       batch_size=args.train_batch_size 
      ), 
      train_steps=args.train_steps, 
      eval_input_fn=get_input_fn(
       project_name=args.project, 
       data_location=args.eval_data, 
       dataset_size=args.eval_size, 
       batch_size=args.eval_batch_size 
      ), 
      eval_steps=args.eval_steps, 
      eval_metrics=get_eval_metrics(), 
      export_strategies=[ 
       make_export_strategy(
        serving_input_fn, 
        default_output_alternative_key=None, 
        exports_to_keep=1 
       ) 
      ] 
     ) 
    return _experiment 


def main(): 
    args = get_arg_parser().parse_args() 

    learn_runner.run(
     experiment_fn=get_experiment_fn(args), 
     run_config=RunConfig(model_dir=args.job_dir), 
     hparams=HParams(**args.__dict__) 
    ) 

if __name__ == '__main__': 
    main() 

エラーNone has type NoneType, but expected one of: bytes, unicodeの原因とどのように私は私のモデルを提供することができますので、私はそれを解決しないとは何ですか?

答えて

0

これはバグで、tensorflow 1.3に修正されています。可能であれば、1.3にアップグレードすることをお勧めします。アップグレード後、このコードが適切に動作することがわかります。

簡潔に言えば、問題は、keys_nameのパラメータがTensorForestEstimatorで、Noneと残っているため、モデルがヘッドを受け取らないためです。モデルは単頭ではないので、グラフはエクスポートできません。

関連する問題