Обходной путь для python MemoryError - PullRequest
0 голосов
/ 11 ноября 2018

Как я могу изменить эту функцию, чтобы сделать ее более эффективной? Я продолжаю получать MemoryError

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

Я вызываю функцию здесь:

x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)

Данные поезда и теста представляют собой набор данных IMDB для анализа настроений, т.е.

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

РЕДАКТИРОВАТЬ: я запускаю это на 64-битной системе Ubuntu с 4 ГБ ОЗУ.

Вот трассировка:

Traceback (most recent call last):

  File "/home/uttam/PycharmProjects/IMDB/imdb.py", line 29, in <module>
    x_test = vectorize_sequences(test_data)
  File "/home/uttam/PycharmProjects/IMDB/imdb.py", line 20, in vectorize_sequences
    results = np.zeros((len(sequences), dimension))
MemoryError

1 Ответ

0 голосов
/ 12 ноября 2018

Ваш массив выглядит как 10k x 10k, что составляет 100 миллионов элементов по 64 бита каждый (потому что dtype по умолчанию - float64). Это 800 миллионов байт, или 763 мегабайта.

Если вы используете float32, это сократит использование памяти пополам:

np.zeros((len(sequences), dimension), dtype=np.float32)

Или, если вы заботитесь только о 0 и 1, это сократит его на 88%:

np.zeros((len(sequences), dimension), dtype=np.int8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...