问题现象
这个问题是这样的,在用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这边是用目录树来分和打标签的,所以目录树要改成这样的标准形式
所以,根据这个规范,我们要把文件夹改成这样使用类型名称来命名,把图片全部都装进去
运行就不会有问题了