tenorflow: ядро ​​jupyter умирает при работе Convolutional Network - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь запустить демонстрационную сверточную нейронную сеть из примеров кода в книге ПРАКТИЧЕСКИЕ СВОБОДНЫЕ НЕЙРОННЫЕ СЕТИ, автор Sewak, et.и др.Это простой классификатор собак / кошек, использующий Tensorflow.Проблема в том, что я запускаю этот код Tensorflow в блокноте Jupyter, и ядро ​​продолжает умирать, когда я выполняю код, чтобы начать обучение сети.Я не был уверен, была ли это проблема с ноутбуком, или в демо-коде чего-то не хватало, или это известная проблема, и я не должен тренироваться в ноутбуке jupyter?

enter image description here

Итак, позвольте мне рассказать немного подробнее об окружающей среде.У меня есть док-контейнер, в котором установлены Tensorflow GPU, Keras и другие библиотеки CUDA.У меня есть 3 графических процессора на моем компьютере.Внутри контейнера есть установка Miniconda,, так что я могу загружать и запускать ноутбуки и т. Д.

Вот несколько моих мыслей, которые могли привести к смерти ядра Python 3.6 для ноутбуков.,

  1. Я не указал конкретно, какой GPU будет использоваться в коде Tensorflow.
  2. Возможно, возникла проблема, когда память в контейнере теперь может расти (https://github.com/tensorflow/tensorflow/issues/9829)

Я еще недостаточно знаком с Tensorflow, чтобы по-настоящему знать источник проблемы. Поскольку код выполняется внутри контейнера, обычные средства отладки немного более ограничены.

полный код для обучения находится в репозитории github: https://github.com/PacktPublishing/Practical-Convolutional-Neural-Networks/blob/master/Chapter03/Dog_cat_classification/CNN_DogvsCat_Classifier.py

Вот функция optimize, которая используется для обучения. Теперь убедитесь, что кто-то может увидеть, что какая-то конкретная функция отсутствует.

def optimize(num_iterations):
    # Ensure we update the global variable rather than a local copy.
    global total_iterations

    # Start-time used for printing time-usage below.
    start_time = time.time()

    best_val_loss = float("inf")
    patience = 0

    for i in range(total_iterations, total_iterations + num_iterations):

        # Get a batch of training examples.
        # x_batch now holds a batch of images and
        # y_true_batch are the true labels for those images.
        x_batch, y_true_batch, _, cls_batch = data.train.next_batch(train_batch_size)
        x_valid_batch, y_valid_batch, _, valid_cls_batch = data.valid.next_batch(train_batch_size)

        # Convert shape from [num examples, rows, columns, depth]
        # to [num examples, flattened image shape]

        x_batch = x_batch.reshape(train_batch_size, img_size_flat)
        x_valid_batch = x_valid_batch.reshape(train_batch_size, img_size_flat)

        # Put the batch into a dict with the proper names
        # for placeholder variables in the TensorFlow graph.
        feed_dict_train = {x: x_batch, y_true: y_true_batch}        
        feed_dict_validate = {x: x_valid_batch, y_true: y_valid_batch}

        # Run the optimizer using this batch of training data.
        # TensorFlow assigns the variables in feed_dict_train
        # to the placeholder variables and then runs the optimizer.
        session.run(optimizer, feed_dict=feed_dict_train)        

        # Print status at end of each epoch (defined as full pass through training Preprocessor).
        if i % int(data.train.num_examples/batch_size) == 0: 
            val_loss = session.run(cost, feed_dict=feed_dict_validate)
            epoch = int(i / int(data.train.num_examples/batch_size))

            acc, val_acc = print_progress(epoch, feed_dict_train, feed_dict_validate, val_loss)
            msg = "Epoch {0} --- Training Accuracy: {1:>6.1%}, Validation Accuracy: {2:>6.1%}, Validation Loss: {3:.3f}"
            print(msg.format(epoch + 1, acc, val_acc, val_loss))
            print(acc)
            acc_list.append(acc)
            val_acc_list.append(val_acc)
            iter_list.append(epoch+1)

            if early_stopping:    
                if val_loss < best_val_loss:
                    best_val_loss = val_loss
                    patience = 0
                else:
                    patience += 1
                if patience == early_stopping:
                    break

    # Update the total number of iterations performed.
    total_iterations += num_iterations

    # Ending time.
    end_time = time.time()

    # Difference between start and end-times.
    time_dif = end_time - start_time

    # Print the time-usage.
    print("Time elapsed: " + str(timedelta(seconds=int(round(time_dif)))))
...