2017-12-22 7 views
2

TF1.4는 Keras를 필수 부품으로 만들었습니다. Propratery 입력 기능 (즉, tf.estimator.inputs.numpy_input_fn을 사용하지 않음)을 사용하여 Keras 모델에서 Estimator를 만들려고하면 Tensorflow가 입력 기능으로 모델을 통합 할 수 없으므로 작동하지 않습니다.Tensorflow : Keras, 견적 및 사용자 정의 입력 기능

나는 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 모델의 입력 이름 (들)을 복구, 그래서 우리는 견적 입력 기능의 기능 열 이름 (들)로 사용할 수 있습니다

이 말이 맞습니다. 당신은 이름을 가지고, 당신은 당신의 자신의 입력 기능으로 이동하고 해당 입력 및 출력 이름을 가진 두 개의 사전을 제공합니다 있도록 변경해야합니다, 지금

# 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 입력 층에 입력 기능을 연결할 수 있습니다.

관련 문제