Обучение Tensorflow CNN прекращается без причины

#python #tensorflow #neural-network #conv-neural-network

#python #tensorflow #нейронная сеть #conv-нейронная сеть

Вопрос:

У меня есть этот код на Python для обучения CNN с использованием Tensorflow. Это работало отлично, пока я не решил использовать MirroredStrategy для повышения производительности. Затем необходимо было внести некоторые изменения:

  1. Мне пришлось прекратить использование tf.estimator.inputs.numpy_input_fn() поскольку для MirroredStrategy требуется функция ввода, которая возвращает Dataset.
  2. Я в основном скопировал train_input_fn из наборов данных для оценщиков для использования в качестве моей функции ввода

Теперь кажется, что он работает без каких-либо проблем, но он вообще ничего не обучает и через несколько секунд перестает работать без каких-либо ошибок.

Еще несколько деталей:

  1. Я отслеживаю использование моего процессора и графического процессора во время обучения, и когда я запускаю код, частота графического процессора повышается до тех пор, пока программа не остановится.
  2. Я уже пытался изменить размер пакета, но никаких изменений.
  3. Мой графический процессор — GTX 1070, драйвер также был обновлен, и я использую tensorflow-gpu версию 1.12.0 в своей среде

Вывод ядра:

 In [1]: runfile('D:/MS/CNN.py', wdir='D:/MS')
INFO:tensorflow:Initializing RunConfig with distribution strategies.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Using config: {'_model_dir': 'models3', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': <tensorflow.contrib.distribute.python.mirrored_strategy.MirroredStrategy object at 0x0000026729AC1320>, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x0000026729AC14A8>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1, '_distribute_coordinator_mode': None}
INFO:tensorflow:Device is available but not used by distribute strategy: /device:CPU:0
INFO:tensorflow:Configured nccl all-reduce.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:batch_all_reduce invoked for batches size = 16 with algorithm = nccl, num_packs = 1, agg_small_grads_max_bytes = 0 and agg_small_grads_max_group = 10

In [1]:
  

Обучающий код:

 def train_input_fn(features, labels, batch_size):
    # Convert the inputs to a Dataset.
    dataset = tf.data.Dataset.from_tensor_slices((features, labels))
    # Shuffle, repeat, and batch the examples.
    dataset = dataset.shuffle(1000).repeat(count=100).batch(batch_size)
    # Return the dataset.
    return dataset

gpu_distribution = tf.contrib.distribute.MirroredStrategy()
run_config = tf.estimator.RunConfig(train_distribute=gpu_distribution)
classifier = tf.estimator.Estimator(model_fn= cria_rede, config=run_config, model_dir='models3')
classifier.train(input_fn=lambda: train_input_fn(x_data, y_data, 2), steps= 3000)
#x_data and y_data are bidimensional numpy.ndarrays
  

Комментарии:

1. Какую сетевую архитектуру вы используете?

2. @Sharky У меня есть 2 слоя свертки, 2 слоя объединения (convolution, объединение, convolution, pooling), которые загружают глубокий NN с 3072 входами, 5 скрытых слоев по 1024 узла в каждом и выводят 10 узлов. 3072 -> 1024 -> 1024 -> 1024 -> 1024 -> 1024 -> 10 Я не вставлял код для CNN, потому что он работал раньше, поэтому я подумал, что это может быть не проблемой

3. Попробуйте добавить session_config = tf.ConfigProto(allow_soft_placement=True) прямо перед MirroredStrategy

4. @Sharky Я вроде как новичок в Python и Tensorflow, так что простите меня, если я ошибаюсь, но эта конфигурация предназначена для сеанса. верно? Потому что я не использую сеанс в этом коде. Я понимаю, что Estimator.train «создает свой собственный сеанс внутренне». Итак, как мне применить эту конфигурацию?

5. Вы все равно используете session, но Estimator позаботится об этом за вас. но вы можете получить ограниченный доступ к объекту сеанса.