Я пытаюсь запустить демонстрационную сверточную нейронную сеть из примеров кода в книге ПРАКТИЧЕСКИЕ СВОБОДНЫЕ НЕЙРОННЫЕ СЕТИ, автор Sewak, et.и др.Это простой классификатор собак / кошек, использующий Tensorflow.Проблема в том, что я запускаю этот код Tensorflow в блокноте Jupyter, и ядро продолжает умирать, когда я выполняю код, чтобы начать обучение сети.Я не был уверен, была ли это проблема с ноутбуком, или в демо-коде чего-то не хватало, или это известная проблема, и я не должен тренироваться в ноутбуке jupyter?
Итак, позвольте мне рассказать немного подробнее об окружающей среде.У меня есть док-контейнер, в котором установлены Tensorflow GPU, Keras и другие библиотеки CUDA.У меня есть 3 графических процессора на моем компьютере.Внутри контейнера есть установка Miniconda,
, так что я могу загружать и запускать ноутбуки и т. Д.
Вот несколько моих мыслей, которые могли привести к смерти ядра Python 3.6 для ноутбуков.,
- Я не указал конкретно, какой GPU будет использоваться в коде Tensorflow.
- Возможно, возникла проблема, когда память в контейнере теперь может расти (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)))))