2 回答
TA贡献1820条经验 获得超2个赞
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 个切片;这会产生不会增加原始内存使用量的视图。但是,如果您进行混洗拆分,则训练和验证部分将是副本,并且一起占用与源一样多的内存。
TA贡献1818条经验 获得超11个赞
如内存错误的回答中所述。您可以像在这个问题中一样将每个训练数据数组腌制到文件中。
您可以通过train_test_split进行拆分,这可能是执行拆分的更有效方式。
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
添加回答
举报