keras调用flow_from_directory()出现“Found 0 images belonging to 2 classes”问题

在使用Keras进行图像分类时,遇到'Found 0 images belonging to 2 classes'错误。问题源于train_datagen中的validation_split参数与后续验证集设置的冲突。解决方案包括:1) 从训练集中直接分出验证集;2) 单独创建验证集目录时,不使用validation_split参数。此外,介绍了model.fit_generator()和model.fit()在fit方法中的区别,包括validation_split、validation_data参数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像分类时,keras调用flow_from_directory()出现“Found 0 images belonging to 5 classes”问题

代码如下:

from tensorflow import keras
from keras_preprocessing import image


train_datagen = image.ImageDataGenerator(
    #..... 
    fill_mode = 'nearest',   
    validation_split=0.3
   
) 
valid_datagen = image.ImageDataGenerator(
    rescale=1./255,
)
test_datagen = image.ImageDataGenerator(
    rescale = 1./255,
)


train_generator = train_datagen.flow_from_directory(
    'zuizhong/train',
    target_size=(224,224),#(height,width)
    batch_size=batch_size,
    #subset='training',
    )
valid_generator = valid_datagen.flow_from_directory(
    'zuizhong/val',
    target_size=(224,224),
    batch_size=batch_size,
    subset='validation',
    

    )
#0: 'jinyu118', 1: 'kenuo58', 2: 'liyuan296', 3: 
``` import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 定义路径 train_dir = r'C:\Users\29930\Desktop\结构参数图' # 数据增强配置 train_datagen = ImageDataGenerator( rescale=1./255, validation_split=0.2, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) # 生成训练集和验证集 train_generator = train_datagen.flow_from_directory( train_dir, target_size=(224, 224), batch_size=32, class_mode='binary', subset='training' ) val_generator = train_datagen.flow_from_directory( train_dir, target_size=(224, 224), batch_size=32, class_mode='binary', subset='validation' ) model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(224,224,3)), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile( optimizer='adam', loss='binary_crossentropy', metrics=['accuracy', tf.keras.metrics.AUC(name='auc')] ) # 添加早停法 early_stop = tf.keras.callbacks.EarlyStopping( monitor='val_loss', patience=5, restore_best_weights=True ) # 训练模型 history = model.fit( train_generator, validation_data=val_generator, epochs=30, callbacks=[early_stop] ) # 保存模型 model.save('copd_cnn_model.h5') # 评估指标可视化 import matplotlib.pyplot as plt plt.plot(history.history['auc'], label='Training AUC') plt.plot(history.history['val_auc'], label='Validation AUC') plt.title('模型AUC曲线') plt.ylabel('AUC值') plt.xlabel('Epoch') plt.legend() plt.show()```运行结果是Found 213 images belonging to 2 classes. Found 52 images belonging to 2 classes. Warning (from warnings module): File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\layers\convolutional\base_conv.py", line 107 super().__init__(activity_regularizer=activity_regularizer, **kwargs) UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead. Warning (from warnings module): File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\trainers\data_adapters\py_dataset_adapter.py", line 121 self._warn_if_super_not_called() UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored. Traceback (most recent call last): File "D:/建模/cnn.py", line 61, in <module> history = model.fit( File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler raise e.with_traceback(filtered_tb) from None File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\image_utils.py", line 227, in load_img raise ImportError( ImportError: Could not import PIL.Image. The use of `load_img` requires PIL. 请根据结果修改代码使其能正常运行
03-20
Keras的ImageDataGenerator类中,`flow_from_directory`方法是一个用于从目录结构中生成图像数据集的便捷工具。以下是调用这个方法的基本步骤: 1. 首先,你需要导入所需的库和模块: ```python from tensorflow.keras.preprocessing.image import ImageDataGenerator ``` 2. 创建ImageDataGenerator实例,并设置必要的参数。例如,指定数据源的路径、图像大小、批处理大小等: ```python img_datagen = ImageDataGenerator(rescale=1./255, # 对像素值归一化 rotation_range=20, # 图像随机旋转角度范围 width_shift_range=0.2, # 水平平移范围 height_shift_range=0.2, # 垂直平移范围 shear_range=0.2, # 切割角度 zoom_range=0.2, # 缩放比例 horizontal_flip=True, # 水平翻转 vertical_flip=False) # 垂直翻转 ``` 3. 使用`flow_from_directory`方法,传入训练或验证数据的根目录,以及一些额外选项,如目标类别数(如果有的话)、shuffle(是否打乱顺序)和batch_size: ```python train_data_gen = img_datagen.flow_from_directory( 'path/to/train/directory', target_size=(img_height, img_width), # 根据需要设定的图像尺寸 batch_size=batch_size, class_mode='binary' if binary_classification else 'categorical', # 类别模式 shuffle=True, ) ``` 4. 如果你想同时获取标签和图像,可以这样调用: ```python (x_train, y_train) = train_data_gen.next() ``` 这里,x_train就是包含图像的数据,y_train则是对应的标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值