gpt4 book ai didi

keras - 使用 ImageDataGenerator 时如何获取预测类

转载 作者:行者123 更新时间:2023-12-02 05:38:37 25 4
gpt4 key购买 nike

我正在制作一个用于图像分类的 CNN 模型(我有两个类)。我使用 ImageDataGenerator 进行数据准备,使用 model.fit_generator 进行训练。为了进行测试,我使用model.evaluate_generator。对于混淆矩阵,我使用 sklearn.metrics.confusion_matrix ,它需要实际和预测的类。我有测试数据的实际类别。对于预测,我使用 model.predict_generator 但我不知道如何获取预测类别。通常我使用 model.predict_classes 但它不适用于validation_generator。我的代码如下所示:

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
from sklearn.metrics import confusion_matrix

model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape=(50,50,1),activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Conv2D(32, (2, 2),activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Conv2D(64, (2, 2),activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Flatten())
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid'))

model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])

batch_size = 10

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
'data/train_data',
target_size=(50, 50),
batch_size=batch_size,
class_mode='binary',color_mode='grayscale')

validation_generator = test_datagen.flow_from_directory( 'data/test_data',target_size=(50, 50),
batch_size=batch_size,class_mode='binary',color_mode='grayscale')

model.fit_generator(train_generator,steps_per_epoch=542 ,epochs=10)

print(model.evaluate_generator(validation_generator))

我用下面的代码计算混淆矩阵和其他参数,并继续上面的代码,但我认为这是错误的,因为用 TP TN 公式计算的验证精度与用 model.evaluate_generator 计算的不匹配:

predict1_data=model.predict_generator(validation_generator)
predict_data=np.round(predict1_data)
print(train_generator.class_indices)
print(validation_generator.class_indices)
actual1=np.zeros(21)
actual1[13:21]=1
actual=np.float32(actual1)
cm = confusion_matrix(actual,predict_data)
TN=cm[0,0]
FP=cm[0,1]
FN=cm[1,0]
TP=cm[1,1]
SEN=TP/(TP+FN);print('SEN=',SEN)
SPE=TN/(TN+FP);print('SPE=',SPE)
ACC=(TP+TN)/(TP+TN+FP+FN);print('ACC=',ACC)

最佳答案

我正在尝试找出同样的事情。我最接近的是:

test_datagen = ImageDataGenerator(rescale=1. / 255)

# preprocess data for testing (resize) and create batches
validation_generator = test_datagen.flow_from_directory(
'data/test/',
target_size=(img_width, img_height),
batch_size=16,
class_mode=None,
shuffle=False,
)

print(validation_generator.class_indices)

print (model.predict_generator(validation_generator))

此输出属于 1 类(而不是 0 类)的概率。

关于keras - 使用 ImageDataGenerator 时如何获取预测类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47943492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com