Я получал странные ошибки памяти, поэтому я добавил функцию для контроля использования памяти.
Это мой код:
import pickle, psutil, os, gc
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization
from tensorflow.keras import callbacks, optimizers, backend
def print_memory_status():
# Print the amount of RAM used by the process in gigabytes
print(psutil.Process(os.getpid()).memory_info().rss * 0.00000001)
def run(train_x, train_y):
model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(LSTM(128))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(3, activation='softmax'))
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=optimizers.Adam(lr=0.001, decay=1e-6),
metrics=['accuracy']
)
model.fit(
train_x, train_y,
batch_size=batch_size,
epochs=5,
)
backend.clear_session()
del model
gc.collect()
def main():
train_x = pickle.load(open("train_x.pickle", 'rb'))
train_y = pickle.load(open("train_y.pickle", 'rb'))
print_memory_status()
for _ in range(5):
run(train_x, train_y)
print_memory_status()
main()
Я получаю этот вывод:
0.261394432
2.304380928
2.412531712
2.497695744
2.582204416
2.667970560
но из-за строк:
backend.clear_session()
del model
del opt
gc.collect()
Я не ожидал бы увеличения использования памяти или, по крайней мере, получения небольших положительных и отрицательных изменений, которые суммируются, что не приведет к увеличению памяти с течением времени. Я надеюсь, что что-то упустил, но я все еще не понял.
Кроме того, я заметил, что если я удалю все из функции run()
, кроме model = Sequential()
и первого model.add()
линия, так что функция:
def run(train_x, train_y):
model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
backend.clear_session()
del model
gc.collect()
Я все еще получаю увеличивающееся использование памяти, хотя и намного медленнее, вероятно, из-за меньшего количества слоев.
Настройка:
-RAM: 12Gb (2x XMS, 1x Vengeance)
-GPU: 6Gb (GeForce GTX 1060)
-OS: Ubuntu 18.04 64x
-Nvidia драйвер: 430.26
Среда:
-Виртуальная среда Anaconda
-Pyhton 3.7.5 (64bit)
-CUDA Toolkit 10.0.130
-CuDNN 7.6.4
-Tensorflow GPU 2.0.0