2 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
X = []
y = []
for seq, target in ConvertedData:
X.append(seq)
y.append(target)
X是一個(gè)列表seq。我假設(shè)這些是數(shù)組。X只是有指向那些的指針,
y = np.vstack(y)
train_x = np.array(X)[:int(len(X) * 0.9)]
從 制作一個(gè)數(shù)組X,然后是該數(shù)組的一個(gè)切片。完整的np.array(X)仍然存在于內(nèi)存中
train_y = y[:int(len(X) * 0.9)]
validation_x = np.array(X)[int(len(X) * 0.9):]
從 制作另一個(gè)數(shù)組X。 train_x和validation_x是單獨(dú)數(shù)組的視圖。
validation_y = y[int(len(X) * 0.9):]
正在做
X1 = np.array(X)
train_x = X1[:...]
validation_x = X1[...:]
將消除這種重復(fù)。兩者觀點(diǎn)相同X1。
另一種方法是先對(duì)列表進(jìn)行切片:
train_x = np.array(X[:...])
validation_x = np.array(X[...:])
我的猜測(cè)是內(nèi)存使用,至少與在數(shù)組中會(huì)相似。
del X創(chuàng)建之后X1可能也有幫助,允許X對(duì)其引用的數(shù)組進(jìn)行垃圾收集。
但請(qǐng)注意,一旦您在代碼中的某一點(diǎn)開始遇到內(nèi)存錯(cuò)誤,像這樣的技巧可能會(huì)推遲它。計(jì)算很容易最終制作出大小相當(dāng)?shù)母北净蚺R時(shí)緩沖區(qū)。
您的拆分使用 2 個(gè)切片;這會(huì)產(chǎn)生不會(huì)增加原始內(nèi)存使用量的視圖。但是,如果您進(jìn)行混洗拆分,則訓(xùn)練和驗(yàn)證部分將是副本,并且一起占用與源一樣多的內(nèi)存。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
如內(nèi)存錯(cuò)誤的回答中所述。您可以像在這個(gè)問題中一樣將每個(gè)訓(xùn)練數(shù)據(jù)數(shù)組腌制到文件中。
您可以通過train_test_split進(jìn)行拆分,這可能是執(zhí)行拆分的更有效方式。
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)
添加回答
舉報(bào)