Python 根据Keras中的图像和子文件夹名称设置训练CNN的X和y

Python 根据Keras中的图像和子文件夹名称设置训练CNN的X和y,python,keras,Python,Keras,下面的代码片段为我提供了150个图像,它们属于三个类(有三个子文件夹,每个文件夹中有50个图像-这些文件夹是以我试图编写一个CNN来分类的Iris类命名的) 我的问题是如何将图像的np数组设置为我的X,将子文件夹名称设置为我的y,以便训练我的CNN import keras from keras.preprocessing.image import ImageDataGenerator train_gen = ImageDataGenerator(rescale = 1./255, shear

下面的代码片段为我提供了150个图像,它们属于三个类(有三个子文件夹,每个文件夹中有50个图像-这些文件夹是以我试图编写一个CNN来分类的Iris类命名的)

我的问题是如何将图像的np数组设置为我的X,将子文件夹名称设置为我的y,以便训练我的CNN

import keras
from keras.preprocessing.image import ImageDataGenerator

train_gen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)
test_gen = ImageDataGenerator(rescale = 1./255)
training_set = train_gen.flow_from_directory(r"Iris_Imgs",
target_size = (5, 5), shuffle=True, batch_size = 15, class_mode = 'binary')
train_imgs, train_labels = next(training_set)
test_set = test_gen.flow_from_directory(r"Iris_Imgs",
target_size = (5, 5), shuffle=True, class_mode = 'binary')
test_imgs, test_labels = next(test_set)

您正在错误地使用来自目录的流。除非您的数据已经分组到子文件夹中,否则来自目录的流将无法正常工作


使用来自数据帧的流。在一列中存储图像路径,在另一列中存储class_标签。然后使用来自数据帧的流。这是您应该使用的,因为您的数据未在子文件夹中分类。

您错误地使用了flow\u from\u目录。除非您的数据已经分组到子文件夹中,否则来自目录的流将无法正常工作


使用来自数据帧的流。在一列中存储图像路径,在另一列中存储class_标签。然后使用来自数据帧的流。这是您应该使用的,因为您的数据未分类在子文件夹中。

谢谢您的回答-但是我的图像被分组在子文件夹中(3个子文件夹名为Setosa、Versicolor和Virginica)。子文件夹名称是我试图训练CNN对其执行分类的类。在这种情况下,不要使用class_mode='binary'。你有三节课。试着使用class_mode='categorical',同样,您的测试数据似乎来自列车数据。如果是这样的话,你的型号会太合适的。谢谢你的建议。是的,我实现了测试数据部分-这是一个任务,所以数据非常简单。我们现在正在努力实现一个CNN。使用class_mode='categorical'后,您知道我如何将这些数据与CNN相匹配吗?是否有一个X.y放置在以下行中?:model.fit(X,y,epochs=150,batch_size=15)还是我认为它错了?因为您使用的是生成器,所以不需要X,y。它们都存储在列车生成中,模型将自动获得X和y值。您必须使用steps\u per\u epochs=len(train\u gen)和validation\u steps=len(val\u gen)。两者都必须计算。查看ImageDataGenerator的文档,了解fit_生成器。fit_生成器将很快被弃用。您可以使用fit而不是fit_generator,它将为您的答案使用sameThanks-但是我的图像分组在子文件夹中(3个子文件夹名为Setosa、VersionColor和Virginica)。子文件夹名称是我试图训练CNN对其执行分类的类。在这种情况下,不要使用class_mode='binary'。你有三节课。试着使用class_mode='categorical',同样,您的测试数据似乎来自列车数据。如果是这样的话,你的型号会太合适的。谢谢你的建议。是的,我实现了测试数据部分-这是一个任务,所以数据非常简单。我们现在正在努力实现一个CNN。使用class_mode='categorical'后,您知道我如何将这些数据与CNN相匹配吗?是否有一个X.y放置在以下行中?:model.fit(X,y,epochs=150,batch_size=15)还是我认为它错了?因为您使用的是生成器,所以不需要X,y。它们都存储在列车生成中,模型将自动获得X和y值。您必须使用steps\u per\u epochs=len(train\u gen)和validation\u steps=len(val\u gen)。两者都必须计算。查看ImageDataGenerator的文档,了解fit_生成器。fit_生成器将很快被弃用。您可以使用fit而不是fit_生成器,它的工作原理相同