![](/img/trans.png)
[英]Can I generate uint8 label using ImageDataGenerator() and flow_from_directory() in 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.