我有 2 个保存的 .npy 文件:
X_train - (18873, 224, 224, 3) - 21.2GB
Y_train - (18873,) - 148KB
X_train 是猫和狗的图像(猫在第一半,狗在第二半,未打乱),并用 Y_train 映射为 0 和 1。因此 Y_train 是 [1,1,1,1,1,1,.... .....,0,0,0,0,0,0]。
我想随机导入 X 中的 256 张图像(猫和狗图像均占近 50-50%)及其在 Y 中的映射。由于数据很大,我无法在我的 RAM 中导入 X_train。
因此我尝试了(第一种方法):
import numpy as np
np.random.seed(666555)
X_train = np.load('Processed/X_train.npy', mmap_mode='r')
X = np.random.shuffle(X_train)
X = X[:256, :, :, :]
Y_train = np.load('Processed/Y_train.npy', mmap_mode='r')
Y = np.random.shuffle(Y_train)
Y = Y[:256]
这给出了以下错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-68-8b2a13921b8d> in <module>
2 np.random.seed(666555)
3 X_train = np.load('Processed/X_train.npy', mmap_mode='r')
----> 4 X = np.random.shuffle(X_train)
5 X = X[:256, :, :, :]
6 Y_train = np.load('Processed/Y_train.npy', mmap_mode='r')
mtrand.pyx in numpy.random.mtrand.RandomState.shuffle()
mtrand.pyx in numpy.random.mtrand.RandomState.shuffle()
ValueError: assignment destination is read-only
我也尝试过(第二种方法):
import numpy as np
np.random.seed(666555)
X = np.memmap('Processed/X_train.npy', 'float64', shape = (256, 224, 224, 3), mode = 'c')
Y = np.memmap('Processed/Y_train.npy', 'float64', shape = (256), mode = 'c')
X = np.random.shuffle(X)
Y = np.random.shuffle(Y)
print(X)
print(Y)
这输出:
None
None
在第二种方法中,我将只获得猫图像,因为 np.memmap 将仅收集第 256 张图像。那么洗牌就没有用了。
请告诉我如何用任何方法做到这一点。