基于python类实现,手写数字识别, 三层网络【784,128,10】,损失函数softmax, epoch=200, 学习率0.01 准确代码
时间: 2024-09-26 10:10:48 浏览: 27
基于Python的`numpy`、`matplotlib`和`Keras`库,我们可以创建一个简单的全连接神经网络用于手写数字识别。以下是使用`Keras`构建一个包含三个隐藏层(每个层有128个节点)、输入层大小为784(对应MNIST数据集的手写图片像素),输出层大小为10(对应10个数字类别),使用Softmax作为激活函数的损失函数,并设置200个训练轮次(epoch)、学习率为0.01的一个示例:
```python
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = x_train.reshape(-1, 28 * 28) / 255.0
x_test = x_test.reshape(-1, 28 * 28) / 255.0
y_train = to_categorical(y_train, num_classes=10)
y_test = to_categorical(y_test, num_classes=10)
# 创建模型
model = Sequential([
Dense(128, activation='relu', input_shape=(784,)),
Dense(128, activation='relu'),
Dense(128, activation='relu'),
Dense(10, activation='softmax') # 输出层,使用Softmax激活
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
history = model.fit(x_train, y_train, epochs=200, validation_split=0.1, verbose=0) # 验证集比例设为10%
# 测试模型性能
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"测试集准确率: {test_acc}")
# 可视化训练过程
import matplotlib.pyplot as plt
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
```
在这个代码中,我们首先加载并预处理了MNIST数据,然后创建了一个顺序模型,设置了三个隐藏层和一个输出层。最后,我们编译模型、训练它并在测试集上评估其性能。
阅读全文