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

Tensorflow Keras自定义数据生成器非常慢,tensorflow,keras,deep-learning,autoencoder,Tensorflow,Keras,Deep Learning,Autoencoder,我正在使用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(le

我正在使用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_发生器:

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给出了2到3小时的预计到达时间。在没有定制生成器的情况下进行测试,内存中只需要少量数据,每个历元的预计到达时间为20到30分钟

关于PC规格的见解:

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

尝试的解决方案:
workers=8
添加到fit generator中,时间稍微缩短了一点,但仍然没有达到预期的fit\u generator()函数似乎有问题,因此您应该使用
fit()

您还可以尝试通过以下方式禁用急切执行:

tf.compat.v1.disable_eager_execution()

讨论了这个问题。

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

您还可以尝试通过以下方式禁用急切执行:

tf.compat.v1.disable_eager_execution()

这个问题已经讨论过了。

我也面临同样的问题。你找到解决方法了吗?如果你使用自定义生成器,基本上没有解决方法。在让模型在低硬件上运行和将数据输入生成器的速度之间,您必须接受一种折衷,后者还取决于外部因素,如硬盘上发生的I/O速度。我花了很多时间搜索这个。我没有尝试的唯一解决方案是使用
use\u multiprocessing=True
。当时,该标志在Windows上无法正常工作。你现在可以试一试,如果情况好转,请告诉我;)我也面临同样的问题。你找到解决方法了吗?如果你使用自定义生成器,基本上没有解决方法。在让模型在低硬件上运行和将数据输入生成器的速度之间,您必须接受一种折衷,后者还取决于外部因素,如硬盘上发生的I/O速度。我花了很多时间搜索这个。我没有尝试的唯一解决方案是使用
use\u multiprocessing=True
。当时,该标志在Windows上无法正常工作。你现在可以试一试,如果情况好转,请告诉我;)