2017-12-22 12 views
2

TF1.4はケーラーを不可欠な部品にしました。 propratery入力関数(つまり、tf.estimator.inputs.numpy_input_fnを使用しない)でKerasモデルからEstimatorを作成しようとすると、TensorflowはInput関数でモデルを融合できないため、機能しません。Tensorflow:ケラス、エスティメーターおよびカスタム入力機能

私はtf.keras.estimator.model_to_estimator

keras_estimator = tf.keras.estimator.model_to_estimator(
      keras_model = keras_model, 
      config = run_config) 

train_spec = tf.estimator.TrainSpec(input_fn=train_input_fn, 
            max_steps=self.train_steps) 
eval_spec = tf.estimator.EvalSpec(input_fn=eval_input_fn, 
            steps=None) 

tf.estimator.train_and_evaluate(keras_estimator, train_spec, eval_spec) 

を使用していると私は、次のエラーメッセージが出ます:不思議なことにその中に隠された(私はこのトピックhereのためのいくつかの参照を見つけ

Cannot find %s with name "%s" in Keras Model. It needs to match ' 
       'one of the following: 

をマスターブランチのTFドキュメント - thisと比較してください)

同じ問題がある場合 - 下記の私の答えをご覧ください。数時間節約できます。

答えて

1

だからここで取り上げる。カスタム入力関数が{inputs}の辞書と{outputs}の辞書を返すようにする必要があります。 辞書キーは、Kerasの入出力レイヤー名と一致する必要があります。 TFのドキュメントから

まず、Kerasモデルの入力名(複数可)を回復するので、我々は推定入力機能の 機能カラム名(複数可)としてそれらを使用することができます

これは正しいです。あなたが名前を持っていることを、あなたはあなた自身の入力機能に移動し、それが対応する入力と出力の名前を持つ2つの辞書をお届けしますので、それを変更する必要があり、今

# Get inputs and outout Keras model name to fuse them into the infrastructure. 
keras_input_names_list = keras_model.input_names 
keras_target_names_list = keras_model.output_names 

:ここに は、私がこれをしたかです。

私の例では、変更の前に、入力関数が[image_batch]、[label_batch]を返しました。これはinputfnが辞書ではなくリストを返すと述べられているため、基本的にはバグです。この問題を解決するには

は、私たちは辞書にそれをラップする必要があります。

image_batch_dict = dict(zip(keras_input_names_list , [image_batch])) 
label_batch_dict = dict(zip(keras_target_names_list , [label_batch])) 

今だけ、TFはKeras入力層への入力機能を接続することができます。

関連する問題