如何通过 keras.load_img 加载多张图片并为 CNN 模型数据扩充每张图片
how to load multiple images through keras.load_img and data augment each images for CNN model
我想创建一个 CNN 模型来对 10 种不同的汽车进行分类。首先,我下载了一些图片,现在我想通过数据扩充来增加图片的数量。由于一次处理一张图像很忙,我为此编写了一个 for 循环,但它显示错误。
TypeError Traceback (most recent call last)
<ipython-input-14-9ced4a120c2d> in <module>
10
11 for i in images:
---> 12 x = img_to_array(images[i])
13 x = x.reshape((1,) + x.shape)
14 j=0
~\anaconda3\envs\DSEnv\lib\site-packages\keras_preprocessing\image\iterator.py in __getitem__(self, idx)
51
52 def __getitem__(self, idx):
---> 53 if idx >= len(self):
54 raise ValueError('Asked to retrieve element {idx}, '
55 'but the Sequence '
TypeError: '>=' not supported between instances of 'tuple' and 'int'
代码:
images = ImageDataGenerator().flow_from_directory(r'\Users\Mohda\OneDrive\Desktop\ferrari sf90 stradale')
datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.3,
height_shift_range=0.3,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
for i in images:
x = img_to_array(images[i])
x = x.reshape((1,) + x.shape)
j=0
for batch in datagen.flow(x,batch_size=1,save_to_dir='preview',save_prefix='ferrari sf90 stradale',save_format='jpeg'):
i+=1
if i>20:
break
您无需遍历图像并应用 ImageDataGenerator
,而只需在图像路径上使用创建的 ImageDataGenerator
,它会即时为您完成。为了获取图像,您可以在生成器上调用 next()
。
PATH_TO_IMAGES = r'\Users\Mohda\OneDrive\Desktop\ferrari sf90 stradale'
# Specify whatever augmentation methods you want to use here
train_datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.3,
height_shift_range=0.3,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
train_generator = train_datagen.flow_from_directory(
PATH_TO_IMAGES,
target_size=(150, 150),
batch_size=32,
save_to_dir=/tmp/img-data-gen-outputs
class_mode='binary')
# Use the generator by calling .next()
train_generator.next()
我想创建一个 CNN 模型来对 10 种不同的汽车进行分类。首先,我下载了一些图片,现在我想通过数据扩充来增加图片的数量。由于一次处理一张图像很忙,我为此编写了一个 for 循环,但它显示错误。
TypeError Traceback (most recent call last)
<ipython-input-14-9ced4a120c2d> in <module>
10
11 for i in images:
---> 12 x = img_to_array(images[i])
13 x = x.reshape((1,) + x.shape)
14 j=0
~\anaconda3\envs\DSEnv\lib\site-packages\keras_preprocessing\image\iterator.py in __getitem__(self, idx)
51
52 def __getitem__(self, idx):
---> 53 if idx >= len(self):
54 raise ValueError('Asked to retrieve element {idx}, '
55 'but the Sequence '
TypeError: '>=' not supported between instances of 'tuple' and 'int'
代码:
images = ImageDataGenerator().flow_from_directory(r'\Users\Mohda\OneDrive\Desktop\ferrari sf90 stradale')
datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.3,
height_shift_range=0.3,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
for i in images:
x = img_to_array(images[i])
x = x.reshape((1,) + x.shape)
j=0
for batch in datagen.flow(x,batch_size=1,save_to_dir='preview',save_prefix='ferrari sf90 stradale',save_format='jpeg'):
i+=1
if i>20:
break
您无需遍历图像并应用 ImageDataGenerator
,而只需在图像路径上使用创建的 ImageDataGenerator
,它会即时为您完成。为了获取图像,您可以在生成器上调用 next()
。
PATH_TO_IMAGES = r'\Users\Mohda\OneDrive\Desktop\ferrari sf90 stradale'
# Specify whatever augmentation methods you want to use here
train_datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.3,
height_shift_range=0.3,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
train_generator = train_datagen.flow_from_directory(
PATH_TO_IMAGES,
target_size=(150, 150),
batch_size=32,
save_to_dir=/tmp/img-data-gen-outputs
class_mode='binary')
# Use the generator by calling .next()
train_generator.next()