2、针对MNIST数据集,利用Python实现基于全连接神经网络的数据分类分析,并对数据以及结果进行分析及可视化。包括测试集和训练集的混淆矩阵,每类准确率和总的准确率,损失函数曲线,写出完整代码
时间: 2024-12-19 20:26:11 浏览: 29
为了使用Python和Keras库实现对MNIST数据集的全连接神经网络分类,首先需要安装所需的库,如TensorFlow或Keras、NumPy、Matplotlib等。以下是完整的代码示例:
```python
# 导入所需库
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import numpy as np
import matplotlib.pyplot as plt
# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# 数据预处理
train_images = train_images / 255.0
test_images = test_images / 255.0
train_images = train_images.reshape(-1, 28*28)
test_images = test_images.reshape(-1, 28*28)
# 创建模型
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(784,)),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
history = model.fit(train_images, train_labels, epochs=10, validation_split=0.2)
# 预测并评估
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"Test accuracy: {test_acc}")
# 混淆矩阵
y_pred = model.predict_classes(test_images)
cm = tf.math.confusion_matrix(labels=test_labels, predictions=y_pred).numpy()
plt.figure(figsize=(10, 10))
sns.heatmap(cm, annot=True, fmt="d", cmap=plt.cm.Blues)
plt.xlabel("Predicted")
plt.ylabel("True")
plt.title("Confusion Matrix")
# 准确率计算
class_accuracy = np.diag(cm) / cm.sum(axis=1)
print("\nClass-wise Accuracy:")
for i in range(10):
print(f"Class {i}: {class_accuracy[i]}")
# 损失函数曲线
plt.figure(figsize=(12, 6))
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Loss Function Over Time')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
```
这个代码首先加载MNIST数据,对其进行预处理,然后创建一个简单的全连接神经网络,通过训练提高模型性能。最后,它绘制了混淆矩阵、计算了各类别的准确率,并展示了损失函数的变化情况。
阅读全文