В моих попытках получить наилучшую возможную контрольную точку после этапа подгонки для моей модели с помощью API Estimator я в итоге использовал tf.train.SessionRunHook, где я ссылаюсь на экземпляр tf.train.Saver, созданный оценщиком, чтобы вручнуюсохранить лучшую контрольную точку, найденную до сих пор в процессе подгонки, в отдельный каталогМое намерение состоит в том, чтобы позволить экземпляру оценщика следовать своему курсу, когда дело доходит до выполнения контрольных точек, но если я найду лучший набор весов, тогда проверьте контрольную точку модели на конкретный каталог.
Вот фрагмент кода, чтобы проиллюстрировать, что у меня естьв виду:
class SessRunHOOK(tf.train.SessionRunHook):
...
def end(self, session):
...
# after each call to estimator.evaluate() if
# the metrics for this model are the best so far
# save the checkpoint to a specific directory like so
saver = session.graph.get_collection('savers')[0]
saver.save(session,
join(best_ckpt_dir, 'ckpt'),
global_step = global_step,
latest_filename = None,
meta_graph_suffix = 'meta',
write_meta_graph = True,
write_state = True,
strip_default_attrs = False)
В функции модели для оценщика экземпляр ловушки передается как аргументам обучающей, так и оценочной ловушки для EstimatorSpec.
Экземпляр оценщика создается и используется следующим образом:Итак:
RUN_CONFIG = tf.estimator.RunConfig(
save_summary_steps = None,
log_step_count_steps = None,
keep_checkpoint_max = 3,
save_checkpoints_steps = TRAIN_STEPS,
session_config = None
)
estimator = tf.estimator.Estimator(
model_fn = model_fn,
params = ESTIMATOR_PARAMS,
model_dir = DUMP_DIR,
config = RUN_CONFIG
)
while True:
estimator.train(train_input_fn, train_steps = TRAIN_STEPS)
estimator.evaluate(eval_input_fn)
В конечном итоге происходит то, что даже если экземпляр оценщика сохраняет не более 3 контрольных точек в model_dir, как указано в конфигурации запуска, вместе с ними он будет накапливать временные метафайлы.Вот скриншот model_dir с этими временными файлами
Единственный способ избавиться от них - перезагрузить систему, обновление графического интерфейса проводника файлов не будет иметь никакого значения, что заставляет меня думать, что в том, как я выполняю контрольные точки, что-то не так, и я был бы признателен, если бы кто-то мог на это указать.трассировка стека:
2018-10-21 04: 07: 10.571642: W tenorflow / core / framework / op_kernel.cc: 1275] Ошибка OP_REQUIRES в save_restore_v2_ops.cc:184: Ресурс исчерпан: / home / m232 /catalinh / модели / orange_juice / DTT / keurig_new_logo_160x160x1_with_negatives / ckpts / model.ckpt-19494.data-00000-оф-00001;Слишком много открытых файлов Traceback (последний вызов был последним): файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py", строка 1278, в _do_callвернуть fn (* args) файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py", строка 1263, в параметрах _run_fn, feed_dict, fetch_list,target_list, run_metadata) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py", строка 1350, в _call_tf_sessionrun run_metadata) tenorflow.python.framework.errors_impl.ResourceExhaustedError: /home/m232/catalinh/models/orange_juice/dtt/keurig_new_logo_160x160x1_with_negatives/ckpts/model.ckpt-19494.data-00000-of-00001;Слишком много открытых файлов [[Узел: save / RestoreV2 = RestoreV2 [dtypes = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _hosthost / »jobреплика: 0 / задача: 0 / устройство: ЦП: 0 "] (_arg_save / Const_0_0, save / RestoreV2 / tenor_names, save / RestoreV2 / shape_and_slices)]] Подсказка: если вы хотите увидеть список распределенных тензоров, когда происходит OOM,добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.
[[Node: save/RestoreV2/_149 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_154_save/RestoreV2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
Подсказка: если вы хотите увидеть список распределенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.
Во времяПри обработке вышеуказанного исключения произошло другое исключение:
Трассировка (последний вызов был последним): файл "/home/m232/.virtualenvs/ml/bin/tensor_dyve", строка 11, в sys.exit (main()) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/TensorDyve/tensor_dyve.py", строка 352, в главном estimator.train (input_fn = train_input_pipe, шаги= TRAIN_STEPS) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 376, в потере поезда = self._train_model (input_fn, hooks, save_listeners) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 1145, в _train_model, возвращает self._train_model_default (input_fn, hooks,saving_listeners)Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 1173, в файле _train_model_default save_listeners) "/home/m232/.virtualenvs/ml / lib / python3.6 / site-packages / tenorflow / python / estimator / estimator.py ", строка 1448, в _train_with_estimator_spec log_step_count_steps = self._config.log_step_count_steps) как mon_sess: файл" /hos/2/2/2/2/2/2/2/2/2/mmeum/mmlu//lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py ", строка 421, в файле MonitoredTrainingSession stop_grace_period_secs = stop_grace_period_secs) Файл" /home/m232/.virtualenvs/ml/lib/itethon3-packages / tenorflow / python / training / monitored_session.py ", строка 832, в init stop_grace_period_secs = stop_grace_period_secs) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py ", строка 555, в init self._sess = _RecoverableSession (self._coordinated_creator) Файл" /home/m232/.virtualenvs/ml/lib/python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 1018, в init _WrappedSession. init (файл self, self._create_session ())" /home / m232 / .virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 1023, в _create_session, возвращают self._sess_creator.create_session () файл" / home / m232 /.virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 712, в файле create_session self.tf_sess = self._session_creator.create_session () (" home / m232 /).virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 483, в файле create_session init_fn = self._scaffold.init_fn)" /home/m232/.virtualenvs/ml/lib / python3.6 / site-packages / tenorflow / python / training / session_manager.py ", строка 281, в config_session config = config) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages / tenorsflow / python / training / session_manager.py ", строка 211, в _restore_checkpoint saver.restore (sess, ckpt.model_checkpoint_path) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/saver.py", строка 1725, для восстановления {self.saver_def.filename_tensor_name: save_path}) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py", строка 877, в run run_metadata_ptr) Файл"/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py", строка 1100, в файле _run feed_dict_tensor, options, run_metadata) "/ home / m232 /.virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / client / session.py ", строка 1272, в _do_run run_metadata) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/client/session.py ", строка 1291, в _do_call поднять тип (e) (node_def, op, message) tenorflow.python.framework.errors_impl.ResourceExhaustedError: / home / m232 / catalinh /модели / orange_juice / DTT / keurig_new_logo_160x160x1_with_negatives / ckpts / model.ckpt-19494.data-00000-оф-00001;Слишком много открытых файлов [[Узел: save / RestoreV2 = RestoreV2 [dtypes = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _hosthost / »jobреплика: 0 / задача: 0 / устройство: ЦП: 0 "] (_arg_save / Const_0_0, save / RestoreV2 / tenor_names, save / RestoreV2 / shape_and_slices)]] Подсказка: если вы хотите увидеть список распределенных тензоров, когда происходит OOM,добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.
[[Node: save/RestoreV2/_149 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_154_save/RestoreV2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
Подсказка: если вы хотите увидеть список распределенных тензоров при возникновении OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.
Причинаопцией 'save / RestoreV2', определенной в: File "/home/m232/.virtualenvs/ml/bin/tensor_dyve", строка 11, в файле sys.exit (main ()) "/home/m232/.virtualenvs/ml / lib / python3.6 / site-packages / TensorDyve / tenor_dyve.py ", строка 352, в основномФайл estimator.train (input_fn = train_input_pipe, steps = TRAIN_STEPS) "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 376, в поездеФайл loss = self._train_model (input_fn, hooks, save_listeners) "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 1145, в _train_modelвернуть файл self._train_model_default (input_fn, hooks, Saving_Listeners) "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 1173, в _train_modelistener) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", строка 1448, в _train_with_estimator_spec log_step_count_steps = self._config_c_set_setup_log_log_steps: self.__config.logФайл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка 421, в MonitoredTrainingSession stop_grace_period_secs = stop_grace_period_secs) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка 832, в init stop_grace_period_secs = stop_grace_period_secs)Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка 555, в init self._sess = _RecoverableSession (self._coordinated_creator) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка 1018, в init _WrappedSession. init (self, self._create_session ()) Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка1023, в _create_session вернуть файл self._sess_creator.create_session () "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py", строка 712, в create_sessionФайл self.tf_sess = self._session_creator.create_session () "/ home /m232 / .virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 474, в файле create_session self._scaffold.finalize ()" /home/m232/.virtualenvs/ml / lib / python3.6 / site-packages / tenorflow / python / training / monitored_session.py ", строка 214, в файле finalize self._saver.build ()" /home/m232/.virtualenvs/ml/lib/python3.6 / site-packages / tenorflow / python / training / saver.py ", строка 1293, в сборке self._build (self._filename, build_save = True, build_restore = True) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/saver.py ", строка 1330, в файле _build build_save = build_save, build_restore = build_restore)" /home/m232/.virtualenvs/ml/lib/python3.6 / site-packages / tenorflow / python / training / saver.py ", строка 772, в _build_internal restore_sequentially, изменить форму) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/training/saver.py ", строка 450, в _AddShardedRestoreOps name =" restore_shard ")) Файл" /home/m232/.virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / training / saver.py ", строка 397, в _AddRestoreOps restore_sequentially) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages / tenorflow / python / training / saver.py ", строка 829, в параметре bulk_restore вернуть io_ops.restore_v2 (имя_файла_nameor, имена, фрагменты, dtypes) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/ops/gen_io_ops.py ", строка 1463, в restore_v2 shape_and_slices = shape_and_slices, dtypes = dtypes, name = name) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py ", строка 787, в _apply_op_helper op_def = op_def) Файл" /home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py ", строка 454, в new_func return func (* args, ** kwargs)Файл "/home/m232/.virtualenvs/ml/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", строка 3155, в файле create_op op_def = op_def) "/ home / m232 /.virtualenvs / ml / lib / python3.6 / site-packages / tenorflow / python / framework / ops.py ", строка 1717, в init self._traceback = tf_stack.extract_stack ()
ResourceExhaustedError (см. Выше для отслеживания): /home/m232/catalinh/models/orange_juice/dtt/keurig_new_logo_160x160x1_with_negatives/ckpts/model.ckpt-19494.data-00000-of-00001;Слишком много открытых файлов [[Узел: save / RestoreV2 = RestoreV2 [dtypes = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _hosthost / »jobреплика: 0 / задача: 0 / устройство: ЦП: 0 "] (_arg_save / Const_0_0, save / RestoreV2 / tenor_names, save / RestoreV2 / shape_and_slices)]] Подсказка: если вы хотите увидеть список распределенных тензоров, когда происходит OOM,добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.
[[Node: save/RestoreV2/_149 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_154_save/RestoreV2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
Подсказка: если вы хотите увидеть список распределенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для информации о текущем распределении.