编写神经网络手写数字识别程序
时间: 2023-10-27 15:13:25 浏览: 37
好的,下面是一个简单的手写数字识别程序的示例代码。
首先,我们需要导入必要的库和数据集:
```python
import tensorflow as tf
from tensorflow.keras.datasets import mnist
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将像素值从 0-255 缩放到 0-1
x_train, x_test = x_train / 255.0, x_test / 255.0
```
接下来,我们可以定义一个包含两个隐藏层和一个输出层的神经网络模型:
```python
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
```
在这里,我们首先使用了一个 `Flatten` 层将输入的 28x28 的像素矩阵扁平化成一个 784 的一维向量。然后,我们定义了两个包含 128 和 64 个神经元的隐藏层,它们使用了 ReLU 激活函数。我们还加入了两个 `Dropout` 层,以减少模型的过拟合。最后,我们使用了一个包含 10 个神经元的输出层,使用了 softmax 函数进行多分类。
接下来,我们可以指定训练过程中的优化器、损失函数和衡量指标,然后开始训练模型:
```python
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
```
在这里,我们使用了 `adam` 优化器、`sparse_categorical_crossentropy` 损失函数和 `accuracy` 衡量指标。我们将模型训练了 10 个 epochs,并使用测试集进行了验证。
最后,我们可以使用测试集来评估模型的表现:
```python
model.evaluate(x_test, y_test)
```
完整的代码示例:
```python
import tensorflow as tf
from tensorflow.keras.datasets import mnist
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将像素值从 0-255 缩放到 0-1
x_train, x_test = x_train / 255.0, x_test / 255.0
# 定义神经网络模型
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
# 评估模型
model.evaluate(x_test, y_test)
```
希望这个示例可以帮助你入门手写数字识别程序的编写。