Я новичок в Keras, Tensorflow, Python и пытаюсь создать модель для личного использования / будущего обучения.Я только начал с Python и придумал этот код (с помощью видео и учебных пособий).Моя проблема в том, что использование Python в моей памяти медленно нарастает с каждой эпохой и даже после создания новой модели.Как только память на 100%, тренировка просто останавливается без ошибок и предупреждений.Я не знаю слишком много, но проблема должна быть где-то в цикле (если я не ошибаюсь).Я знаю о
k.clear.session ()
, но либо проблема не была устранена, либо я не знаю, как интегрировать ее в мой код.У меня есть: Python v 3.6.4, Tensorflow 2.0.0rc1 (версия для процессора), Keras 2.3.0
Это мой код:
import pandas as pd
import os
import time
import tensorflow as tf
import numpy as np
import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization
from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint
EPOCHS = 25
BATCH_SIZE = 32
df = pd.read_csv("EntryData.csv", names=['1SH5', '1SHA', '1SA5', '1SAA', '1WH5', '1WHA',
'2SA5', '2SAA', '2SH5', '2SHA', '2WA5', '2WAA',
'3R1', '3R2', '3R3', '3R4', '3R5', '3R6',
'Target'])
df_val = 14554
validation_df = df[df.index > df_val]
df = df[df.index <= df_val]
train_x = df.drop(columns=['Target'])
train_y = df[['Target']]
validation_x = validation_df.drop(columns=['Target'])
validation_y = validation_df[['Target']]
train_x = np.asarray(train_x)
train_y = np.asarray(train_y)
validation_x = np.asarray(validation_x)
validation_y = np.asarray(validation_y)
train_x = train_x.reshape(train_x.shape[0], 1, train_x.shape[1])
validation_x = validation_x.reshape(validation_x.shape[0], 1, validation_x.shape[1])
dense_layers = [0, 1, 2]
layer_sizes = [32, 64, 128]
conv_layers = [1, 2, 3]
for dense_layer in dense_layers:
for layer_size in layer_sizes:
for conv_layer in conv_layers:
NAME = "{}-conv-{}-nodes-{}-dense-{}".format(conv_layer, layer_size,
dense_layer, int(time.time()))
tensorboard = TensorBoard(log_dir="logs\{}".format(NAME))
print(NAME)
model = Sequential()
model.add(LSTM(layer_size, input_shape=(train_x.shape[1:]),
return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
for l in range(conv_layer-1):
model.add(LSTM(layer_size, return_sequences=True))
model.add(Dropout(0.1))
model.add(BatchNormalization())
for l in range(dense_layer):
model.add(Dense(layer_size, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(2, activation='softmax'))
opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)
# Compile model
model.compile(loss='sparse_categorical_crossentropy',
optimizer=opt,
metrics=['accuracy'])
# unique file name that will include the epoch
# and the validation acc for that epoch
filepath = "RNN_Final.{epoch:02d}-{val_accuracy:.3f}"
checkpoint = ModelCheckpoint("models\{}.model".format(filepath,
monitor='val_acc', verbose=0, save_best_only=True,
mode='max')) # saves only the best ones
# Train model
history = model.fit(
train_x, train_y,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
validation_data=(validation_x, validation_y),
callbacks=[tensorboard, checkpoint])
# Score model
score = model.evaluate(validation_x, validation_y, verbose=2)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
# Save model
model.save("models\{}".format(NAME))
Также я не знаю, если этоВозможно задать 2 проблемы в рамках одного вопроса (я не хочу спамить здесь со своими проблемами, которые любой с любым опытом работы с Python может решить в течение минуты), но у меня также есть проблема с сохранением контрольной точки.Я хочу сохранить только наиболее эффективную модель (1 модель на 1 NN спецификацию - количество узлов / слоев), но в настоящее время она сохраняется после каждой эпохи.Если это неуместно, я могу создать для этого еще один вопрос.
Большое спасибо за любую помощь.