- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在 Keras 中进行数据扩充,我正在使用基本的 ImageDataGenerator。我通过艰难的方式了解到它实际上是一个生成器,而不是迭代器(因为 type(train_aug_ds)
给出了 <class 'keras.preprocessing.image.DirectoryIterator'>
我认为它是一个迭代器)。我还查看了一些关于使用它的博客,但它们并没有回答我所有的问题。
所以,我像这样加载我的数据:
train_aug = ImageDataGenerator(
rescale=1./255,
horizontal_flip=True,
height_shift_range=0.1,
width_shift_range=0.1,
brightness_range=(0.5,1.5),
zoom_range = [1, 1.5],
)
train_aug_ds = train_aug.flow_from_directory(
directory='./train',
target_size=image_size,
batch_size=batch_size,
)
为了训练我的模型,我执行了以下操作:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
它奏效了。我有点困惑它是如何工作的,因为train_aug_ds
是生成器,所以它应该给出无限大的数据集。文档说:
When passing an infinitely repeating dataset, you must specify the steps_per_epoch argument.
虽然我没有这样做,但它确实有效。它是否以某种方式推断出步数?另外,它是只使用增强数据,还是批量使用非增强图像?
基本上,我的问题是如何通过函数 fit
正确使用此生成器在我的训练集中包含所有数据,包括原始的、非增强的图像和增强的图像,并通过它循环几次/步骤(现在似乎每个时期只执行一个步骤)?
最佳答案
我认为文档可能非常困惑,而且我认为行为会因您的 Tensorflow 和 Keras 版本而异。例如,在这个 post ,用户正在描述您期望的确切行为。通常,flow_from_directory()
方法允许您直接从目录读取图像并在训练模型时扩充它们,如前所述 here ,它在每个时期对每个文件夹中的每个样本进行迭代。使用以下示例,您可以通过查看进度条中每个时期的步骤来检查是否属于这种情况(在 TF 2.7 上):
import tensorflow as tf
BATCH_SIZE = 64
flowers = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
img_gen = tf.keras.preprocessing.image.ImageDataGenerator(
rescale=1./255,
horizontal_flip=True,
)
train_ds = img_gen.flow_from_directory(flowers, batch_size=BATCH_SIZE, shuffle=True, class_mode='sparse')
num_classes = 5
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(256, 256, 3)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(num_classes)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))
epochs=10
history = model.fit(
train_ds,
epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
6/58 [==>...........................] - ETA: 3:02 - loss: 2.0608
如果像这样用 tf.data.Dataset.from_generator
包装 flow_from_directory
:
train_ds = tf.data.Dataset.from_generator(
lambda: img_gen.flow_from_directory(flowers, batch_size=BATCH_SIZE, shuffle=True, class_mode='sparse'),
output_types=(tf.float32, tf.float32))
您会注意到进度条看起来像这样,因为 steps_per_epoch
尚未明确定义:
Epoch 1/10
Found 3670 images belonging to 5 classes.
29/Unknown - 104s 4s/step - loss: 2.0364
如果你添加这个参数,你会在进度条中看到步骤:
history = model.fit(
train_ds,
steps_per_epoch = len(from_directory),
epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
3/58 [>.............................] - ETA: 3:19 - loss: 4.1357
最后,对于你的问题:
How to use this generator correctly with function fit to have alldata in my training set, including original, non-augmented images andaugmented images, and to cycle through it several times/step?
您可以通过乘以某个因子来简单地将 steps_per_epoch
增加到 number of samples//batch_size
之外:
history = model.fit(
train_ds,
steps_per_epoch = len(from_directory)*2,
epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
1/116 [..............................] - ETA: 12:11 - loss: 1.5885
现在每个纪元有 116 步,而不是 58 步。
关于python - 如何在 Keras 中正确使用 ImageDataGenerator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70080062/
我正在尝试使用 Keras 进行语义分割,当尝试加载图像时,我使用 flow_from_directory 方法收到此错误。 Found 0 images belonging to 0 classes
我试图实现的架构在这里: Patient-data adapted model architecture: ResNet-50 。我的图像按标签分为文件夹,如下所示: root/ ├── tr
我的keras文档中的代码有问题。在下面的代码中,它只加载了 1 张图像。如果我的文件夹中有 10 个图像,我将如何使用此代码,因为 load_img 函数仅加载 1 个图像,而我想加载包含 10 个
我正在尝试使用 Inception V3 模型进行图像分类。 Keras 的 ImageDataGenerator 是否会创建添加到我的数据集的新图像?如果我有 1000 张图片,使用此功能是否会将其
例如,考虑在 Keras 中微调 Resnet50 模型。 For example here : from keras.applications.resnet50 import ResNet50 fr
我正在尝试使用 ImageDataGenerator 对象的流方法获取输入图像并保存该图像的 10 个增强版本。问题是它无意中改变了图像的颜色,即使我没有向 ImageDataGenerator 类传
我一直在尝试实现 Keras 自定义图像数据生成器,以便我可以进行头发和显微镜图像增强。 这是数据生成器类: class DataGenerator( Sequence ): def __in
我知道的方法是这样的 from tensorflow.keras.preprocessing.image import ImageDataGenerator train_datagen = Image
我正在训练一个神经网络来预测鼠标大脑图像上的二进制掩码。为此,我使用来自 keras 的 ImageDataGenerator 来扩充我的数据。 但我已经意识到数据生成器在应用空间变换时正在插入数据。
我目前正在创建一个CNN模型来分类字体是否为Arial , Verdana , Times New Roman和 Georgia .总共有16类,因为我还考虑检测字体是否为 regular , bol
我有一个关于在使用 ImageDataGenerator 的 Keras 数据增强上下文中使用 sample_weight 参数的问题。假设我有一系列简单的图像,只有一类对象。因此,对于每个图像,我将
嗨,我想问你一个关于 Keras ImageDataGenerator 的问题。我可以确定将创建多少增强图像吗?或者如何在增强后找到训练图像集的大小。在 Keras 文档中,流程函数描述是:“采用 n
我正在制作一个用于图像分类的 CNN 模型(我有两个类)。我使用 ImageDataGenerator 进行数据准备,使用 model.fit_generator 进行训练。为了进行测试,我使用mod
我有一个模型,它将两个图像作为输入并生成一个图像作为目标输出。 我所有的训练图像数据都在以下子文件夹中: 输入1 输入2 目标 我可以使用 keras 中的 ImageDataGenerator 类和
我是卷积神经网络的新手,我即将构建我的第一个 ConvNet,它是一个多类图像分类 ConvNet。 型号说明 假设我有两个图像文件夹,一个包含数千张特定类型叶子的图像(叶子 A)(图像集 X),另一
我正在使用 keras ImageDataGenerator 来预处理训练图像,并且需要某种颜色更改功能(随机颜色、色调更改)。 我的生成器代码如下所示: image_generator = tf.k
以下是我的 csv 文件 file,pt1,pt2,pt3,,pt4,pt5,pt6 object/obj0.png,66.0335639098,39.0022736842,30.2270075188
假设我想应用两个不同的 preprocessing_functions分成两份ImageDataGenerator s 到一张图像,然后将这些输出连接到一个张量来训练模型。 即,如果我有 RGB 图像
我正在尝试使用tensorflow.keras构建语义分割模型。我使用的数据集将图像和蒙版存储在单独的目录中,每个文件名都有一个 ID,用于将图像文件与其各自的蒙版进行映射。 以下是我的数据集目录的结
我有 70'000 个 2D numpy 数组,我想在其上使用 Keras 训练 CNN 网络。将它们保存在内存中是一种选择,但会消耗大量内存。因此,我想将矩阵保存在磁盘上并在运行时加载它们。一种选择
我是一名优秀的程序员,十分优秀!