使用 numpy.save 时出现内存错误
MemoryError when using numpy.save
我正在关注 Sentdex 的 Python 玩 GTA V,他在其中编写代码,使用神经网络在游戏中创建自动驾驶汽车。我试图直接跟随他所做的,但是当收集训练数据的时候,我在保存代码几分钟后不断收到 MemoryError。我设法通过保存到多个文件来收集大量数据,但我想合并这些文件。当我 运行 组合文件的代码时,我在使用 numpy.save 时得到相同的 MemoryError。
我有 16 GB 的 RAM,其中大约 10 个是免费的,总文件大小大约为 500 MB。我正在使用 PyCharm 作为我的 IDE。
保存到多个文件然后合并它们是我最初的解决方案,但它导致了同样的错误。
我试图另存为 HDF5 文件,但出现了不同的错误。老实说,我还没有为此付出太多努力,但如果有必要,我愿意将其用作解决方案。
在下一步平衡之前,我还尝试将数据合并到一个数组中,但它只使用了一个文件(数组是 10,000x5,这是每个文件的大小)。
我在 运行 编译代码时检查了内存使用情况,它在保存时崩溃之前只使用了 523 MB。
我还尝试为保存文件的行设置 allow_pickle=True。
我用它创建了一个包含每个文件中所有数据的数组,它似乎工作正常。
import os
import psutil
import h5py
file_name = 'new_training_data.npy'
new_file = []
file_count = 1
while os.path.isfile(file_name):
new_data = list(np.load(file_name, allow_pickle=True))
new_file.append(new_data)
file_name = 'new_training_data' + str(file_count) + '.npy'
file_count += 1
我用它来检查内存使用情况。
# process = psutil.Process(os.getpid())
# print(process.memory_info().rss)
这条线给我带来了问题。
np.save('appended_training_data.npy', new_file)
这是我尝试另存为 HDF5 文件的地方。
# hf = h5py.File('appended_training_data.h5', 'w')
# hf.create_dataset('dataset_1', data=new_data)
# hf.close()
这是我得到的错误。
Traceback (most recent call last):
File "C:/Users/Brian/PycharmProjects/PyGTA/Combine _training_data.py", line 19, in <module>
np.save('appended_training_data.npy', new_file)
File "<__array_function__ internals>", line 6, in save
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\numpy\lib\npyio.py", line 542, in save
pickle_kwargs=pickle_kwargs)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\numpy\lib\format.py", line 659, in write_array
pickle.dump(array, fp, protocol=3, **pickle_kwargs)
MemoryError
这是我尝试另存为 HDF5 时的错误
Traceback (most recent call last):
File "C:/Users/Brian/PycharmProjects/PyGTA/Combine _training_data.py", line 23, in <module>
hf.create_dataset('dataset_1', data=new_data)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\h5py\_hl\group.py", line 136, in create_dataset
dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\h5py\_hl\dataset.py", line 118, in make_new_dset
tid = h5t.py_create(dtype, logical=1)
File "h5py\h5t.pyx", line 1634, in h5py.h5t.py_create
File "h5py\h5t.pyx", line 1656, in h5py.h5t.py_create
File "h5py\h5t.pyx", line 1711, in h5py.h5t.py_create
TypeError: Object dtype dtype('O') has no native HDF5 equivalent
编辑:我将 while 循环更改为此以具有一致的 np 数据结构
while os.path.isfile(file_name):
new_data = np.mat(np.load(file_name, allow_pickle=True))
if len(new_file) == 0:
new_file = new_data
else:
new_file = np.concatenate((new_file, new_data), axis=0)
file_name = 'new_training_data' + str(file_count) + '.npy'
file_count += 1
最终编辑:我使用 Spyder 而不是 PyCharm 解决了这个问题。如果有人能阐明它解决问题的原因,我们将不胜感激。
您将所有内容都存储在 python 列表中这一事实对我来说很奇怪。
我会尝试在 np.mat 中连接所有内容,然后用 np 保存它:
https://numpy.org/doc/1.17/reference/routines.array-manipulation.html#joining-arrays
不要混合 np 和 python 数据结构,除非你知道你很懒惰。
如果您的 RAM 不超过 500MB,那么大小根本不是问题。
我曾经玩过 Gigs 的数据,numpy 没有膨胀,当 Numpy 试图解压 16+GB 的数据使我的 RAM 过载时,我的内核曾经在 Numpy 报告错误之前崩溃。
祝你好运
我正在关注 Sentdex 的 Python 玩 GTA V,他在其中编写代码,使用神经网络在游戏中创建自动驾驶汽车。我试图直接跟随他所做的,但是当收集训练数据的时候,我在保存代码几分钟后不断收到 MemoryError。我设法通过保存到多个文件来收集大量数据,但我想合并这些文件。当我 运行 组合文件的代码时,我在使用 numpy.save 时得到相同的 MemoryError。 我有 16 GB 的 RAM,其中大约 10 个是免费的,总文件大小大约为 500 MB。我正在使用 PyCharm 作为我的 IDE。
保存到多个文件然后合并它们是我最初的解决方案,但它导致了同样的错误。
我试图另存为 HDF5 文件,但出现了不同的错误。老实说,我还没有为此付出太多努力,但如果有必要,我愿意将其用作解决方案。
在下一步平衡之前,我还尝试将数据合并到一个数组中,但它只使用了一个文件(数组是 10,000x5,这是每个文件的大小)。
我在 运行 编译代码时检查了内存使用情况,它在保存时崩溃之前只使用了 523 MB。
我还尝试为保存文件的行设置 allow_pickle=True。
我用它创建了一个包含每个文件中所有数据的数组,它似乎工作正常。
import os
import psutil
import h5py
file_name = 'new_training_data.npy'
new_file = []
file_count = 1
while os.path.isfile(file_name):
new_data = list(np.load(file_name, allow_pickle=True))
new_file.append(new_data)
file_name = 'new_training_data' + str(file_count) + '.npy'
file_count += 1
我用它来检查内存使用情况。
# process = psutil.Process(os.getpid())
# print(process.memory_info().rss)
这条线给我带来了问题。
np.save('appended_training_data.npy', new_file)
这是我尝试另存为 HDF5 文件的地方。
# hf = h5py.File('appended_training_data.h5', 'w')
# hf.create_dataset('dataset_1', data=new_data)
# hf.close()
这是我得到的错误。
Traceback (most recent call last):
File "C:/Users/Brian/PycharmProjects/PyGTA/Combine _training_data.py", line 19, in <module>
np.save('appended_training_data.npy', new_file)
File "<__array_function__ internals>", line 6, in save
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\numpy\lib\npyio.py", line 542, in save
pickle_kwargs=pickle_kwargs)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\numpy\lib\format.py", line 659, in write_array
pickle.dump(array, fp, protocol=3, **pickle_kwargs)
MemoryError
这是我尝试另存为 HDF5 时的错误
Traceback (most recent call last):
File "C:/Users/Brian/PycharmProjects/PyGTA/Combine _training_data.py", line 23, in <module>
hf.create_dataset('dataset_1', data=new_data)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\h5py\_hl\group.py", line 136, in create_dataset
dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
File "C:\Users\Brian\PycharmProjects\PyGTA\venv\lib\site-packages\h5py\_hl\dataset.py", line 118, in make_new_dset
tid = h5t.py_create(dtype, logical=1)
File "h5py\h5t.pyx", line 1634, in h5py.h5t.py_create
File "h5py\h5t.pyx", line 1656, in h5py.h5t.py_create
File "h5py\h5t.pyx", line 1711, in h5py.h5t.py_create
TypeError: Object dtype dtype('O') has no native HDF5 equivalent
编辑:我将 while 循环更改为此以具有一致的 np 数据结构
while os.path.isfile(file_name):
new_data = np.mat(np.load(file_name, allow_pickle=True))
if len(new_file) == 0:
new_file = new_data
else:
new_file = np.concatenate((new_file, new_data), axis=0)
file_name = 'new_training_data' + str(file_count) + '.npy'
file_count += 1
最终编辑:我使用 Spyder 而不是 PyCharm 解决了这个问题。如果有人能阐明它解决问题的原因,我们将不胜感激。
您将所有内容都存储在 python 列表中这一事实对我来说很奇怪。 我会尝试在 np.mat 中连接所有内容,然后用 np 保存它: https://numpy.org/doc/1.17/reference/routines.array-manipulation.html#joining-arrays 不要混合 np 和 python 数据结构,除非你知道你很懒惰。 如果您的 RAM 不超过 500MB,那么大小根本不是问题。 我曾经玩过 Gigs 的数据,numpy 没有膨胀,当 Numpy 试图解压 16+GB 的数据使我的 RAM 过载时,我的内核曾经在 Numpy 报告错误之前崩溃。 祝你好运