GitHub – 你的第一个TensorFlow项目教程 – wiki基地


你的第一个 TensorFlow 项目:手把手教你构建图像分类器

欢迎来到机器学习的世界!TensorFlow 是一个由 Google开发的强大开源库,广泛用于各种机器学习和深度学习任务。对于许多初学者来说,第一次接触 TensorFlow 可能会感到有些不知所措。

本教程旨在消除这种困惑,通过一个经典的项目——手写数字识别,一步步指导你完成从数据加载到模型训练和评估的全过程。我们将使用 TensorFlow 的高级 API Keras,它以用户友好和模块化而著称,非常适合快速搭建神经网络。

完成本教程后,你将亲手构建一个能够识别图片中数字的神经网络,并对深度学习的基本工作流程有一个清晰的认识。

第一步:环境准备

在开始编码之前,你需要一个能够运行 TensorFlow 的环境。

  • 推荐方式:Google Colaboratory (Colab)
    这是最简单的方式,无需在你的电脑上安装任何东西。Colab 是一个免费的 Jupyter Notebook 环境,预装了 TensorFlow 等常用库,可以直接在浏览器中编写和运行 Python 代码。你只需要一个 Google 帳號。

  • 本地安装
    如果你希望在自己的电脑上进行开发,首先确保你已经安装了 Python 和 pip。然后,在你的终端或命令行中运行以下命令来安装 TensorFlow:
    bash
    pip install tensorflow

第二步:加载并准备数据

我们将使用经典的 MNIST 数据集,它包含了 70,000 张 28x28 像素的灰度手写数字图片(从 0 到 9)及其对应的标签。Keras 库已经内置了这个数据集,加载它非常简单。

“`python
import tensorflow as tf

1. 加载 MNIST 数据集

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

2. 数据归一化

将像素值从 0-255 的整数范围缩放到 0-1 的浮点数范围

x_train, x_test = x_train / 255.0, x_test / 255.0
“`

数据归一化是一个常见的预处理步骤。它能帮助神经网络更快、更稳定地进行训练。

第三步:构建神经网络模型

现在,让我们来搭建神经网络。我们将使用 tf.keras.Sequential 模型,它允许我们像堆叠积木一样,一层一层地构建网络。

“`python

3. 定义模型结构

model = tf.keras.models.Sequential([
# 将 28×28 的二维图像“压平”成一个 784 维的一维向量
tf.keras.layers.Flatten(input_shape=(28, 28)),

# 中间的全连接层,有 128 个神经元,使用 ReLU 激活函数
tf.keras.layers.Dense(128, activation=’relu’),

# Dropout 层,训练时随机“丢弃”20%的神经元,防止过拟合
tf.keras.layers.Dropout(0.2),

# 输出层,有 10 个神经元,对应 0-9 十个类别
tf.keras.layers.Dense(10)
])
``
我们的模型结构很简单:
1. **Flatten 层**: 将输入的
28×28图像矩阵转换成一个784元素的一维数组,作为神经网络的输入。
2. **Dense 层**: 一个包含 128 个神经元的全连接层。
relu` (Rectified Linear Unit) 是一个常用的激活函数,它为模型引入了非线性。
3. Dropout 层: 一种正则化技术。在训练过程中,它会随机将一些神经元的输出设置为零,这有助于防止模型“死记硬背”训练数据(即过拟合)。
4. 输出层 (Dense): 最终的输出层,包含 10 个神经元,每个神经元对应一个数字类别(0-9)。

第四步:编译模型

模型搭建完成后,我们需要在训练前对其进行“编译”。在这一步,我们要为模型配置三样东西:
* 优化器 (Optimizer): 更新模型权重以减少损失的算法。adam 是一个高效且常用的优化器。
* 损失函数 (Loss Function): 衡量模型预测结果与真实标签之间差距的函数。SparseCategoricalCrossentropy 适用于我们这种多分类问题。
* 评估指标 (Metrics): 用于监控训练和测试步骤的指标。这里我们关心的是 accuracy(准确率)。

“`python

4. 编译模型

model.compile(optimizer=’adam’,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[‘accuracy’])
``from_logits=True参数告诉损失函数,模型的输出值是原始的、未经softmax` 激活的数值。

第五步:训练模型

一切准备就绪,现在我们可以开始训练模型了!我们使用 model.fit() 方法,将训练数据 (x_train, y_train) “喂”给模型。epochs 参数指定了训练的轮数,即模型将完整地遍历整个训练数据集 5 次。

“`python

5. 训练模型

model.fit(x_train, y_train, epochs=5)
“`
在训练过程中,你会看到每一轮的损失值(loss)和准确率(accuracy)都在不断优化。

第六步:评估模型性能

模型训练好了,但它在从未见过的数据上表现如何?我们需要用测试集 (x_test, y_test) 来评估它的泛化能力。

“`python

6. 在测试数据上评估模型

print(“\n# 在测试集上评估模型”)
model.evaluate(x_test, y_test, verbose=2)
``model.evaluate()` 会返回损失值和准确率。通常,在测试集上的准确率会略低于训练集,但如果二者相差不大,说明我们的模型泛化能力良好。你很可能会得到一个约 97% 的准确率,对于这样一个简单的模型来说,效果相当不错!

总结与展望

恭喜你!你已经成功完成了你的第一个 TensorFlow 项目。让我们回顾一下整个流程:
1. 加载数据: 从 Keras 中获取 MNIST 数据集。
2. 预处理数据: 进行归一化。
3. 构建模型: 使用 Sequential API 搭建一个简单的神经网络。
4. 编译模型: 配置优化器、损失函数和评估指标。
5. 训练模型: 使用 fit() 方法在训练数据上进行训练。
6. 评估模型: 使用 evaluate() 方法检验模型在测试数据上的性能。

这只是冰山一角。接下来,你可以尝试:
* 调整超参数: 改变 epochs 的数量、Dense 层的神经元数量,看看对结果有何影响。
* 更换数据集: 尝试使用 fashion_mnist 数据集,看看同样模型在分类衣物图片时表现如何。
* 深入学习: 访问 TensorFlow 官方网站GitHub 上的示例,探索更复杂的模型和应用。

希望这个教程能为你打开深度学习的大门。祝你在机器学习的旅程中不断进步!

滚动至顶部