mnist

AI 摘要 / TL;DR

MNIST(Modified National Institute of Standards and Technology)是一个著名的手写数字数据集,它包含了许多手写数字的灰度图像,其中每个图像的大小是28x28像素。该数据集被广泛用于测试和比较不同机器学习算法的性能。 在本文中,我们将介绍如何使用Python和机器

来源: https://www.ucloud.cn/yun/130754.html 作者: wapeyang 发布日期: 发布于2023-04-25 20:06

MNIST(Modified National Institute of Standards and Technology)是一个著名的手写数字数据集,它包含了许多手写数字的灰度图像,其中每个图像的大小是28x28像素。该数据集被广泛用于测试和比较不同机器学习算法的性能。 在本文中,我们将介绍如何使用Python和机器学习库TensorFlow来训练一个简单的神经网络来识别MNIST数据集中的手写数字。

准备工作

首先,我们需要安装TensorFlow和相关的Python库。在终端中输入以下命令:```

pip install tensorflow matplotlib numpy


我们还需要下载MNIST数据集,可以使用TensorFlow的内置函数进行下载:```
python
import tensorflow as tf

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

这将下载并加载MNIST数据集,将训练集和测试集分别存储在x\_trainy\_trainx\_testy\_test中。

构建模型

接下来,我们将构建一个包含3个全连接层的神经网络。首先,我们需要将输入数据展平为1维向量,然后将其输入到第一个全连接层中。每个全连接层后面都跟着一个ReLU激活函数和一个Dropout层,以避免过拟合。``` 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) ])


最后一层不使用激活函数,因为我们将在训练期间使用softmax来计算输出。
## 训练模型
接下来,我们需要编译并训练我们的模型。我们将使用adam优化器和交叉熵损失函数。```
python
model.compile(optimizer="adam",
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=["accuracy"])

model.fit(x_train, y_train, epochs=10)

这将对模型进行10个epoch的训练。我们可以使用测试集来评估模型的性能:``` python test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2) print("Test accuracy:", test_acc)


## 预测
最后,我们可以使用训练好的模型来预测新的手写数字。我们可以使用`matplotlib`库来显示图像,并使用`argmax`函数来查找模型输出中最大的元素的索引。
```python
import matplotlib.pyplot as plt
import numpy as np
# 显示图像
plt.imshow(x\_test[0], cmap=plt.cm.binary)
plt.show()
# 预测结果
predictions = model.predict(np.array([x\_test[0]]))
print(np.argmax(predictions[0]))