mnist
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\_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]))