gpt4 book ai didi

python - 如何找到这个CNN模型(keras)的ROC曲线和AUC分数

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

我在keras中的CNN代码如下:

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Dropout

classifier = Sequential()
#1st Conv layer
classifier.add(Convolution2D(64, (9, 9), input_shape=(64, 64, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(4,4)))
#2nd Conv layer
classifier.add(Convolution2D(32, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2,2)))

#Flattening
classifier.add(Flatten())

# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dropout(0.1))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dropout(0.2))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 2, activation = 'softmax'))

classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

#Fitting dataset

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'categorical')

test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'categorical')

classifier.fit_generator(
training_set,
steps_per_epoch=(1341+3875)/32,
epochs=15,
validation_data=test_set,
validation_steps=(234+390)/32)

无论我在哪里看到 sklearn.metrics 中 roc_curve 的使用,它都采用 x_train、y_train、x_test、y_test 之类的参数,我知道这些参数可以是 pandas DataFrames,但在我的情况下并非如此。我如何绘制 ROC 曲线并获得 AUC 分数,用于像此处这样的 CNN 模型训练?

最佳答案

我成功了。我所要做的就是将从 preds = classifier.predict(test_set) 获得的预测数据类型与我从 labels = test_set 获得的 true_labels 相匹配。 Preds 基本上是一个 numpy.ndarray,包含具有 np.float32 值的单个元素列表。将标签转换为相同的格式和形状使 roc_curve 起作用。

此外,我必须在 fpr, tpr, threshold = roc_curve(true_labels, preds) 中添加第三个变量阈值,这样就不会弹出 ValueError: too many values to unpack 错误。

关于python - 如何找到这个CNN模型(keras)的ROC曲线和AUC分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61529293/

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