杰瑞科技汇

tensorflow入门教程

TensorFlow 入门教程:从零到你的第一个神经网络

本教程将分为以下几个部分:

tensorflow入门教程-图1
(图片来源网络,侵删)
  1. TensorFlow是什么? —— 理解核心概念
  2. 环境搭建 —— 安装必要的软件
  3. 核心概念:TensorFlow的世界观 —— 张量、计算图、会话
  4. 实战演练:手写数字识别 —— MNIST数据集与Keras
  5. 模型评估与预测 —— 看看我们的模型表现如何
  6. 下一步该学什么? —— 持续学习的路径

TensorFlow是什么?

TensorFlow是一个由Google开发的开源机器学习框架,你可以把它想象成一个专门用于构建、训练和部署机器学习模型的“超级计算器”或“工厂流水线”。

  • TensorFlow 1.x (经典版):采用“静态计算图”模式,你需要先定义好整个计算流程(图),然后再运行它,这种模式对于生产环境部署非常友好,但对初学者来说不够直观。
  • TensorFlow 2.x (当前主流):默认采用“动态计算图”(Eager Execution)模式,代码写起来就像写普通的Python代码,可以立即看到结果,非常直观,它也集成了其高级API——Keras,让构建模型变得异常简单。

本教程将基于 TensorFlow 2.x 和 Keras 进行讲解。


环境搭建

最简单、最推荐初学者的方式是使用 Google Colab,它是一个免费的在线Jupyter Notebook环境,已经预装了TensorFlow和GPU,你无需在自己的电脑上安装任何东西。

使用Google Colab的步骤:

tensorflow入门教程-图2
(图片来源网络,侵删)
  1. 访问 https://colab.research.google.com/ 并用你的Google账户登录。
  2. 点击 "File" -> "New notebook" 创建一个新的Notebook。
  3. 在第一个代码单元格中,输入以下代码来检查TensorFlow是否已安装并查看其版本:
    import tensorflow as tf
    print("TensorFlow Version:", tf.__version__)
  4. 按下 Shift + Enter 运行单元格,如果看到版本号,说明环境已经就绪!

如果你希望在本地安装,可以使用 pip install tensorflow 命令。


核心概念:TensorFlow的世界观

在开始写代码前,了解几个核心概念会让你事半功倍。

a. Tensor (张量)

你可以把张量理解为多维数组,它是TensorFlow中最基本的数据结构。

  • 标量:0维张量,一个数字。5
  • 向量:1维张量,一列数字。[1, 2, 3]
  • 矩阵:2维张量,一个表格。[[1, 2], [3, 4]]
  • ...以此类推,可以有更高维度的张量。

在TensorFlow中,所有数据都通过张量来表示。

tensorflow入门教程-图3
(图片来源网络,侵删)

b. 计算图 与 Eager Execution (动态图)

  • Eager Execution (动态图):这是TensorFlow 2.x的默认模式,它允许你像写普通Python代码一样定义和计算操作,无需预先定义图,代码即执行,非常直观,非常适合研究和学习。

    # Eager Execution 示例
    a = tf.constant(2)
    b = tf.constant(3)
    c = a + b
    print(c)  # 输出: tf.Tensor(5, shape=(), dtype=int32)
  • 计算图 (静态图):这是TensorFlow 1.x的核心模式,你先定义好所有计算步骤(构建图),然后在一个“会话”中运行这个图,这种方式性能更高,优化更好,适合部署。

在2.x中,你可以通过 tf.function 装饰器轻松地将普通Python代码转换为静态图,从而获得性能提升。

c. Keras

Keras是一个高级神经网络API,它被集成在TensorFlow中 (tf.keras),Keras的核心理念是“用户友好”,它提供了简洁、一致的接口,让你能用几行代码就搭建起复杂的模型。


实战演练:手写数字识别

这是机器学习领域的 "Hello, World!",我们的目标是训练一个模型,能够识别0-9的手写数字图片。

步骤1:加载数据

TensorFlow内置了MNIST数据集,我们可以直接加载。

import tensorflow as tf
# 加载MNIST数据集
mnist = tf.keras.datasets.mnist
# 将数据集分为训练集和测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 查看数据格式
print("训练集图像形状:", x_train.shape) # (60000, 28, 28) - 60000张28x28的图片
print("训练集标签形状:", y_train.shape) # (60000,) - 60000个标签

步骤2:数据预处理

为了让模型更好地学习,我们需要对数据进行一些预处理。

  • 归一化:将像素值从 [0, 255] 的范围缩放到 [0, 1],这有助于模型的稳定和快速收敛。
# 将像素值归一化到0-1之间
x_train, x_test = x_train / 255.0, x_test / 255.0

步骤3:构建模型

我们将使用Keras的Sequential API来按顺序堆叠层。

  • Flatten:将28x28的2D图像“展平”成一个784(28*28)的一维向量。
  • Dense:全连接层。128 是该层的神经元数量,relu 是激活函数。
  • Dropout:在训练过程中随机丢弃一部分神经元,防止过拟合。
  • Dense:输出层。10 因为有10个类别(0-9),softmax 激活函数会输出每个类别的概率。
# 构建模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)), # 输入层,展平图像
    tf.keras.layers.Dense(128, activation='relu'),   # 隐藏层,128个神经元
    tf.keras.layers.Dropout(0.2),                    # Dropout层,防止过拟合
    tf.keras.layers.Dense(10, activation='softmax')  # 输出层,10个神经元,对应10个数字
])
# 查看模型结构
model.summary()

步骤4:编译模型

在训练之前,我们需要配置模型的优化器损失函数评估指标

  • Optimizer (优化器)adam 是一种常用且高效的优化算法。
  • Loss Function (损失函数)sparse_categorical_crossentropy 用于多分类问题,标签是整数形式。
  • Metrics (评估指标):我们关心模型的准确率。
# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

步骤5:训练模型

使用fit方法开始训练,我们将训练数据喂给模型,训练5个周期(epochs)。

# 训练模型
print("\n开始训练模型...")
model.fit(x_train, y_train, epochs=5)
print("模型训练完成!")

运行代码,你会看到每个epoch的损失和准确率在不断提升。


模型评估与预测

训练好的模型需要在它没见过的数据(测试集)上进行评估,以衡量其泛化能力。

步骤6:评估模型

# 在测试集上评估模型
print("\n在测试集上评估模型...")
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('\n测试集准确率:', test_acc)

你会发现测试集的准确率通常比训练集略低一些,这是正常现象。

步骤7:进行预测

我们可以用训练好的模型来预测一张图片了!

import numpy as np
import matplotlib.pyplot as plt
# 选择测试集中的第一张图片
image_to_predict = x_test[0]
true_label = y_test[0]
# 显示图片
plt.imshow(image_to_predict, cmap=plt.cm.binary)f"真实标签: {true_label}")
plt.show()
# 注意:模型期望输入是一个batch(即一个列表),所以需要用 [image_to_predict] 包装
predictions = model.predict([image_to_predict])
# 获取预测概率最高的类别
predicted_label = np.argmax(predictions)
print(f"模型预测的数字是: {predicted_label}")

下一步该学什么?

恭喜你!你已经成功构建并训练了你的第一个TensorFlow模型,你可以探索更广阔的世界:

  1. 更复杂的模型结构

    • 卷积神经网络:这是处理图像任务的“王者”,学习tf.keras.layers.Conv2Dtf.keras.layers.MaxPooling2D,你会发现图像识别的准确率会大幅提升。
    • 循环神经网络:用于处理序列数据,如文本、时间序列等。
  2. 数据处理

    • 学习使用tf.data API来构建高效的数据输入管道,这对于处理大规模数据集至关重要。
  3. 模型保存与加载

    • 使用model.save('my_model.h5')tf.keras.models.load_model('my_model.h5')来保存和加载你的模型,以便将来使用或部署。
  4. TensorBoard可视化

    学习使用TensorBoard来可视化训练过程中的损失、准确率等指标,以及模型结构。

  5. 部署模型

    将训练好的模型部署到网页、移动端或云端服务中,让其他人也能使用你的模型。

推荐资源

  • 官方文档https://www.tensorflow.org/tutorials (最好的学习资料)
  • DeepLearning.AI 课程:Andrew Ng在Coursera上的TensorFlow专项课程。
  • 实践项目:尝试在Kaggle上参加一些入门级的竞赛,如泰坦尼克号生还预测、房价预测等,将所学知识应用到实际问题中。

机器学习是一个实践性很强的领域,多写代码、多思考、多尝试,你一定会越学越好!

分享:
扫描分享到社交APP
上一篇
下一篇