首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras数据增强

keras数据增强
EN

Stack Overflow用户
提问于 2020-09-17 17:49:53
回答 1查看 35关注 0票数 0

我知道ImageDataGenerator会为每个输入图像生成一个随机增强的图像。现在,我想为每个输入图像生成两个增强图像:

代码语言:javascript
复制
datagen = tf.keras.preprocessing.image.ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')
train_ds = datagen.flow_from_directory('/home/train/')

为了解释更多,我想在同一张图像上应用两个不同的增强函数,也就是说,如果我们采样5张图像,我们最终得到2×5= 10个批量增强的观察值

那么我该如何继续呢?

EN

回答 1

Stack Overflow用户

发布于 2020-09-17 23:03:11

我建议创建一个继承自tf.keras.utils.Sequence的自定义数据生成器。有许多方法可以做到这一点,但这应该与您正在寻找的东西保持一致:

代码语言:javascript
复制
class double_aug_generator(tf.keras.utils.Sequence):
    def __init__(self, x, y, batch_size, aug_params1, aug_params2):
        self.x, self.y = x, y
        self.batch_size = batch_size
        self.datagen = tf.keras.preprocessing.image.ImageDataGenerator(**aug_params1)
        
        // dictionary of parameters for the second augmentation
        self.aug_params2 = aug_params2

    def __len__(self):
        return math.ceil(len(self.x) / self.batch_size)
    
    def load(self, file_names):
        // load and return raw images however you like

    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]
        
        // load images
        batch_x = self.load(batch_x)
        
        // apply first augmentation
        batch_x = self.datagen.flow(batch_x)
        
        // apply second
        batch_x = self.datagen.apply_transform(batch_x, self.aug_params2)
        
        return batch_x, np.array(batch_y)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63935482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档