TensorFlow 入门教程:从零到你的第一个神经网络
本教程将分为以下几个部分:

- TensorFlow是什么? —— 理解核心概念
- 环境搭建 —— 安装必要的软件
- 核心概念:TensorFlow的世界观 —— 张量、计算图、会话
- 实战演练:手写数字识别 —— MNIST数据集与Keras
- 模型评估与预测 —— 看看我们的模型表现如何
- 下一步该学什么? —— 持续学习的路径
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的步骤:

- 访问 https://colab.research.google.com/ 并用你的Google账户登录。
- 点击 "File" -> "New notebook" 创建一个新的Notebook。
- 在第一个代码单元格中,输入以下代码来检查TensorFlow是否已安装并查看其版本:
import tensorflow as tf print("TensorFlow Version:", tf.__version__) - 按下
Shift + Enter运行单元格,如果看到版本号,说明环境已经就绪!
如果你希望在本地安装,可以使用
pip install tensorflow命令。
核心概念:TensorFlow的世界观
在开始写代码前,了解几个核心概念会让你事半功倍。
a. Tensor (张量)
你可以把张量理解为多维数组,它是TensorFlow中最基本的数据结构。
- 标量:0维张量,一个数字。
5 - 向量:1维张量,一列数字。
[1, 2, 3] - 矩阵:2维张量,一个表格。
[[1, 2], [3, 4]] - ...以此类推,可以有更高维度的张量。
在TensorFlow中,所有数据都通过张量来表示。

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模型,你可以探索更广阔的世界:
-
更复杂的模型结构:
- 卷积神经网络:这是处理图像任务的“王者”,学习
tf.keras.layers.Conv2D和tf.keras.layers.MaxPooling2D,你会发现图像识别的准确率会大幅提升。 - 循环神经网络:用于处理序列数据,如文本、时间序列等。
- 卷积神经网络:这是处理图像任务的“王者”,学习
-
数据处理:
- 学习使用
tf.dataAPI来构建高效的数据输入管道,这对于处理大规模数据集至关重要。
- 学习使用
-
模型保存与加载:
- 使用
model.save('my_model.h5')和tf.keras.models.load_model('my_model.h5')来保存和加载你的模型,以便将来使用或部署。
- 使用
-
TensorBoard可视化:
学习使用TensorBoard来可视化训练过程中的损失、准确率等指标,以及模型结构。
-
部署模型:
将训练好的模型部署到网页、移动端或云端服务中,让其他人也能使用你的模型。
推荐资源:
- 官方文档:https://www.tensorflow.org/tutorials (最好的学习资料)
- DeepLearning.AI 课程:Andrew Ng在Coursera上的TensorFlow专项课程。
- 实践项目:尝试在Kaggle上参加一些入门级的竞赛,如泰坦尼克号生还预测、房价预测等,将所学知识应用到实际问题中。
机器学习是一个实践性很强的领域,多写代码、多思考、多尝试,你一定会越学越好!
