【发布时间】:2019-09-17 04:44:01
【问题描述】:
我正在尝试使用 keras flow_from_directory 来训练模型。但它不会重复
纪元之后的数据(即当所有数据都被迭代时)。我找不到任何
选择这样做。下面是我在训练时生成数据的代码。
例如,如果总图像 = 70
批量大小 = 32
然后在第 1 次和第 2 次迭代中给出 32 张图像,但在第三次迭代中给出 6 张图像。
# data generation from directory without labels
trn = datagen.flow_from_directory(os.path.join(BASE, 'train_gen'),
batch_size=batch_size,
target_size=(inp_shape[:2]),
class_mode=None)
X = trn.next() # getting a batch of data.
我希望数据生成器在数据耗尽后开始重复数据。
实际上我正在尝试训练一个 GAN,其中从 Generator-Model 生成一批图像,然后将其与一批真实图像连接起来,然后传递给 Discriminator-Model 和 GAN-Model 进行训练。我不知道如何在其中使用 fit_generator,代码如下:
def train(self, inp_shape, batch_size=1, n_epochs=1000):
BASE = '/content/gdrive/My Drive/Dataset/GAN'
datagen = ImageDataGenerator(rescale=1./255)
trn_dist = datagen.flow_from_directory(os.path.join(BASE, 'train_gen'),
batch_size=batch_size,
target_size=(inp_shape[:2]),
seed = 1360000,
class_mode=None)
val_dist = datagen.flow_from_directory(os.path.join(BASE, 'test_gen'),
batch_size=batch_size,
target_size=(inp_shape[:2]),
class_mode=None)
trn_real = datagen.flow_from_directory(os.path.join(BASE, 'train_real'),
batch_size=batch_size,
target_size=(inp_shape[:2]),
seed = 1360000,
class_mode=None)
for e in range(n_epochs):
real_images = trn_real.next()
dist_images = trn_dist.next()
gen_images = self.generator.predict(dist_images)
factor = inp_shape[0]/250
gen_res = ndi.zoom(gen_images, (1, factor, factor, 1), order=2)
X = np.concatenate([real_images, gen_res])
y = np.zeros(2*batch_size)
y[:batch_size] = 1.
self.discriminator.trainable = True
self.discriminator.fit(X, y, batch, n_epochs)
self.discriminator.trainable = False
self.model.fit(gen_res, y[:batch_size])
print ('> training --- epoch=%d/%d' % (e, n_epochs))
if e > 0 and e % 2000 == 0:
self.model.save('%s/models/gan_model_%d_.h5'%(BASE, e))
PS:我是 Gans 新手,如果我做错了什么请纠正我。
【问题讨论】:
标签: tensorflow keras deep-learning data-generation