Asked to retrieve element 0, but the Sequence has length 0 解决

在尝试使用Keras进行图像分类时遇到fit_generator报错,提示找不到图片。问题在于目录结构不正确和fit_generator的弃用。解决方案是更新为model.fit,并确保训练数据目录符合标准格式,将图片按类别放入子文件夹。通过调整目录结构并使用model.fit,成功避免错误并完成模型训练。

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

问题现象

这个问题是这样的,在用Keras做一个极为简单的图像分类时候,我使用ImageDataGenerator构建了图片的预处理模型,用函数flow_from_directory来获取文件夹中的所有图片,然后使用函数fit_generator 去读取,这个时候出现model.fit_generator(train_generator, 这个位置报错  ,提示Asked to retrieve element 0, but the Sequence has length 0

 

部分代码如下:

train_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.7,
                                   zoom_range=0.7,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_path,
                                                    target_size=(64,64),
                                                    batch_size=6,
                                                    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(test_path,
                                                        target_size=(64,64),
                                                        batch_size=6,
                                                        class_mode='binary')

# 这里报错
model.fit_generator(train_generator,
                    steps_per_epoch=18,   #训练数据的数量除以batch_size,108/6=18
                    epochs=200,   #训练迭代次数
                    validation_data=validation_generator,
                    validation_steps=200)

 

问题解决流程

在出现错误提示后,我看了一下终端的提示:Please use Model.fit, which supports generators.     这个意思就是让我使用新的model.fit 这个函数,我的是比较新的keras,fit_generator是旧版本使用的

 

那么就把

model.fit_generator(train_generator,

改成

model.fit(train_generator,

但是还是出错,但这下终端的提示变成了:Found 0 images belonging to 0 classes. 意思是找到0个分类,因为keras这边是用目录树来分和打标签的,所以目录树要改成这样的标准形式

在这里插入图片描述

所以,根据这个规范,我们要把文件夹改成这样使用类型名称来命名,把图片全部都装进去

运行就不会有问题了

import os import numpy as np from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense # 数据集路径 train_data_dir = 'cats/' test_data_dir = 'dogs/' # 图像大小 img_width, img_height = 150, 150 # 训练集、测试集大小 nb_train_samples = 2000 nb_test_samples = 800 # 训练轮次、批次大小 epochs = 50 batch_size = 16 # 定义卷积神经网络模型 model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=(img_width, img_height, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(64)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) # 图像生成器 train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary') test_generator = test_datagen.flow_from_directory( test_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary') # 训练模型 model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=epochs, validation_data=test_generator, validation_steps=nb_test_samples // batch_size) # 保存模型 model.save_weights('model_weights.h5') model.save('model.h5')这段代码报错Asked to retrieve element 0, but the Sequence has length 0
06-12
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值