# mnist

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-04-25T12:06:00.000Z
> 分类: AI专区
> 标签: AI, 存储, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/379

---

# mnist

> 来源: 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\_train`、`y\_train`和`x\_test`、`y\_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]))