TensorFlow-Course 开源教程仓库全指南:从环境安装到 CNN 分类器的完整学习路径
2026/9/21 16:14:53 网站建设 项目流程
  • 教程
  • 深度学习
  • 机器学习

【免费下载链接】TensorFlow-Course

:satellite: Simple and ready-to-use tutorials for TensorFlow

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

TensorFlow-Course 是一个以“简单、即拿即用”为核心理念的 TensorFlow 教程仓库,每个教程都配套可运行的 Python 源码与 Jupyter Notebook,并附有独立文档。本文以仓库首页文档(docs/index.rst 及其引入的 README.rst)为主线,完整梳理项目定位、环境安装、六大教程分类与源码结构,并结合 docs/tutorials/installation/README.rst 等配套文档,讲透从零搭建 TensorFlow 环境到训练 CNN 图像分类器的每一步。


项目概览:这个仓库解决什么问题

该仓库的目标是提供简单、可直接使用的 TensorFlow 教程。每一个教程都包含source code(源码),且大多数教程配有独立的documentation(文档)。从仓库结构看,源码统一放在 codes/ 目录下,以pythonipython两个子目录分别承载.py脚本与.ipynbNotebook;配套文档则位于 docs/tutorials/ 目录。

项目状态说明:该仓库已更新到 TensorFlow 2.3(见 README.rst 中的 Status 声明),因此教程中的代码以 TF 2.x 时代的实践为基础编写。

仓库文档使用 Sphinx 构建,docs/conf.py 中master_doc = 'index'source_suffix = '.rst',首页 docs/index.rst 通过.. include:: ../README.rst直接引入仓库根 README,因此本文的骨架即仓库完整的官方教程目录与安装指引。

TensorFlow 简介与项目动机

TensorFlow 是什么?按首页文档的定义:TensorFlow 是一个开源的软件库,用于跨任务的数据流编程(dataflow programming),同时也是一个符号数学库,常被用于神经网络等机器学习应用。它在 Google 内部既用于研究也用于生产,并取代了其闭源前身 DistBelief。TensorFlow 由 Google Brain 团队开发,于 2015 年 11 月 9 日以 Apache 2.0 开源许可证发布。

为什么选择 TensorFlow?文档给出的理由是:深度学习对算法与架构的快速、优化实现有迫切需求,而 TensorFlow 正为此设计。它的强大优势在于设计高度模块化模型时的灵活性——但这对初学者也可能是一大劣势,因为创建模型时必须同时考虑大量组件。这一痛点已通过 Keras、Slim 等高层 API 得到缓解,它们抽象了设计机器学习算法时的大量拼图。此外,TensorFlow 社区庞大且增长迅速,研究者与开发者遇到的常见问题往往已有现成解决方案。

这个仓库的独特之处?文档明确指出:项目并非“为了开源而开源”。市面上的 TensorFlow 教程要么过于复杂,要么缺少文档,只有少数教程既简洁、结构良好,又能为具体的模型实现提供足够洞见。因此本项目的宗旨是:用结构化的教程与简洁、优化的代码实现,帮助社区快速、高效地掌握 TensorFlow,核心目标是“提供文档完善的教程与不复杂的代码”。

安装与环境准备

首页文档明确推荐使用虚拟环境进行安装,以避免包冲突并保留自定义工作环境的灵活性。完整的源码级安装指引收录于 docs/tutorials/installation/README.rst,其核心流程如下:

1. 准备环境(按顺序执行)

  • TensorFlow Python 依赖安装(终端执行):
sudo apt-get install python-numpy python-dev python-pip python-wheel python-virtualenv sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel python3-virtualenv

第二行针对 Python 3。

  • Bazel 安装:源码编译依赖 Bazel 构建工具。文档特别警告:Bazel 安装可能改变 GPU 支持的内核版本,若未同步更新 GPU 驱动,评估 TensorFlow 安装时会报错:
kernel version X does not match DSO version Y -- cannot find working devices in this configuration

解决办法是清除并重装/更新 NVIDIA 驱动。

  • TensorFlow GPU 前置条件
    • NVIDIA CUDA Toolkit 及配套驱动(推荐版本 8.0);
    • cuDNN 库(推荐版本 5.1);
    • 安装libcupti-devsudo apt-get install libcupti-dev

2. 创建虚拟环境(可选但推荐)

sudo mkdir ~/virtualenvs sudo virtualenv --system-site-packages ~/virtualenvs/tensorflow

激活环境并配置别名,避免每次输入冗长命令:

source ~/virtualenvs/tensorflow/bin/activate echo 'alias tensorflow="source $HOME/virtualenvs/tensorflow/bin/activate" ' >> ~/.bash_aliases bash

之后只需在终端输入tensorflow即可激活环境。同时应检查~/.bash_aliases中确实包含该 alias,且~/.bashrc中存在加载.bash_aliases的片段(if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases; fi)。

3. 配置源码安装

克隆 TensorFlow 源码仓库后进入目录,运行配置脚本。配置过程中的关键 flag 直接决定了安装的兼容性,典型交互如下:

$ ./configure Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python2.7 Please specify optimization flags to use during compilation ... [Default is -march=native]: Do you wish to use jemalloc as the malloc implementation? [Y/n] Y Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N Do you wish to build TensorFlow with Hadoop File System support? [y/N] N Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N Please input the desired Python library path to use. Default is [/usr/local/lib/python2.7/dist-packages] Do you wish to build TensorFlow with OpenCL support? [y/N] N Do you wish to build TensorFlow with CUDA support? [y/N] Y Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 8.0 Please specify the location where CUDA 8.0 toolkit is installed. [Default is /usr/local/cuda]: Please specify the cuDNN version you want to use. [Leave empty to use system default]: 5.1.10 Please specify the location where cuDNN 5 library is installed. [Default is /usr/local/cuda]: Please specify a list of comma-separated Cuda compute capabilities you want to build with. [Default is: "3.5,5.2"]: "5.2"

注意事项:cuDNN 版本必须依据/usr/local/cuda下的实际文件精确确定;compute capability 需与机器上的 GPU 型号匹配(如 Geforce GTX Titan X 对应 5.2);如需重新配置建议先执行bazel clean;若要在虚拟环境中安装,必须先激活环境再运行./configure

4. 构建并安装 pip 包

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/tensorflow_package

随后可选择原生安装(sudo pip install ~/tensorflow_package/file_name.whl)或虚拟环境安装(先tensorflow激活环境,再执行pip install不要加 sudo,否则会指向系统原生包)。

5. 验证安装

python >> import tensorflow as tf >> hello = tf.constant('Hello, TensorFlow!') >> sess = tf.Session() >> print(sess.run(hello))

常见错误排查

  • 内核版本与 DSO 不匹配:重装 CUDA 驱动。
  • ImportError: cannot import name pywrap_tensorflow:Python 从错误目录加载了库,重新打开终端、确保位于系统根目录再测试。
  • ImportError: No module named packaging.version:与 pip 安装有关,用python -m pip install -U pip重装 pip。

教程目录全景

首页文档将教程划分为五大分类,每个分类都包含“Run(一键运行)”“Source Code(源码)”与“Media(视频教程)”三列信息。下表完整继承了官方目录:

Warm-up(入门热身)

#主题源码
1Start-upNotebook / Python

Basics(TensorFlow 基础)

#主题源码
1TensorsNotebook / Python
2Automatic DifferentiationNotebook / Python
3Introduction to GraphsNotebook / Python
4TensorFlow ModelsNotebook / Python

Basic Machine Learning(基础机器学习)

#主题源码更多
1Linear RegressionNotebook / Python文档
2Data AugmentationNotebook / Python

Neural Networks(神经网络)

#主题源码
1Multi Layer PerceptronNotebook / Python
2Convolutional Neural NetworksNotebook / Python

CNN 的完整文档见 docs/tutorials/3-neural_network/convolutiona_neural_network/README.rst。

Advanced(进阶)

#主题源码
1Custom TrainingNotebook / Python
2Dataset GeneratorNotebook / Python
3Create TFRecordsNotebook / Python

仓库还包含codes/application/image/image_classification.py这样的落地应用示例(图像分类),可视为教程之外的实战延伸。


分类教程深度解析

Warm-up:用 TensorBoard 迈出第一步

文档 指出:本分类教程是进入 TensorFlow 世界的起点,重点引入TensorBoard——TensorFlow 自带的图可视化工具,用于理解、调试和优化复杂的 TensorFlow 程序。

关键代码模式(对应 welcome.py 与 codes/python/0-welcome/welcome.py 的实现思路):

from __future__ import print_function import tensorflow as tf import os # 定义事件日志目录(默认与脚本同目录下的 logs 文件夹) tf.app.flags.DEFINE_string( 'log_dir', os.path.dirname(os.path.abspath(__file__)) + '/logs', 'Directory where event logs are written to.') FLAGS = tf.app.flags.FLAGS # 强制使用绝对路径,方便 TensorBoard 定位 if not os.path.isabs(os.path.expanduser(FLAGS.log_dir)): raise ValueError('You must assign absolute path for --log_dir') # 定义常量张量 welcome = tf.constant('Welcome to TensorFlow world!') # 会话执行 + 写入事件文件 with tf.Session() as sess: writer = tf.summary.FileWriter(os.path.expanduser(FLAGS.log_dir), sess.graph) print("output: ", sess.run(welcome)) writer.close() sess.close()

要点:tf.summary.FileWriter负责把计算图写入事件文件(event files);任何 Tensor 必须通过sess.run()才会真正求值;为算子指定name属性有助于在 TensorBoard 中获得更清晰的图展示。

Basics:张量、自动微分、图与模型

1-basics四个教程分别对应 TensorFlow 最核心的四块基石,配套文档索引见 docs/tutorials/1-basics/readme.rst:

  • Tensors:张量是 TensorFlow 数据流的基本载体;
  • Automatic Differentiation:自动微分是反向传播与优化器工作的数学基础;
  • Introduction to Graphs:计算图定义了“做什么、怎么做”,是 TensorFlow 静态图执行模型的核心抽象;
  • TensorFlow Models:把前三个概念组装成可训练模型。

以基础数学运算教程(docs/tutorials/1-basics/basic_math_operations/README.rst)为例,它展示了张量算子与会话执行的最小闭环:

a = tf.constant(5.0, name="a") b = tf.constant(10.0, name="b") x = tf.add(a, b, name="add") y = tf.div(a, b, name="divide") with tf.Session() as sess: writer = tf.summary.FileWriter(os.path.expanduser(FLAGS.log_dir), sess.graph) print("output: ", sess.run([a, b, x, y])) writer.close() sess.close()

终端输出为[5.0, 10.0, 15.0, 0.5]。运行tensorboard --logdir="absolute/path/to/log_dir"后即可在浏览器中查看由算子与张量节点构成的计算图。

Basic Machine Learning:线性回归与数据增强

线性回归教程(docs/tutorials/2-basics_in_machine_learning/linear_regression/README.rst)是理解“用 TensorFlow 训练模型”的标准范式:用优化问题拟合 X 与 Y 的线性关系。数据集来自 Stanford CS 20SI 课程(fire_theft.xls)。

流程拆解(源码对应 codes/python/basics_in_machine_learning/linearregression.py):

  1. 加载数据并定义 flag:用xlrd读取 xls,用tf.app.flags.DEFINE_integer定义num_epochs(默认 50);
  2. 定义可训练变量W = tf.Variable(0.0, name="weights")b = tf.Variable(0.0, name="bias")
  3. 拆分为四个函数
    • inputs():定义XY两个tf.placeholder
    • inference():前向计算X * W + b
    • loss(X, Y):用tf.squared_difference计算预测值与标签的差;
    • train(loss)tf.train.GradientDescentOptimizer(learning_rate=0.0001).minimize(loss)
  4. 训练循环sess.run(tf.global_variables_initializer())全局初始化后,逐 epoch 遍历数据、执行train_op更新参数,并打印每轮 loss;
  5. 评估与绘图:用学到的wcoeffbias计算预测线,与原始数据一同绘制。

文档特别强调:随机优化(stochastic optimization)找到的线性模型并不保证是最优的,但线性回归的简洁性正是其最大优势

Neural Networks:MLP 与全卷积 CNN 图像分类器

CNN 教程(docs/tutorials/3-neural_network/convolutiona_neural_network/README.rst)是仓库中最深入的实战文档之一,对应源码 codes/python/neural_networks/cnns.py:

数据输入管线:使用 MNIST(60000 训练 / 10000 测试图,28x28x1 手写数字)。源码中:

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", reshape=False, one_hot=False)

reshape=False保留图像原始 28x28x1 空间结构;one_hot=False便于自定义预处理。训练集被拆为 55000 训练 + 5000 验证(便于交叉验证超参)。

网络架构:与 LeNet 高度相似,但采用全卷积形式——没有全连接层,最后一层用卷积层替代。逐层结构为:

  • conv1(32 个 5x5 卷积核)→ max_pool2d(2x2,stride 2);
  • conv2(64 个 5x5 卷积核)→ max_pool2d(2x2,stride 2);
  • fc3(1024 个 7x7 卷积核,padding='VALID')——当输入空间尺寸等于卷积核尺寸时,该层在数学上等价于含 1024 个隐藏单元的全连接层;
  • dropout(dropout_keep_prob=0.5,仅训练阶段生效);
  • fc4(num_classes 个 1x1 卷积核),再用tf.squeeze把 [batch, 1, 1, num_classes] 压成 [batch, num_classes] 作为 logits。

关键工程细节(文档原文强调):

  • 参数共享与初始化net_arg_scopearg_scope统一各卷积层默认参数(padding='SAME'weights_regularizer=l2_regularizer(0.0005)weights_initializer=variance_scaling_initializer)。文档指出 ReLU 激活配合 Variance-Scaling 初始化比经典 Xavier 初始化更有效,其依据来自《Understanding the difficulty of training deep feedforward neural networks》论文。
  • SAME vs VALID padding:SAME 通过零填充保持输出空间尺寸不变;VALID 不填充。fc3 层将 padding 覆写为 VALID,使 7x7 输入与 7x7 核恰好输出单点,实现“卷积化的全连接层”。
  • Dropout:随机灭活一部分神经元以对抗过拟合,dropout_keep_prob控制保留比例,is_training控制其在训练/测试阶段的开关。

计算图与训练

graph = tf.Graph() with graph.as_default(): global_step = tf.Variable(0, name="global_step", trainable=False) # 指数衰减学习率 learning_rate = tf.train.exponential_decay( FLAGS.initial_learning_rate, global_step, decay_steps, FLAGS.learning_rate_decay_factor, staircase=True, name='exponential_decay_learning_rate') # 占位符 image_place = tf.placeholder(tf.float32, shape=([None, height, width, num_channels]), name='image') label_place = tf.placeholder(tf.float32, shape=([None, FLAGS.num_classes]), name='gt') dropout_param = tf.placeholder(tf.float32) # 模型与损失 logits, end_points = net.net_architecture(...) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=label_place)) # 优化器(Adam)+ 梯度更新 optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) grads_and_vars = optimizer.compute_gradients(loss) train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)

文档逐一解释了这些片段:

  • Graph Default:显式定义 graph 并as_default(),便于把图传给 Session;
  • Parametersglobal_step是每个 batch 梯度更新后自增 1 的非可训练计数器,配合exponential_decay实现学习率调度;
  • Place Holders:第一维设为None使 batch size 灵活可变;dropout 参数也做成占位符,测试时可设为 1.0 关闭 dropout;
  • Model and Evaluationsoftmax_cross_entropy_with_logits在内部计算 softmax,数值更稳定;accuracy 通过tf.argmaxtf.equal计算;
  • Training Tensors:Adam 因自适应特性被选为优化器,每次执行train_op即一个训练步;
  • Summaries:分别用 image、scalar、histogram 三类 summary 记录输入图像、loss/accuracy/global_step/learning_rate 标量、以及各层激活分布;通过collections参数把 summary 分流到 train / test / per_epoch_train 三组,再用tf.summary.merge_all('train')等分别合并。

会话配置与训练循环tf.ConfigProto(allow_soft_placement=..., log_device_placement=...)控制设备调度(soft placement 可避免“GPU 不支持某算子”导致的崩溃);tf.train.Saver(max_to_keep=FLAGS.max_num_checkpoint)(默认最多保留 5 份)负责保存/恢复 checkpoint。训练每 epoch 依次执行 batch 前向反向、写入训练 summary、对整个测试集评估一次(文档提醒:测试集过大时应改为 batch 评估以防内存溢出),最后保存模型;evaluation()函数从 checkpoint 恢复权重并输出最终测试准确率。

Advanced:自定义训练、数据生成器与 TFRecords

进阶三讲面向工程化场景:

  • Custom Training(codes/python/advanced/custom_training.py):演示脱离高层封装、手动控制训练循环的方法;
  • Dataset Generator(codes/python/advanced/dataset_generator.py):实现自定义数据生成器,为大规模/流式数据训练做准备;
  • Create TFRecords(codes/python/advanced/tfrecords.py):讲解 TFRecords 格式的写入与读取,是 TensorFlow 高效数据管线(tf.data)的基石。

三者共同补齐了从“能跑通模型”到“生产级数据工程”的能力拼图。


文档构建与阅读方式

仓库文档采用 Sphinx 构建,入口 docs/index.rst(即本文依据的首页),配置见 docs/conf.py:

  • 扩展:sphinx.ext.autodocmathjaxviewcodegithubpages
  • 主题:alabasterhtml_title = 'TensorFlow World'
  • 构建入口:master_doc = 'index',源码后缀.rst

本地阅读可直接浏览 docs/tutorials/ 下各分类的 README.rst(Welcome、Basics、线性回归、逻辑回归、CNN、自编码器、安装指南等),每篇均配有可复现的代码片段与结果图;动手实践则直接运行 codes/ 下对应的.py脚本或在 Jupyter 中打开.ipynbNotebook。


贡献指南要点

首页文档对贡献者提出了明确约定:

  • 提交 Pull Request 前,先通过 issue、邮件等方式与维护者讨论拟做的变更;拼写错误不要提 PR,请在 issues 中声明
  • PR 主体应为代码脚本建议或改进;非代码类 PR 需对文档产生显著改进,否则应通过 issues 提出;
  • 不要直接修改 ipython 文件,请修改对应的 Python 文件;
  • 构建时移除安装/构建依赖;对接口变更(新环境变量、暴露端口、文件位置、容器参数)添加注释说明;
  • 至少获得一位其他开发者的同意后方可合并,否则可请求维护者合并。

此外,项目要求所有交互遵守 CODE_OF_CONDUCT.md。


总结

TensorFlow-Course 以“文档完善、代码不复杂”为第一目标,构建了一条从 TensorBoard 入门、张量与自动微分基础、线性回归等经典模型,到 MLP/CNN 图像分类器,再到自定义训练、数据生成器与 TFRecords 数据工程的完整学习路径。本文基于 docs/index.rst(即仓库根 README.rst)完整继承了官方教程目录与安装指引,并深入 docs/tutorials/ 与 codes/ 展开源码级讲解——无论你是想快速跑通第一个 TensorFlow 程序,还是希望理解 CNN 分类器背后的图、会话、summary 与训练机制,都能在这份仓库指南中找到可直接复用的方案。

  • 教程
  • 深度学习
  • 机器学习

【免费下载链接】TensorFlow-Course

:satellite: Simple and ready-to-use tutorials for TensorFlow

项目地址:https://gitcode.com/gh_mirrors/te/TensorFlow-Course
点击查看免费下载
上一篇:终极指南:3步实现Mac Mouse Fix配置文件跨设备同步
下一篇:TinyUSB USB音频设备延迟优化:UAC2同步机制实现

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询