Ошибка при запуске обучения модели

Рейтинг: 0Ответов: 1Опубликовано: 15.04.2023

При попытке запустить обучение, выдаёт ошибку. Подскажите, что не так?

neuro.py:

import tensorflow as tf
import pickle

answers = []
questions = []

print("1")
with open("dataset.pickle", "rb") as f:
    dataset = pickle.load(f)
    f.close()

print("2")
for i in dataset:
    questions.append(str(i))
    answers.append(str(dataset[i]))

dataset = None

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(32, activation='relu', input_shape=(10000,), name='hidden_layer_1'),
    tf.keras.layers.Dropout(0.2, name='dropout'),
    tf.keras.layers.Dense(10, name='hidden_layer_2')
])


model.compile(
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
    optimizer='Adam', 
    metrics=[ 
        'accuracy', 
        tf.keras.metrics.Precision()
    ]
)


early_stopping = tf.keras.callbacks.EarlyStopping(
    monitor='val_loss',
    patience=2, 
    mode='min', 
    restore_best_weights=True 
)


model_checkpoint = tf.keras.callbacks.ModelCheckpoint(
    filepath='my_model', #
    monitor='val_loss',
    save_best_only=True,
    mode='min'
)


tensorboard = tf.keras.callbacks.TensorBoard(
    log_dir='log', 
)
model.fit(
    questions, 
    answers, 
    epochs=90, 
    batch_size = 8, 
    callbacks = [
        early_stopping,
        tensorboard,
        model_checkpoint
    ]
)

model.save("neuro_model")

Вывод:

1
2
Traceback (most recent call last):
  File "neuro.py", line 56, in <module>
    model.fit(
  File "/usr/local/lib/python3.8/dist-packages/keras/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/usr/local/lib/python3.8/dist-packages/keras/engine/data_adapter.py", line 706, in __init__
    x = np.asarray(x)
numpy.core._exceptions.MemoryError: Unable to allocate 21.8 GiB for an array with shape (1443353,) and data type <U4047

Ответы

▲ 1Принят

Дело в том, что, вы пытаетесь одновременно загрузить в оперативную память слишком большой датасет (21.8 Гб). Вы можете попробовать следующие решения:

  1. Удалить некоторые, например, невалидные данные из датасета
  2. Разделить датасет на часть для обучения и для проверки (train и test)
  3. Убрать произвольную часть датасета
  4. Разделить датасет на несколько частей (например, по 1 Гб) и обучать поочерёдно на каждой части, пока вы не обучите на всём датасете

Подробно о разделении датасетов вы можете почитать в официальной документации tensorflow