簡體   English   中英

如何使用ImageDataGenerator類生成訓練並將其標記為keras模型的圖像?

[英]How can I use ImageDataGenerator class to generate either train and label as image for a keras model?

我想訓練一個使用Keras生成新圖像的模型,並使用ImageDataGenerator類生成一批圖像。

問題是,我找不到使用此類的方法來生成訓練並將批次標記為圖像。 我想傳遞給模型以訓練一些圖像並標記其他圖像。

此外,我需要從硬盤讀取每批圖像,因為數據集太大而無法加載到內存中。

還可以理解ImageDataGenerator方法的替代方法。

我希望這個問題很清楚,希望您能對我有所幫助。

您可以構建自定義數據生成器類。 該鏈接對Keras的數據生成器很有幫助。 您可以將圖像標簽存儲在一個較大的csv文件中,並根據需要在每批中加載所需的圖像。

您可以將ImageDataGenerator類與您喜歡的任何類型的標簽一起使用,也可以將圖像用作多維數組。 這是使用虛擬numpy圖像的示例:

from keras.preprocessing.image import ImageDataGenerator
import numpy as np

# Create fake images
n, width, height = 1000, 28, 28
images_data = np.random.randint(low=0, high=256, size=(n, height, width, 3))
images_labels = np.random.randint(low=0, high=256, size=(n, height, width, 3))

image_gen = ImageDataGenerator()
batch_size = 100
batch_gen = image_gen.flow(images_data, images_labels, batch_size=batch_size)

例如,您可以然后將batch_gen傳遞給fit_generator ,它將產生(images_data, images_labels)元組,兩者的形狀均為(batch_size, height, width, 3) 您可以使用以下方法進行檢查:

batch = batch_gen.next()
print(len(batch))
print(batch[0].shape)
print(batch[1].shape)

如果您的數據集不適合存儲在內存中並存儲為文件,則也可以使用flow_from_directory Keras官方文檔中有示例

如果編寫自己的批處理生成器函數,也可以在批處理之前對批處理做一些事情:

def _generate_batches(image_gen, images_data, images_labels, batch_size):
    for batch in image_gen.flow(images_data, images_labels,
                                batch_size=batch_size):
        # Here you can do whatever you like to your batch
        yield (batch[0], batch[1])

最后,如果您需要ImageDataGenerator非常特定的功能,則可以始終構建自定義ImageDataGenerator類:

class ImageDataGeneratorCustom(ImageDataGenerator): 
...

特別是,您可能想覆蓋flow()函數,甚至構建自定義Iterator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM