我有分裂np的问题。数组和列表分为两个。这是我的代码:
X = []
y = []
for seq, target in ConvertedData:
X.append(seq)
y.append(target)
y = np.vstack(y)
train_x = np.array(X)[:int(len(X) * 0.9)]
train_y = y[:int(len(X) * 0.9)]
validation_x = np.array(X)[int(len(X) * 0.9):]
validation_y = y[int(len(X) * 0.9):]
这是为神经网络准备数据的代码示例。工作得很好,但会产生“内存不足错误”(我的机上有32GB):
Traceback (most recent call last):
File "D:/Projects/....Here is a file location.../FileName.py", line 120, in <module>
validation_x = np.array(X)[int(len(X) * 0.9):]
MemoryError
它似乎保留在内存列表X和np.array y中,并将其复制为单独的variablest train_x,train_y,validation_x,validation_y。你知道怎么处理这个吗?
X的形状:(324000,256,24)
形状y:(324000,10)
train_x的形状:(291600,256,24)
train_y的形状:(291600,10)
validation_x的形状:(32400,256,24)
validation_y的形状:(32400,10)
X = []
y = []
for seq, target in ConvertedData:
X.append(seq)
y.append(target)
X
是seq
的名单。我假设那些是数组。 X
只是指向那些,
y = np.vstack(y)
train_x = np.array(X)[:int(len(X) * 0.9)]
从X
创建一个数组,然后是该数组的一部分。完整的np.array(X)
仍然存在于记忆中
train_y = y[:int(len(X) * 0.9)]
validation_x = np.array(X)[int(len(X) * 0.9):]
从X
制作另一个数组。 train_x
和validation_x
是单独数组的视图。
validation_y = y[int(len(X) * 0.9):]
干
X1 = np.array(X)
train_x = X1[:...]
validation_x = X1[...:]
将消除这种重复。两者都是相同的X1
的意见。
另一种方法是首先对列表进行切片:
train_x = np.array(X[:...])
validation_x = np.array(X[...:])
我的猜测是内存使用,至少与数组中的内存使用类似。
在创建del X
之后X1
也可能有所帮助,允许X
和它引用的数组被垃圾收集。
但要注意,一旦你开始在代码中的某一点出现内存错误,这样的技巧可能会推迟它。计算很容易最终制作出相当大小的副本或临时缓冲区。
你的分裂使用2片;这会导致视图无法添加到原始内存使用中。但是如果你进行了混乱分割,那么列车和验证部件将是副本,并且一起占用与源相同的内存。
正如qazxsw poi中所描述的那样你可以挑选每一组训练数据来归档qazxsw poi
您可以通过answer of memory errors.进行拆分,这可能是执行拆分的更有效方式。
like in this question.