python - datagen.flow_from_directory 函数
问题描述
我正在使用 fer2013 数据集,当我使用 datagen.flow_from_directory 函数时,它找不到目录中的所有图像。
这是我的代码
IMAGE_SIZE = 224
BATCH_SIZE = 64
train_data_dir = "/content/drive/My Drive/Colab/FER2013/Training"
validation_data_dir = "/content/drive/My Drive/Colab/FER2013/PublicTest"
datagen = tf.keras.preprocessing.image.ImageDataGenerator(
rescale=1./255,
validation_split=0.2)
train_generator = datagen.flow_from_directory(
train_data_dir,
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=BATCH_SIZE,
subset='training')
val_generator = datagen.flow_from_directory(
validation_data_dir,
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=BATCH_SIZE,
subset='validation')
这是结果。
Found 22921 images belonging to 7 classes.
Found 714 images belonging to 7 classes.
我本身没有错误,但在目录文件夹中我有 28000 多张图像,而在 PublicTest 3000 多张照片中,为什么它发现我的实际图像数量只有 22921 和 714?
解决方案
显然,您有一个单独的训练目录和一个单独的验证图像目录。每个应该有 7 个子目录,每个类一个,并且在训练和验证目录中命名相同。在数据生成器中设置validation_split=0.2。这将获取您的训练图像并将其中的 80% 用于训练,20% 用于验证。所以大约 28000 X .8 = 22400。既然你已经有一个单独的验证目录,你应该设置 split=0。这样,训练目录中的所有图像都将用于训练。使用 validation_split=0 您不需要在 flow_from_directory 方法中指定子集。将 train_generator 和 val_generator 都输入到 model.fit 中。
推荐阅读
- python - 尝试启动 Jupyter 笔记本时出现 DLL 错误
- c# - 发现 System.Runtime 和 System.IO 之间存在冲突
- javascript - 使用 Javascript 启动新窗口并填写表单值
- c++ - 计算两个代码块的时间复杂度
- mysql - 对具有相同键的记录执行条件操作
- reactjs - 谷歌域上 netlify 的 DNS 设置是什么?
- flutter - 构造函数外部的实例字段访问
- vba - 列出 Access 表单上所有控件的 FormatConditions
- c# - 将编译时创建的资源链接到类库
- bison - 如何在yacc中区分大于小于'<''>'和通用'<>'