MINST数字识别采用避免过拟合的方式用python代码写出
时间: 2023-12-10 10:04:09 浏览: 21
以下是使用Python和Keras实现MNIST数字识别并采用避免过拟合的方式的示例代码:
```python
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 导入MNIST数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 将像素值缩放到 [0, 1] 的范围内
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
# 将标签转换为 one-hot 编码
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
# 定义模型
model = keras.Sequential(
[
keras.Input(shape=(784)),
layers.Dense(256, activation="relu"),
layers.Dropout(0.5), # 添加 Dropout 层
layers.Dense(128, activation="relu"),
layers.Dropout(0.5), # 添加 Dropout 层
layers.Dense(10, activation="softmax"),
]
)
# 编译模型
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
# 训练模型
model.fit(x_train, y_train, epochs=20, batch_size=128, validation_split=0.1)
# 在测试集上评估模型性能
test_loss, test_acc = model.evaluate(x_test, y_test)
print("Test accuracy:", test_acc)
```
在上面的代码中,我们使用了两个 Dropout 层,其中每个层的 Dropout 比例为 0.5,以减少神经元之间的耦合,防止过拟合。此外,我们还将验证集比例设置为 0.1,以便在训练过程中监测模型的性能,并使用 Adam 优化器编译模型。最后,我们在测试集上评估了模型的性能。