#tensorflow #keras #memory-leaks
#tensorflow #keras #утечки памяти
Вопрос:
Я пытаюсь решить упражнение из книги по машинному обучению, в котором классификатор должен быть обучен набору данных cifar10 с использованием tensorflow и keras. Я приложил пример кода. Код выполняется в записной книжке Jupyter внутри PyCharm.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import time
import os
import tensorflow as tf
from tensorflow import keras
tf.random.set_seed(42)
np.random.seed(42)
def build_model():
# Build a model as instructed
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=[32, 32, 3]))
for i in range(20):
model.add(keras.layers.Dense(100,
activation=keras.activations.elu,
kernel_initializer=tf.keras.initializers.HeNormal))
model.add(keras.layers.Dense(10, activation=keras.activations.softmax))
return model
model = build_model()
# Load the CIFAR10 image dataset
cifar10 = keras.datasets.cifar10.load_data()
X_train = cifar10[0][0] / 255.
X_test = cifar10[1][0] / 255.
y_train = cifar10[0][1]
y_test = cifar10[1][1]
print(X_train.max())
from sklearn.model_selection import train_test_split
# Split the data
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.1, shuffle= True)
model = build_model()
root_logdir = os.path.join(os.curdir, "my_logs_11-8")
def get_run_logdir():
run_id = time.strftime("run_%Y_%m_%d_%H_%M_%S")
return os.path.join(root_logdir, run_id)
run_logdir = get_run_logdir()
tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)
model.compile(optimizer=keras.optimizers.Nadam(lr=5e-5), loss="sparse_categorical_crossentropy")
history = model.fit(X_train, y_train, epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[tensorboard_cb],
batch_size=32)
Здесь я уже сталкиваюсь с проблемами:
-
Я не могу пройти несколько эпох (10-20), потому что с каждой эпохой процесс python занимает все больше и больше памяти. На моей машине 16 ГБ, из которых 12 ГБ обычно свободны. Когда память заполнена, моя IDE (PyCharm) выходит из строя, и процесс python завершается. Это из-за утечки памяти? Что я могу сделать, чтобы это исправить?
-
Для каждой эпохи keras измеряет предполагаемое время, сколько времени заняла эта эпоха. Однако измеренное время намного меньше, чем время работы на стене (24 с / эпоха против ~ 60 с / эпоха). Книга, за которой я следую, похоже, обеспечивает гораздо более быстрое обучение на гораздо более слабой машине. Как это может быть?
Комментарии:
1. когда я запускал ваш код на colab, он использовал 3 ГБ памяти и не зависал, поэтому я предполагаю, что утечки памяти нет.
2. Я могу подтвердить, что запуск этого на colab работает и для меня. Есть идеи, как моя личная среда на моем компьютере может вызвать эту проблему? Я использую ту же версию tensorflow (2.3.0) и tensorflow.keras (2.4.0), что и colab…
3. Дополнение: запуск кода за пределами Jupyter Notebook также работает нормально. Эта проблема должна быть связана с Jupyter. Есть идеи?