来一个手写数字识别代码
时间: 2023-03-19 07:21:35 浏览: 90
好的,以下是一个基于Python和TensorFlow的手写数字识别代码示例:
```
import tensorflow as tf
from tensorflow.keras.datasets import mnist
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将像素值归一化到 [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(10)
])
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
# 评估模型
model.evaluate(x_test, y_test)
# 使用模型进行预测
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])
predictions = probability_model.predict(x_test)
# 输出预测结果
print(predictions[0])
print(tf.argmax(predictions[0]))
```
该代码使用了 TensorFlow 框架,首先加载了 MNIST 数据集,将训练数据和测试数据分别存储在变量 `x_train`、`y_train`、`x_test` 和 `y_test` 中。接着,将像素值归一化到 [0, 1] 的范围内,以便更好地训练模型。
然后,使用 `Sequential` 模型构建了一个简单的神经网络,包含了一个输入层、一个包含 128 个神经元的隐藏层、一个 Dropout 层和一个输出层。其中,激活函数使用了 ReLU,损失函数使用了交叉熵,优化器使用了 Adam。
模型编译好之后,使用 `fit` 方法对模型进行训练,设置了 5 个 epoch。训练完成之后,使用 `evaluate` 方法评估了模型的性能。
最后,使用模型对测试数据进行预测,将输出的结果进行 Softmax 处理,得到了每个数字的概率分布。对于每个测试数据,输出预测结果和模型预测的数字。