使用MobileNet提取数据集图像特征时遇ValueError问题求助
解决MobileNet提取特征时的ValueError: Sequence has length 0问题
这个错误的核心原因是flow_from_directory没有加载到任何图像,主要由数据集目录结构错误或路径问题导致,以下是具体解决方案:
1. 修正数据集目录结构
flow_from_directory要求数据集必须遵循「主目录→子目录(类别)→图片」的层级结构,哪怕所有图片属于同一类别,也需要在主目录下创建至少一个子文件夹存放图片。
正确目录结构示例:
16k_images/ all_imgs/ # 子目录名称可自定义 img1.jpg img2.jpg ...
如果直接把图片放在16k_images根目录下,生成器会识别不到有效图像,导致序列长度为0。
2. 验证路径与加载数量
- 路径中的
//可简化为/,避免转义冲突,修改后的路径为:'C:/Users/mahit/OneDrive/Pictures/Desktop/DATA AND VIDEOS/16k_images' - 在创建生成器后添加打印语句,确认加载的图片数量:
如果输出为0,说明路径错误或目录结构不符合要求,需要重新核对。print(f"Loaded images count: {image_generator.samples}")
3. 修正预测参数与补全依赖
- 原代码未导入
numpy,需添加import numpy as np - 不要硬编码
steps参数(原代码中的16042),应根据实际加载的图片数和batch_size计算,避免数量不匹配:steps = image_generator.samples // image_generator.batch_size if image_generator.samples % image_generator.batch_size != 0: steps += 1
修正后的完整代码
import numpy as np from keras.applications import MobileNet from keras.preprocessing.image import ImageDataGenerator from keras.applications.mobilenet import preprocess_input # Load the MobileNet model base_model = MobileNet(weights='imagenet', include_top=False) # Define the data generator data_generator = ImageDataGenerator(preprocessing_function=preprocess_input) # Create the data generator for the custom dataset image_generator = data_generator.flow_from_directory( 'C:/Users/mahit/OneDrive/Pictures/Desktop/DATA AND VIDEOS/16k_images', target_size=(224, 224), batch_size=32, # 增大batch_size提升特征提取效率 class_mode=None, shuffle=False) # 验证图片加载情况 print(f"Loaded {image_generator.samples} images") if image_generator.samples == 0: raise ValueError("未找到任何图片,请检查目录结构或路径是否正确。") # 计算所需步数 steps = image_generator.samples // image_generator.batch_size if image_generator.samples % image_generator.batch_size != 0: steps += 1 # 提取图像特征 image_features = base_model.predict(image_generator, steps=steps) # 保存特征文件 np.save('mobilenet_image_features.npy', image_features)
内容的提问来源于stack exchange,提问作者MAHITHA POTTI
相关产品推荐
相关产品推荐

