gpt4 book ai didi

Python : Numpy memory error on creating a 3d array. 什么是填充 3d 数组的更好方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:43 29 4
gpt4 key购买 nike

我正在制作一个由零组成的 3d 数组,然后填充它。但是,由于 numpy 数组的大小,即使使用 64 GB 内存,它也会遇到内存问题。我做错了吗?

X_train_one_hot shape is (47827, 30, 20000) and encInput is of shape (47827, 30, 200)

X_train_one_hot_shifted = np.zeros((X_train_one_hot.shape[0], 30, 20200))
#X_train_one_hot.shape[0] = 48000
for j in range(0, X_train_one_hot.shape[0]):
current = np.zeros((30, 20000))
current[0][0] = 1

current[1:] = X_train_one_hot[j][0:29]
# print(current.shape, encInput[i].shape)
combined = np.concatenate((current,encInput[j]), axis=1)

X_train_one_hot_shifted[j] = combined

有什么减少内存消耗的想法吗?另一件有趣的事情是,因为 X_train_one_hot 的形状也几乎相同,但这不会引发任何错误。

编辑:程序在 for 循环中被杀死,错误消息为:

TERM_MEMLIMIT: job killed after reaching LSF memory usage limit.

此外,由于 X_train_one_hot 是一个 20000 大小的 one_hot 编码,因此数组的大部分内容都是稀疏的

最佳答案

Imtinan Azhar 是正确的。您只是没有足够的 RAM 来容纳数组。

您有几个选择。

1) 尽管尺寸很大,但您的矩阵似乎非常稀疏。所以你可以尝试使用 sparse matrix representation 之一来自 Scipy。

如果您将数组放入库包中,例如 Scikit-Learn 或其中一个深度学习库,这可能不起作用。

2) 大多数深度学习库不需要您一次加载所有数据。您可以批量准备数据 - 批量创建此矩阵并将其保存到文件中(最好使用稀疏矩阵表示)。然后使用数据生成器为您的算法提供数据,或手动为您的算法批量加载数据。

3) 如果这些都不可行,那么您可以尝试使用 Numpy 的 memmap 来内存映射数组。 .可以找到更多示例 here .

4) 另一种选择是使用 dask并在必要时手动获取数据切片。

就个人而言,如果采用矩阵的算法可以处理(或修改为处理)稀疏矩阵,我会选择选项 2 或 1。

关于Python : Numpy memory error on creating a 3d array. 什么是填充 3d 数组的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923021/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com