2016-09-07 2 views
0

Я использую следующий код для регистрации точности в качестве меры проверки (TensorFlow 0,10):Ошибка в «ValidationMonitor» при переходе параметра «Метрики»

validation_metrics = {"accuracy": tf.contrib.metrics.streaming_accuracy} 
    validation_monitor = tf.contrib.learn.monitors.ValidationMonitor(
         input_fn=input_fn_eval, 
         every_n_steps=FLAGS.eval_every, 
         # metrics=validation_metrics, 
         early_stopping_rounds=500, 
         early_stopping_metric="loss", 
         early_stopping_metric_minimize=True) 

После запуска, в «every_n_steps», я вижу следующие строки в выводе:

INFO:tensorflow:Validation (step 1000): loss = 1.04875, global_step = 900 

проблема в том, что, когда «метрики = validation_metrics» параметр раскомментируйте в приведенном выше коде, я получаю следующее сообщение об ошибке в фазе проверки:

INFO:tensorflow:Error reported to Coordinator: <type 'exceptions.TypeError'>, Input 'y' of 'Equal' Op has type int64 that does not match type float32 of argument 'x'. 
E tensorflow/core/client/tensor_c_api.cc:485] Enqueue operation was cancelled 
    [[Node: read_batch_features_train/file_name_queue/file_name_queue_EnqueueMany = QueueEnqueueMany[Tcomponents=[DT_STRING], _class=["loc:@read_batch_features_train/file_name_queue"], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](read_batch_features_train/file_name_queue, read_batch_features_train/file_name_queue/RandomShuffle)]] 
E tensorflow/core/client/tensor_c_api.cc:485] Enqueue operation was cancelled 
    [[Node: read_batch_features_train/random_shuffle_queue_EnqueueMany = QueueEnqueueMany[Tcomponents=[DT_STRING, DT_STRING], _class=["loc:@read_batch_features_train/random_shuffle_queue"], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](read_batch_features_train/random_shuffle_queue, read_batch_features_train/read/ReaderReadUpTo, read_batch_features_train/read/ReaderReadUpTo:1)]] 
Traceback (most recent call last): 
    File "udc_train.py", line 74, in <module> 
    tf.app.run() 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run 
    sys.exit(main(sys.argv)) 
    File "udc_train.py", line 70, in main 
    estimator.fit(input_fn=input_fn_train, steps=None, monitors=[validation_monitor]) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 240, in fit 
    max_steps=max_steps) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 578, in _train_model 
    max_steps=max_steps) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/graph_actions.py", line 280, in _supervised_train 
    None) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/supervised_session.py", line 270, in run 
    run_metadata=run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/recoverable_session.py", line 54, in run 
    run_metadata=run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/coordinated_session.py", line 70, in run 
    self._coord.join(self._coordinated_threads_to_join) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/coordinator.py", line 357, in join 
    six.reraise(*self._exc_info_to_raise) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/coordinated_session.py", line 66, in run 
    return self._sess.run(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/monitored_session.py", line 107, in run 
    induce_stop = monitor.step_end(monitors_step, monitor_outputs) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/monitors.py", line 396, in step_end 
    return self.every_n_step_end(step, output) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/monitors.py", line 687, in every_n_step_end 
    steps=self.eval_steps, metrics=self.metrics, name=self.name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 356, in evaluate 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 630, in _evaluate_model 
    eval_dict = self._get_eval_ops(features, targets, metrics) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 877, in _get_eval_ops 
    result[name] = metric(predictions, targets) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/metrics/python/ops/metric_ops.py", line 432, in streaming_accuracy 
    is_correct = math_ops.to_float(math_ops.equal(predictions, labels)) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 708, in equal 
    result = _op_def_lib.apply_op("Equal", x=x, y=y, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 468, in apply_op 
    inferred_from[input_arg.type_attr])) 
TypeError: Input 'y' of 'Equal' Op has type int64 that does not match type float32 of argument 'x'. 

ответ

1

Это похоже на проблему с вашим input_fn и вашей оценкой, которые возвращают разные типы для метки.

+0

[input_fn] (https://github.com/dennybritz/chatbot-retrieval/blob/master/udc_inputs.py#L20) возвращает функцию int64 для метки. Как проверить возвращаемое значение [оценки] (https://github.com/dennybritz/chatbot-retrieval/blob/master/models/dual_encoder.py)? – AmirHJ

+0

Это то, что вы определили как свою функцию прогнозирования в вашей оценке. –

Смежные вопросы