MemoryError: невозможно выделить MiB для массива с формой и типом данных при использовании anymodel.fit () в sklearn - PullRequest
0 голосов
/ 10 июля 2020

Получение этой ошибки памяти. Но книга / ссылка, по которой я следую, не получают этой ошибки.

Часть кода:

from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier()
sgd_clf.fit(x_train, y_train)

Ошибка: MemoryError: Unable to allocate 359. MiB for an array with shape (60000, 784) and data type float64

Я также получаю это ошибка, когда я пытаюсь масштабировать данные с помощью StandardScaler fit_transfrom

Но отлично работает в обоих случаях, если я уменьшаю размер обучающего набора (что-то вроде: x_train[:1000], y_train[:1000])

Ссылка для код в книге здесь . Ошибка, которую я получаю, находится в строках 60 и 63 (In [60] и In [63])

Книга: Aurélien Géron - Практическое машинное обучение с помощью Scikit-Learn Keras и Tensorflow 2nd Ed (Страница: 149 / 1130)

Итак, вот мой вопрос:

Это как-то связано с моим бараном? а что значит "Невозможно выделить 359"? это размер памяти?

На всякий случай мои характеристики: CPU - ryzen 2400g, ram - 8gb (3,1 ГБ бесплатно при использовании ноутбука jupyter)

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Сообщение прямое, да, оно связано с доступной памятью.

359 MiB = 359 * 2 ^ 20 байт = 60000 * 784 * 8 байт

где MiB = Мебибайт = 2 ^ 20 байт, 60000 x 784 - это размеры вашего массива, а 8 байтов - это размер float64.

Возможно, свободная память в 3,1 ГБ очень фрагментирована, и это невозможно выделить 359 Мбайт одним блоком?

В этом случае может помочь перезагрузка.

0 голосов
/ 04 сентября 2020

Обновление python -64 бит, похоже, решило всю проблему «Ошибка памяти».

...