CNN(卷积神经网络)
import tensorflow as tf
from tensorflow.keras import layers, models
# 数据加载与预处理(保留空间结构)
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0 # 输入形状 (28,28,1)
x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0
# 构建CNN模型
model = models.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)), # 卷积层
layers.MaxPooling2D((2,2)), # 池化层
layers.Conv2D(64, (3,3), activation='relu'),
layers.MaxPooling2D((2,2)),
layers.Flatten(), # 展平为向量
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
# 编译与训练
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=64, validation_split=0.2)
# 评估
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"CNN测试准确率: {test_acc:.4f}")