【问题标题】:how to show results of data augmentation before and after keras.preprocessing.image.ImageDataGenerator如何在 keras.preprocessing.image.ImageDataGenerator 前后显示数据增强的结果
【发布时间】:2020-09-24 18:56:41
【问题描述】:


我目前正在使用 ASL 数据集 https://www.kaggle.com/datamunge/sign-language-mnist 训练 CNN。
为了优化我的准确性,我使用了 Keras 的 ImageDataGenerator。我想打印出数据增强的结果(数据增强前后的图像)。但我不明白如何绘制 datagen 的结果。这是我的代码:

datagen = keras.preprocessing.image.ImageDataGenerator(
        featurewise_center=False, samplewise_center=False,
        featurewise_std_normalization=False,  
        samplewise_std_normalization=False,
        zca_whitening=False, rotation_range=10,
        zoom_range=0.1, width_shift_range=0.1,
        height_shift_range=0.1, horizontal_flip=False,
        vertical_flip=False)
datagen.fit(train_data)
result_data = datagen.flow(train_data, train_label, batch_size=128)
print(result_data)

train_data 是形状 (20, 28, 28, 1) 和 train_label(20, 1) 的 numpy 数组,因为它们是 20 张图像,具有 28*28 像素和第三维,用于 CNN。
我想用 matploit lib 绘制它,但也对其他任何东西(像素的 np 数组)感到满意。
如果有人还可以告诉我如何打印数据生成生成的数据量,那就太棒了。
提前感谢您的帮助。

【问题讨论】:

    标签: python tensorflow keras data-augmentation data-generation


    【解决方案1】:

    首先,您可以创建默认的 DataGenerator 来轻松绘制原始图像

    datagenOrj = keras.preprocessing.image.ImageDataGenerator()
    

    您可以将前五张图片之类的小样本流入您的“数据生成器”。该生成器随机获取图像。为了进行适当的比较,小而确定的采样可能对大数据集有好处。

    result_data     = datagen.flow(train_data[0:5], train_label[0:5], batch_size=128)
    result_data_orj = datagenOrj.flow(train_data[0:5], train_label[0:5], batch_size=128)
    

    当您调用 next() 函数时,您的数据生成器会加载您的第一批数据。结果应包含训练数据和训练标签。您可以通过索引访问它们。

    def getSamplesFromDataGen(resultData):
        x = resultData.next() #fetch the first batch
        a = x[0] # train data
        b = x[1] # train label
        for i in range(0,5):
            plt.imshow(a[i])
            plt.title(b[i])
            plt.show() 
    

    小心绘图。您可能需要重新调整数据。如果您的数据类型是浮点数,则需要在 0 和 1 之间进行缩放;如果您的数据类型为整数,则应该在 0 和 255 之间进行缩放。为此,您可以使用 rescale 属性。

    datagenOrj = keras.preprocessing.image.ImageDataGenerator(rescale=1.0/255.0)
    

    我尝试了自己的数据集,它正在工作。

    最好的

    【讨论】: