MemoryError:在 sklearn 中使用 anymodel.fit() 时,无法为具有形状和数据类型的数组分配 MiB

Red*_*nob 6 python machine-learning scikit-learn

得到这个内存错误。但是我正在关注的书/链接没有收到此错误。

部分代码:

from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier()
sgd_clf.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)

错误: 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 进行机器学习实践第二版(页数:149 / 1130)

所以这是我的问题:

这和我的ram有关系吗?“无法分配 359”是什么意思?是内存大小吗?

以防万一我的规格:CPU - ryzen 2400g ,ram - 8gb(使用 jupyter notebook 时免费 3.1gb)

sns*_*sns 7

该消息很简单,是的,它与可用内存有关。

359 MiB = 359 * 2^20 字节 = 60000 * 784 * 8 字节

其中 MiB = Mebibyte = 2^20 字节,60000 x 784 是数组的尺寸,8 字节是 float64 的大小。

也许 3.1gb 可用内存非常碎片化,不可能一次性分配 359 MiB?

在这种情况下,重新启动可能会有所帮助。


Red*_*nob 7

升级python-64位似乎解决了所有“内存错误”问题。

  • 我使用的是64位,出现了这个问题。这个答案不正确 (14认同)