news 2026/9/30 2:29:17

TensorFlow-Examples 项目 TensorFlow 2.0 实战指南:从入门示例到多 GPU 训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TensorFlow-Examples 项目 TensorFlow 2.0 实战指南:从入门示例到多 GPU 训练
  • 示例工程
  • 机器学习

【免费下载链接】TensorFlow-Examples

TensorFlow Tutorial and Examples for Beginners (support TF v1 & v2)

项目地址:https://gitcode.com/gh_mirrors/te/TensorFlow-Examples
点击查看免费下载

本篇技术指南以 TensorFlow-Examples 仓库中的 tensorflow_v2/README.md 为核心骨架,系统梳理该项目面向 TensorFlow 2.x 的 20+ 个 Notebook 示例,覆盖 Tensor 基础操作、经典回归/分类模型、神经网络、生成模型、模型保存与可视化、数据管理与多 GPU 训练等完整学习路径。读完本文,你将掌握该仓库 TF v2 目录下的全部示例结构、每个示例的核心实现要点(含关键超参数与源码证据),并能够按图索骥地运行和改造这些示例。

仓库结构与 TF v2 示例总览

TensorFlow-Examples 是一个面向初学者的 TensorFlow 教程仓库,同时提供 Notebook 与源码两种形态,并分别维护 TF v1 与 TF v2 两套示例。从仓库根目录的 README.md 可以看到,作者在 2020 年 5 月将默认示例全部迁移到 TF2,TF v1 示例则保留在tensorflow_v1/目录中。

TF v2 的所有示例都以 Jupyter Notebook 形式存放在tensorflow_v2/notebooks/下,按主题划分为 7 个章节(0–6),共 26 个 Notebook。需要特别说明的是:从各 Notebook 的kernelspec元数据(如"name": "python2"、"version": "2.7")可以推断,这些示例虽使用 TF 2.x API(如tf.GradientTape、tf.data、KerasModel/layers),但最初是在 Python 2 内核环境下运行的,属于该仓库早期的历史遗留设定;在现代环境中建议使用 Python 3 + TensorFlow 2.x 运行,代码主体无需修改。

章节主题示例数涉及 Notebook
0前置知识2机器学习入门、MNIST 数据集入门
1入门2Hello World、Tensor 基础运算
2基础模型4线性回归、逻辑回归、Word2Vec、GBDT
3神经网络9MLP、CNN、RNN/LSTM(单向/双向/动态)及无监督 AE、DCGAN
4工具3模型保存恢复、自定义层、TensorBoard
5数据管理3数据加载解析、TFRecords、图像增强
6硬件1多 GPU 训练

环境安装

根据 tensorflow_v2/README.md 的 Installation 一节,安装 TensorFlow 2.0 只需一行命令:

pip install tensorflow==2.0.0

如需 GPU 支持:

pip install tensorflow_gpu==2.0.0
git clone https://gitcode.com/gh_mirrors/te/TensorFlow-Examples

克隆后进入tensorflow_v2/notebooks/即可用 Jupyter 逐章运行各示例。多数示例依赖的 MNIST、CIFAR-10、Boston Housing 等数据集均由tensorflow.keras.datasets自动下载,无需手工准备。

1. 前置知识(0_Prerequisite)

  • ml_introduction.ipynb:机器学习核心概念(训练/测试、特征、标签、损失、优化)入门;
  • mnist_dataset_intro.ipynb:MNIST 手写数字数据集的说明。该数据集包含 60,000 张训练图像和 10,000 张测试图像,图像为 28×28 像素、像素值范围 0–255,在后继示例中统一被转为 float32、归一化到 [0, 1],并按需展平为 784 维向量。

2. 入门:Tensor 与 Eager 执行(1_Introduction)

Hello World:Tensor 的创建与取值

helloworld.ipynb 是最简单的起点,演示 TF 2 中张量(Tensor)的创建与取值:

import tensorflow as tf # 创建常量张量 hello = tf.constant("hello world") print(hello) # 输出: tf.Tensor(hello world, shape=(), dtype=string) # 通过 numpy() 取回 Python 值 print(hello.numpy()) # 输出: b'hello world'

关键点在于:TF 2 默认开启 Eager 执行,张量可直接打印;若要取回底层值,调用.numpy()。这与 TF 1 的Session.run()模式有本质区别。

Tensor 基础运算

basic_operations.ipynb 覆盖四类基础操作:

a = tf.constant(2) b = tf.constant(3) c = tf.constant(5) # 四则运算(也支持 Python 运算符 + - * /) add = tf.add(a, b) # 5 sub = tf.subtract(a, b) # -1 mul = tf.multiply(a, b) # 6 div = tf.divide(a, b) # 0.6666666666666666 # 归约运算 tf.reduce_mean([a, b, c]) # 3 tf.reduce_sum([a, b, c]) # 10 # 矩阵乘法 matrix1 = tf.constant([[1., 2.], [3., 4.]]) matrix2 = tf.constant([[5., 6.], [7., 8.]]) product = tf.matmul(matrix1, matrix2) # [[19., 22.], [43., 50.]]

示例强调 Tensor 支持 Python 原生运算符重载,且可通过.numpy()与 NumPy 无缝互转(product.numpy()返回array([[19., 22.], [43., 50.]], dtype=float32))。这是整个仓库所有后续示例的数据交互基础。

3. 基础模型(2_BasicModels)

线性回归:底层手写训练循环

linear_regression.ipynb 采用 low-level 方式演示线性回归,核心超参数为learning_rate=0.01、training_steps=1000、display_step=50。核心实现:

# 随机初始化权重与偏置 W = tf.Variable(rng.randn(), name="weight") b = tf.Variable(rng.randn(), name="bias") def linear_regression(x): return W * x + b def mean_square(y_pred, y_true): return tf.reduce_mean(tf.square(y_pred - y_true)) optimizer = tf.optimizers.SGD(learning_rate) def run_optimization(): with tf.GradientTape() as g: # 自动微分上下文 pred = linear_regression(X) loss = mean_square(pred, Y) gradients = g.gradient(loss, [W, b]) optimizer.apply_gradients(zip(gradients, [W, b]))

训练循环每 50 步打印一次 loss、W、b。从 notebook 的输出可见 loss 由 step 50 的 0.210631 单调下降至 step 1000 的 0.090231,最后用 matplotlib 绘制原始数据点与拟合直线。该示例完整展示了 TF 2 训练的最小闭环:GradientTape记录前向计算 → 求梯度 →apply_gradients更新变量。

逻辑回归:softmax 与交叉熵

logistic_regression.ipynb 在 MNIST 上做 10 分类,仍是 low-level 风格。参数:learning_rate=0.01、training_steps=1000、batch_size=256。模型为W(shape [784, 10],此处用tf.ones初始化)与b(shape [10]):

def logistic_regression(x): return tf.nn.softmax(tf.matmul(x, W) + b) def cross_entropy(y_pred, y_true): y_true = tf.one_hot(y_true, depth=num_classes) # 标签转 one-hot y_pred = tf.clip_by_value(y_pred, 1e-9, 1.) # 裁剪避免 log(0) return tf.reduce_mean(-tf.reduce_sum(y_true * tf.math.log(y_pred), 1))

训练数据通过tf.data.Dataset.from_tensor_slices(...).repeat().shuffle(5000).batch(batch_size).prefetch(1)构建,这是仓库几乎所有示例共用的标准数据管线写法。

Word2Vec:skip-gram 词嵌入

word2vec.ipynb 实现 skip-gram 模型,用 Wikipedia 文本切片(text8)训练。关键超参数如下表:

参数值含义
learning_rate0.1SGD 学习率
batch_size128每批样本数
num_steps3,000,000总训练步数
embedding_size200词向量维度
max_vocabulary_size50,000词典最大词数
min_occurrence10低于该频次的词替换为 UNK
skip_window3上下文窗口(左右各 3)
num_skips2每个中心词采样生成 2 个训练对
num_sampled64NCE 负采样个数

实现要点:

  • 数据预处理用collections.Counter统计词频,低频词归入UNK(id 0);
  • next_batch使用双端队列维护滑动窗口生成 (中心词, 上下文词) 样本对;
  • 因tf.nn.nce_loss等算子与 GPU 不完全兼容,示例把 embedding、NCE 权重、NCE 损失全部放在/cpu:0上;
  • 评估阶段对['five', 'of', 'going', 'hardware', 'american', 'britain']计算余弦相似度并输出 top-8 近邻词。从 notebook 输出可见,训练到 2,000,000 步后,"britain"的近邻已收敛为china, europe, country, throughout, france, canada, england, western等语义相关词,说明嵌入质量随训练显著提升。

GBDT:BoostedTrees 分类与回归

gradient_boosted_trees.ipynb 使用波士顿房价数据集(13 个特征),同时演示分类与回归两种任务。训练参数:max_steps=2000、batch_size=256、learning_rate=1.0、l1_regul=0.0、l2_regul=0.1;GBDT 参数:n_batches_per_layer=1000、num_trees=10、max_depth=4。

分类任务将房价 ≥ $23,000 置为类别 1,否则为 0:

gbdt_classifier = tf.estimator.BoostedTreesClassifier( n_batches_per_layer=num_batches_per_layer, feature_columns=feature_columns, n_classes=num_classes, learning_rate=learning_rate, n_trees=num_trees, max_depth=max_depth, l1_regularization=l1_regul, l2_regularization=l2_regul)

回归任务则直接预测房价原值。Notebook 输出显示:分类器在测试集上 accuracy=0.7843、auc=0.8458;回归器测试集average_loss=30.20。该示例同时展示了三个细节:一是os.environ["CUDA_VISIBLE_DEVICES"] = ""显式禁用 GPU(当时 TF 的 GBDT 实现不支持 GPU);二是输入函数使用tf.compat.v1.estimator.inputs.numpy_input_fn;三是 GBDT Estimator 必须配合tf.feature_column.numeric_column特征列使用。

4. 神经网络(3_NeuralNetworks)

有监督:全连接、卷积与循环网络

简单神经网络(MLP)——neural_network.ipynb 用 KerasModel+layers高层 API 构建 2 个隐藏层(128、256 神经元)的全连接网络,参数learning_rate=0.1、training_steps=2000、batch_size=256。模型定义方式为继承Model并实现__init__(声明layers.Dense)与call(前向传播):

class NeuralNet(Model): def __init__(self): super(NeuralNet, self).__init__() self.fc1 = layers.Dense(n_hidden_1, activation=tf.nn.relu) self.fc2 = layers.Dense(n_hidden_2, activation=tf.nn.relu) self.out = layers.Dense(num_classes) def call(self, x, is_training=False): x = self.fc1(x); x = self.fc2(x); x = self.out(x) if not is_training: x = tf.nn.softmax(x) # 训练时输出 logits,评估时加 softmax return x

损失用tf.nn.sparse_softmax_cross_entropy_with_logits(注意训练时传 logits 而非概率),优化器为 SGD,最终测试集准确率 0.9207。

卷积神经网络(CNN)——convolutional_network.ipynb 结构为:Conv2D(32, kernel=5, relu)→MaxPool2D(2, strides=2)→Conv2D(64, kernel=3, relu)→MaxPool2D→Flatten→Dense(1024)→Dropout(0.5)→Dense(10)。参数:learning_rate=0.001(Adam)、training_steps=200、batch_size=128。Dropout 仅在训练时启用(self.dropout(x, training=is_training)),测试集准确率 0.9777,明显高于 MLP。仓库另提供 convolutional_network_raw.ipynb,用tf.Variable手工实现卷积核与全连接权重的底层版本。

循环神经网络(RNN/LSTM)——同一章节还包含三类序列模型,均针对 MNIST(把 28×28 图像按行当作 28 步、每步 28 维的序列):

  • recurrent_network.ipynb:标准 LSTM;
  • bidirectional_rnn.ipynb:双向 LSTM(同时看前向与后向上下文);
  • dynamic_rnn.ipynb:动态 RNN,可处理变长序列。

以上示例统一使用layers.LSTM类接口(如layers.LSTM(units, return_sequences=..., return_state=...)),配合Model子类化组织。

无监督:自编码器与 DCGAN

  • autoencoder.ipynb:自编码器,将图像编码到低维表示后再重建;
  • dcgan.ipynb:深度卷积生成对抗网络,从 100 维噪声生成 MNIST 数字图像。关键参数:生成器与判别器学习率均为0.0002、training_steps=20000、batch_size=128、noise_dim=100。生成器由Dense(7*7*128)+BatchNormalization+Conv2DTranspose(64, 5, strides=2, padding='SAME')+Conv2DTranspose(1, 5, strides=2, padding='SAME')组成,激活函数使用tf.nn.leaky_relu。示例参考了 Radford 等人 2016 年的 DCGAN 论文与 Batch Normalization 论文中的训练技巧。

5. 实用工具(4_Utils)

保存与恢复模型:两种路径

save_restore_model.ipynb 同时演示低层 Checkpoint 与高层 Model 保存:

低层方式(TF Checkpoint)——适合保存变量与优化器状态:

checkpoint = tf.train.Checkpoint(**{"W": W, "b": b, "optimizer": optimizer}) saver = tf.train.CheckpointManager(checkpoint, directory="./tf-example", max_to_keep=5) saver.save() # 输出 './tf-example/ckpt-1' # 重置 W、b 后恢复 checkpoint = tf.train.Checkpoint(**{"W": W, "b": b, "optimizer": optimizer}) checkpoint.restore(tf.train.latest_checkpoint("./tf-example"))

Notebook 中通过np.mean(W.numpy())验证:保存前为 -0.09673191,重置后变为 -0.00834(随机值),restore 后恢复为 -0.09673191,证明权重正确还原。

高层方式(TF Model saver)——适合保存 Keras 模型的全部权重:

neural_net.save_weights(filepath="./tfmodel.ckpt") # 重建模型(默认初始化)后加载 neural_net = NeuralNet() neural_net.load_weights(filepath="./tfmodel.ckpt")

加载前精度仅 0.1016(随机初始化),加载后恢复至 0.9609。

自定义层与模块

build_custom_layers.ipynb 讲解如何继承layers.Layer或Model编写自定义层,并将其集成进 TF 2 模型中。这是构建可复用、可序列化模型组件的关键能力,也是子类化 API 的进阶用法。

TensorBoard 可视化

tensorboard.ipynb 演示计算图、标量与权重直方图的可视化。关键操作:

logs_path = '/tmp/tensorflow_logs/example/' summary_writer = tf.summary.create_file_writer(logs_path) # 第一步启用图追踪并导出 if step == 1: tf.summary.trace_on(graph=True, profiler=True) run_optimization(batch_x, batch_y) with summary_writer.as_default(): tf.summary.trace_export(name="trace", step=0, profiler_outdir=logs_path) # 周期性写入标量与权重直方图 with summary_writer.as_default(): tf.summary.scalar('loss', loss, step=step) tf.summary.scalar('accuracy', acc, step=step) summarize_weights(step) # 内部对每个权重调用 tf.summary.histogram

为让图结构更清晰,前向计算使用@tf.function并用tf.name_scope划分 HiddenLayer1/HiddenLayer2/LogitsLayer 等作用域。启动命令:

tensorboard --logdir=/tmp/tensorflow_logs

随后浏览器访问http://localhost:6006即可查看。注意:原 Notebook 中引用的resources/img/tf2/截图目录在当前仓库快照中不存在,读者以实际运行 TensorBoard 的结果为准。

6. 数据管理(5_DataManagement)

数据加载与解析

load_data.ipynb 系统演示用tf.data构建高效数据管线,覆盖 NumPy 数组、图像、CSV 文件与自定义数据等多种输入形态,是from_tensor_slices、map、shuffle、batch、prefetch等算子的综合演练。

TFRecords

tfrecords.ipynb 以泰坦尼克号乘客数据集(CSV 格式)为例,演示如何将结构化数据解析为 TFRecord 格式再读回。数据字段如下:

字段含义
survived是否幸存(0=否;1=是)
pclass舱位等级(1/2/3 等)
name乘客姓名
sex性别
age年龄
sibsp船上兄弟姐妹/配偶数
parch船上父母/子女数
ticket票号
fare票价

示例展示了tf.io序列化与tf.data.TFRecordDataset反序列化的完整流程,为大规模数据落盘与训练输入做好准备。

图像增强

image_transformation.ipynb 使用 TF 2 对图像施加翻转、裁剪、旋转、亮度/对比度调整等增强手段,为训练生成多样化样本,是图像分类任务中提升泛化能力的常用技巧。

7. 硬件:多 GPU 训练(6_Hardware)

multigpu_training.ipynb 在 CIFAR-10 数据集(60,000 张 32×32 彩色图、10 类)上训练一个三层卷积网络,使用数据并行策略:num_gpus=4,总batch_size=1024*num_gpus并平均分给各 GPU。同步更新流程为:每块 GPU 处理一份独立 batch 并计算梯度 → 梯度在 CPU 聚合求平均 → 更新模型权重并同步回各 GPU。网络结构为三组Conv2D(64/128/256, kernel=3, padding='SAME', relu)+ 池化的堆叠,配合Dense(2048)。示例提醒:若遇到显存不足(OOM),应降低 batch_size。

学习路径与运行建议

综合各章节,推荐的进阶顺序是:先用1_Introduction建立 Tensor/Eager 心智模型 → 用2_BasicModels中的线性/逻辑回归理解GradientTape训练闭环 → 进入3_NeuralNetworks掌握Model子类化与卷积/循环网络 → 用4_Utils学会模型持久化、自定义层与 TensorBoard 调试 → 用5_DataManagement构建生产级数据管线 → 最后用6_Hardware扩展到多卡训练。其中neural_network_raw与convolutional_network_raw两个底层版本与高层 API 版本互为对照,非常适合用来理解框架 API 背后的梯度计算与参数更新机制。

运行环境方面,建议以 Python 3 + TensorFlow 2.x(当前主流版本)执行各 Notebook;若复用仓库中pip install tensorflow==2.0.0的安装指引,则对应 TF 2.0 早期版本,个别 API(如tf.compat.v1.estimator.inputs.numpy_input_fn)在后续版本中已逐步收敛到tf.data体系,但示例核心思想与代码结构完全可移植。

  • 示例工程
  • 机器学习

【免费下载链接】TensorFlow-Examples

TensorFlow Tutorial and Examples for Beginners (support TF v1 & v2)

项目地址:https://gitcode.com/gh_mirrors/te/TensorFlow-Examples
点击查看免费下载

相关推荐

上一篇:免费开源的 Windows 系统级音频均衡器:Equalizer APO 从安装到调音一次搞懂
下一篇:Onekey 完整指南:输入 App ID,5 步完成 Steam 游戏 DLC 清单下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 2:27:08

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 2

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 2 3.2 Bean 的作用域 作用域是一个很关键的概念,理解这个概念对学习 Spring Framework 中 Bean 的作用域很有帮助。 3.2.1 理解作用域 Java 语言的基础概念:成员变量、方…

作者头像 李华
网站建设 2026/9/30 2:24:54

具身智能创新设计方案(50):TVA-VLA协同运作机制与十大典型案例

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

作者头像 李华
网站建设 2026/9/30 2:23:21

Linux 主机间ping 不通?这 8 个原因你排查全了吗?

两台 Linux 主机 ping 不通?这 8 个原因你排查全了吗? 线上两台服务器突然 ping 不通了,网络工程师说是防火墙的问题,系统管理员说是内核参数的问题,开发说是网络设备的问题……到底谁说的对?今天一文帮你理清所有可能的原因。 背景 "ping 不通"是运维工作中最…

作者头像 李华