Keras自定义数据生成器非常慢



我正在用Keras自定义数据生成器训练一个自动编码器。数据太大,无法放入内存。

发电机:

class Mygenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return int(np.ceil(len(self.x) / float(self.batch_size)))
def __getitem__(self, idx):
batch_x = self.x[idx * self.batch_size:(idx + 1) * self.batch_size]
batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size]
# read your data here using the batch lists, batch_x and batch_y
x = [np.reshape(np.load(filename),(52,52,1)) for filename in batch_x] # load array and reshape to fit input layer
y = [np.reshape(np.load(filename),(52,52,1)) for filename in batch_y] # load array and reshape to fit input layer
return np.array(x), np.array(y)

型号fit_generator:

XTRAINFILES = glob.glob("C:\x_train\*.npy") 
YTRAINFILES = glob.glob("C:\y_train\*.npy")
XTESTFILES = glob.glob("C:\x_test\*.npy") 
YTESTFILES = glob.glob("C:\y_test\*.npy") 
autoencoder_model.fit_generator(Mygenerator(XTRAINFILES, YTRAINFILES, 128),
epochs=EPOCHES, workers=8, steps_per_epoch=ceil( len(XTRAINFILES) / 128)
validation_data=Mygenerator(XTESTFILES, YTESTFILES, 128),
validation_steps=ceil( len(XTESTFILES) / 128),
callbacks=[tb_output, checkpoint_callback])

Keras给出的ETA在2到3小时之间。在没有自定义生成器的情况下进行测试,只需在内存中放入少量数据,每个历元的ETA为20到30分钟。

关于PC规格的见解:

  • GPU:Geforce RTX 2080 Ti
  • 内存:128 GB

尝试的解决方案:workers = 8添加到拟合生成器中,时间略有改善,但仍不足以接近预期的

fit_generator()函数似乎有问题,所以您应该使用fit()

您也可以尝试使用以下命令禁用热切执行:

tf.compat.v1.disable_eager_execution()

这里讨论这个问题。

相关内容

  • 没有找到相关文章

最新更新