gpt4 book ai didi

tensorflow - 如何在 Keras 中使用 flow_from_directory 重复数据

转载 作者:行者123 更新时间:2023-12-04 00:24:40 25 4
gpt4 key购买 nike

我正在尝试使用 keras flow_from_directory 训练模型。但它不会重复
epoch 之后的数据(即当所有数据都被迭代时)。我找不到任何
选择这样做。下面是我在训练时生成数据的代码。
例如,如果总图像 = 70
批量大小 = 32
然后在第一次和第二次迭代中给出 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:我是甘斯的新手,如果我做错了什么,请纠正我。

最佳答案

为了解决这个问题,首先,你需要知道flow_from_directory的参数。 . batch_size确定要加载用于计算的样本数和 epoch确定您使用 Keras 传递所有数据的次数。本质上,如果你设置你的 epoch=2batch_size=32这意味着 Keras 将通过在 mini-batches 中拆分您的数据两次遍历您的所有数据。包含 32 个数据样本。那么您的代码中缺少的本质上是 epoch 参数。
我建议也设置steps_per_epoch 和validation_data。 steps_per_epoch确定每个时期中的批次数而不是访问每个时期中的所有样本集 steps_per_epoch如下。

model.fit_generator(train_generator, steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=10, validation_data=validation_generator, validation_steps=validation_generator.samples/validation_generator.batch_size)

关于tensorflow - 如何在 Keras 中使用 flow_from_directory 重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57967475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com