我已经训练了CNN对3类图像进行分类。在训练模型时,我使用了keras的ImageDataGenerator类来对图像应用预处理函数并重新缩放。现在我的网络在测试集上训练得很好,但我不知道如何将预处理函数应用于单幅图像预测。如果我使用ImageDataGenerator,它会查找目录。建议我一些替代方案做预处理功能和重新缩放的单一图像。下面的代码
培训集:
train_datagen = ImageDataGenerator(preprocessing_function = tf.keras.applications.vgg16.preprocess_input,
rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
training_set = train_datagen.flow_from_directory('./training_set',
target_size = (224, 224),
batch_size = 10,
class_mode = 'categorical')
字符串
测试集:
test_datagen =ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input,
rescale = 1./255)
test_set = test_datagen.flow_from_directory('./test_set',
target_size = (224, 224),
batch_size = 10,
shuffle=False,
class_mode = 'categorical')
型
现在,我无法应用预处理功能和重新缩放单个图像预测之前。单一预测:
single_datagen = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input,
rescale = 1./255)
single_test = single_datagen.flow_from_directory('./single_prediction/cc.jpg',
target_size = (224, 224),
batch_size = 1,
class_mode = 'categorical')
型
错误:NotADirectoryError:[错误20]不是目录:'./single_prediction/cc.jpg'
3条答案
按热度按时间9cbw7uwe1#
当你想预测一个图像时,你可以使用下面的代码。
它根据训练数据集中文件夹(类)的排列方式返回每个类的概率列表。因此,返回列表的第一个索引是训练数据集中的第一个文件夹(或类),依此类推。具有最高概率的索引是您预测的类。
字符串
使用下面的列表解析将结果四舍五入为整数,可以返回更清晰的结果。
型
索引为1的元素是预测类。
dm7nw8vv2#
图像数据生成器查看您指定的目录,并在该目录中搜索指定类的子目录。因此创建一个名为'./single_prediction的目录。在该目录中创建一个单独子目录,称之为test。在名为test子目录中放置要测试的图像。或者,您可以编写一些python代码来生成预处理的图像。创建一个名为test的目录,并将您的图像放在其中。我没有测试过,但下面的代码应该可以工作。
字符串
mu0hgdu03#
以下方法应该适合您:
字符串
应该输出如下所示的内容:
第一个月
**注意:**所有测试数据的预处理方式必须与训练/验证数据的预处理方式相同。注意我们如何使用
img = img/255.0
重新缩放/归一化像素值。如果没有正确地预处理图像,您将在未训练的数据上进行测试。