gpt4 book ai didi

python - ImageDataGenerator流函数的正确使用

转载 作者:行者123 更新时间:2023-11-30 09:42:23 27 4
gpt4 key购买 nike

我正在尝试在 Keras 中使用数据增强回归模型。因此我想使用 Keras 中的 ImageDataGenerator 类。我能找到的关于该任务的几乎所有教程都有分类方法,因此使用方法 flow_from_directory。但对于回归任务,这不起作用。

然后我偶然发现了 flow 方法,但遗憾的是没有很好的例子来使用它。我唯一能发现的是人们正在使用它来将增强数据直接输出到硬盘。我想要做的是(就像 flow_from_directory 一样)使用生成器并将其放入 fit_generator 函数中。但我得到的结果不是很好,我不确定是否是增强数据或者我使用了 flow 方法错误。这是我所做的:

# Load the data (images will be model input, labels will be model output)
# NOTE:
# images.shape = (45, 256, 256, 1)
# labels.shape = (45, 2)
images, labels = load_dataset(base_path=os.getcwd(),
type=dataset_type.FrontalPrimary)

# split into training and test data
split = train_test_split(images, labels, test_size=0.10, random_state=42)
(trainX, testX, trainY, testY) = split

# make data fit model
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], trainX.shape[2], 1))
testX = np.reshape(testX, (testX .shape[0], testX .shape[1], testX .shape[2], 1))

# create generator for each, training and test
data_gen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1,
fill_mode='nearest',
validation_split=0.15)

train_generator = data_gen.flow(trainX, trainY, batch_size=1)
test_generator = data_gen.flow(testX, testY, batch_size=1)

# train model
model = cnn.get_model()
model.fit_generator(train_generator, steps_per_epoch=64, epochs=500)

# make predictions on the testing data
preds = model.predict_generator(test_generator, steps=10)

编辑:

我注意到了一些别的事情。如果我设置data_gen如下所示

data_gen = ImageDataGenerator()

或者如果数据尚未标准化

data_gen = ImageDataGenerator(rescale=1/255.)

结果与我在没有数据增强的情况下测试的结果相去甚远,尽管 ImageDataGenerator 不应该转换任何图像。这怎么可能?

最佳答案

您的图像很可能尚未标准化(即像素值在 [0,255] 范围内)。因此,您需要对它们进行标准化,一种简单的方法是使用 rescale 参数:

data_gen = ImageDataGenerator(rescale=1/255., ...)
<小时/>

其他几点:

  • 您正在使用增强数据进行训练,这完全没问题。但请确保您也想使用增强数据进行测试。否则,在测试阶段,您需要创建一个新的 ImageDataGenerator 实例,它不会对测试图像进​​行任何增强:

    test_data_gen = ImageDataGenerator(rescale=1/255.)
    test_generator = test_data_gen.flow(testX, testY)
  • 如果您有 40 个训练图像(占整个数据的 90%)并设置 batch_size=1,那么每个时期将有 40 个批处理。因此,您需要将 steps_per_epoch 相应地设置为 40(或者更好,将其设置为 trainX.shape[0])。不过,如果您有更多图像,则批量大小 1 在使用所有可用资源(即 GPU/CPU)方面效率不高。同样的情况也适用于 predict_generatorsteps 参数。

关于python - ImageDataGenerator流函数的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57185851/

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