Распределенное обучение Tensorflow не оценивает модель должным образом
Я использую асинхронное распределенное обучение в Tensorflow, используя стратегию сервера параметров. Несколько рабочих на нескольких процессорах с оценщиком в качестве отдельного узла.
Пример tf_config сервера параметров: индекс и тип могут отличаться для руководителя, работника и оценщика в других файлах TF_CONFIG.
TF_CONFIG={
"task": {
"type": "ps",
"index": 0
},
"cluster": {
"chief": ["machine2:2222"],
"worker": ["machine3:2223","machine4:2224"],
"evaluator": ["machine5:2225"],
"ps": ["machine1:2218"]
}
}
def main(unused_argv):
flags.mark_flag_as_required('model_dir')
flags.mark_flag_as_required('pipeline_config_path')
config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir)
train_and_eval_dict = model_lib.create_estimator_and_inputs(
run_config=config,
hparams=model_hparams.create_hparams(FLAGS.hparams_overrides),
pipeline_config_path=FLAGS.pipeline_config_path,
train_steps=FLAGS.num_train_steps,
sample_1_of_n_eval_examples=FLAGS.sample_1_of_n_eval_examples,
sample_1_of_n_eval_on_train_examples=(
FLAGS.sample_1_of_n_eval_on_train_examples))
estimator = train_and_eval_dict['estimator']
train_input_fn = train_and_eval_dict['train_input_fn']
eval_input_fns = train_and_eval_dict['eval_input_fns']
eval_on_train_input_fn = train_and_eval_dict['eval_on_train_input_fn']
predict_input_fn = train_and_eval_dict['predict_input_fn']
train_steps = train_and_eval_dict['train_steps']
if FLAGS.checkpoint_dir:
if FLAGS.eval_training_data:
name = 'training_data'
input_fn = eval_on_train_input_fn
else:
name = 'validation_data'
# The first eval input will be evaluated.
input_fn = eval_input_fns[0]
if FLAGS.run_once:
estimator.evaluate(input_fn,
num_eval_steps=None,
checkpoint_path=tf.train.latest_checkpoint(
FLAGS.checkpoint_dir))
else:
model_lib.continuous_eval(estimator, FLAGS.checkpoint_dir, input_fn, train_steps, name)
else:
train_spec, eval_specs = model_lib.create_train_and_eval_specs(
train_input_fn,
eval_input_fns,
eval_on_train_input_fn,
predict_input_fn,
train_steps,
eval_on_train_data=False)
# Currently only a single Eval Spec is allowed.
tf.estimator.train_and_evaluate(estimator, train_spec, eval_specs[0])
if __name__ == '__main__':
tf.app.run()
Я получаю несколько предупреждений:
W0828 00:03: 55.229441 140490069309248 estimator.py:1924] Модель_fn оценщика (.model_fn в 0x7fc5da9b5268>) включает аргумент params, но параметры не передаются в Оценщик.
./tensorflow/core/grappler/optimizers/graph_optimizer_stage.h:241] Не удалось запустить оптимизатор ArithmeticOptimizer, этап RemoveStackStridedSliceSameAxis Узел препроцессора /ResizeToRange/strided_slice_3. Ошибка: атрибут узла узла (Preprocessor/ResizeToRange/stack_2) выходит за границы:0
Но тренировка проходит нормально и оценка происходит. Но мои результаты оценки равны 0 все время.
создание индекса... индекс создан! создание индекса... индекс создан! Оценка каждого изображения... Оцените тип аннотации bbox DONE (t = 1,66 с). Накопление результатов оценки... СДЕЛАНО (t=0,52 с).
Средняя точность (AP) @[ IoU=0.50:0.95 | площадь = все | maxDets=100 ] = 0,000
Средняя точность (AP) @[ IoU=0.50 | площадь = все | maxDets=100 ] = 0,000
Средняя точность (AP) @[ IoU=0.75 | площадь = все | maxDets=100 ] = 0,000
Средняя точность (AP) @[ IoU=0.50:0.95 | площадь = маленькая | maxDets=100 ] = 0,000
Средняя точность (AP) @[ IoU=0.50:0.95 | площадь = средняя | maxDets=100 ] = 0,000
Средняя точность (AP) @[ IoU=0.50:0.95 | площадь = большая | maxDets=100 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = все | maxDets= 1 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = все | maxDets= 10 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = все | maxDets=100 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = маленькая | maxDets=100 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = средняя | maxDets=100 ] = 0,000
Среднее Напоминание (AR) @[ IoU=0.50:0.95 | площадь = большая | maxDets=100 ] = 0,000
Любая помощь приветствуется. Заранее спасибо.