1 回答

TA貢獻1789條經驗 獲得超8個贊
好的,我知道它是如何工作的。最簡單的解決方案是使用生成器:
from random import shuffle
def data_generator(x_vals, y_vals):
inds = list(range(x_vals.shape[0]))
shuffle(inds)
for ind in inds:
yield (x_vals[ind, :].todense(), y_vals[ind])
然后使用該生成器生成適合的 x 值:
model.fit(data_generator(x_vals, y_vals))
但是它非常慢。此外,您一次只能訓練一個 epoch,并且 keras 有很多功能您無法使用。也可能是 tensorflow.keras.utils.Sequence:
class SparseSequence(tf.keras.utils.Sequence):
def __init__(self, x_vals, y_vals, batch_size = 32):
self.x_vals = x_vals
self.y_vals = y_vals
self.inds = list(range(x_vals.shape[0]))
shuffle(self.inds)
self.batch_size = batch_size
def __getitem__(self, item):
from_ind = self.batch_size * item
to_ind = self.batch_size * (item + 1)
return (self.x_vals[self.inds[from_ind:to_ind], :].todense(),
y_vals[self.inds[from_ind:to_ind]])
def on_epoch_end(self):
shuffle(self.inds)
def __len__(self):
return math.ceil(self.x_vals.shape[0] / self.batch_size)
然后在擬合函數中使用它:
model.fit(SparseSequence(x_vals, y_vals))
請記住,需要首先將數據轉換為 scipy csr 稀疏矩陣,否則代碼將不起作用。還要記住不要在 Model.fit() 中使用“y”關鍵字。
添加回答
舉報