给我一个从本地加载的图片二分类cnn网络的代码,并绘制其roc曲线和混淆矩阵
时间: 2024-11-23 08:39:30 浏览: 20
在Python中,我们可以使用Keras库(它是TensorFlow的一个高级API)来创建一个简单的卷积神经网络(CNN)模型,用于图像二分类。这里是一个基本的例子:
```python
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
from sklearn.metrics import roc_curve, confusion_matrix, plot_confusion_matrix
# 加载本地数据集(假设我们已经有了训练集和测试集)
(x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data() # 用CIFAR-10数据集作为例子
# 数据预处理
x_train = x_train / 255.0
x_test = x_test / 255.0
y_train = tf.keras.utils.to_categorical(y_train, num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)
# 创建CNN模型
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
# 预测并计算ROC曲线
y_pred = model.predict(x_test)
y_pred_class = np.argmax(y_pred, axis=1)
fpr, tpr, _ = roc_curve(y_test.argmax(axis=1), y_pred[:, 1]) # 对于二分类问题,通常关注的是第二类的假正率和真正率
# 绘制ROC曲线
plt.plot(fpr, tpr)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC)')
plt.show()
# 计算混淆矩阵
conf_mat = confusion_matrix(y_test.argmax(axis=1), y_pred_class)
plot_confusion_matrix(model, x_test, y_test)
plt.show()
```
这个代码示例首先加载了CIFAR-10数据集,然后构建了一个简单的CNN模型进行图像二分类。之后,它训练模型并预测结果,接着计算并绘制ROC曲线以及生成混淆矩阵。
阅读全文