TensorFlow基础之核心概念

举报
tea_year 发表于 2025/10/29 17:34:28 2025/10/29
【摘要】 TensorFlow 是一个由 Google Brain 团队开发的开源机器学习框架,广泛应用于各种深度学习和机器学习任务。本文将帮助你快速了解 TensorFlow 的基本概念,并通过一个简单的示例来入门 TensorFlow 的学习。一、什么是TensorFlow ?Tensorflow是一个基于计算图的数值计算库,它可以在多种平台上(如 CPU、GPU、TPU)高效地执行大规模的机器学...

TensorFlow 是一个由 Google Brain 团队开发的开源机器学习框架,广泛应用于各种深度学习和机器学习任务。本文将帮助你快速了解 TensorFlow 的基本概念,并通过一个简单的示例来入门 TensorFlow 的学习。

一、什么是TensorFlow ?

Tensorflow是一个基于计算图的数值计算库,它可以在多种平台上(如 CPU、GPU、TPU)高效地执行大规模的机器学习任务。TensorFlow 支持多种编程语言(如 Python、C++、JavaScript),其中 Python 是最常用的语言。TensorFlow 的核心是一个计算图(Computation Graph),它由一系列的节点(操作)和边(数据流)组成。通过这种图结构,TensorFlow 能够进行自动微分和并行计算,从而高效地训练复杂的神经网络。

TensorFlow主要的概念分别为张量、计算图、会话、变量

张量 (Tensor): 张量是 TensorFlow 的基本数据结构,它可以看作是一个多维数组。张量有三个重要属性:类型(如浮点数、整数等)、形状(维度大小)、和数据。

计算图 (Computation Graph): 计算图是 TensorFlow 用于定义计算的图结构。图中的节点表示操作(如加法、乘法),边表示张量的数据流。通过构建计算图,TensorFlow 可以有效地执行并行计算。

会话 (Session): 在 TensorFlow 1.x 中,会话用于执行计算图中的操作。会话会分配计算资源并执行图中的操作。而在 TensorFlow 2.x 中,Eager Execution(即时执行模式)被默认启用,不再需要显式使用会话。

变量 (Variable): 变量用于存储在计算过程中需要更新的参数,如神经网络的权重。变量是可以被 TensorFlow 训练过程更新的张量。



二、概念解析

2.1 张量

TensorFlow 在多维数组或张量上运行,这些张量表示为 tf.Tensor 对象。这是一个二维张量

import tensorflow as tf

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

print(x)
print(x.shape)
print(x.dtype)

tf.Tensor 的最重要的属性是它的 shape  dtype

  • Tensor.shape:告诉您张量沿每个轴的大小。
  • Tensor.dtype:告诉您张量中所有元素的类型。

TensorFlow 在张量上实现了标准数学运算,以及许多专门用于机器学习的运算。

例如

x + x
5 * x
x @ tf.transpose(x)
tf.concat([x, x, x], axis=0)
tf.nn.softmax(x, axis=-1)
tf.reduce_sum(x)

注意: 通常,在任何 TensorFlow 函数期望 Tensor 作为输入的地方,该函数也将接受可以使用 tf.convert_to_tensor 转换为 Tensor 的任何内容。请参见下面的示例。

tf.convert_to_tensor([1,2,3])
tf.reduce_sum([1,2,3])

在 CPU 上运行大型计算可能很慢。如果配置正确,TensorFlow 可以使用 GPU 等加速器硬件来非常快地执行操作。

if tf.config.list_physical_devices('GPU'):
  print("TensorFlow **IS** using the GPU")
else:
  print("TensorFlow **IS NOT** using the GPU")

张量的关键属性

# 示例张量
import tensorflow as tf

# 创建一个 2x3 的矩阵张量
tensor = tf.constant([[1, 2, 3], [4, 5, 6]])

print(f"形状 (Shape): {tensor.shape}")        # (2, 3)
print(f"数据类型 (Dtype): {tensor.dtype}")    # int32
print(f"维度 (Rank): {tf.rank(tensor)}")      # 2 
print(f"设备 (Device): {tensor.device}")      # /job:localhost/replica:0/task:0/device:CPU:0


解释

  1. 形状(Shape):描述每个维度的大小

    • (2, 3) 表示 2 行 3 列的矩阵
    • (224, 224, 3) 表示 224×224 像素的 RGB 图像
  2. 数据类型(Dtype):张量中数据的类型

    • tf.float32:32位浮点数(最常用)
    • tf.int32:32位整数
    • tf.bool:布尔值
    • tf.string:字符串
  3. 维度/秩(Rank):张量的维数

    • 标量:秩为 0
    • 向量:秩为 1
    • 矩阵:秩为 2
  4. 设备(Device):张量存储的设备位置

    • CPU:/device:CPU:0
    • GPU:/device:GPU:0

张量在机器学习中的意义

数据表示

  • 输入数据:图像、文本、音频都可以表示为张量
  • 模型参数:权重和偏置都是张量
  • 中间结果:计算过程中的所有数据都是张量
  • 输出结果:预测结果、损失值等

2.图和 tf.function

虽然您可以像使用任何 Python 库一样交互式地使用 TensorFlow,但 TensorFlow 还提供用于以下方面的工具:

  • 性能优化:加速训练和推理。
  • 导出:以便您可以在训练完成后保存模型。

这些要求您使用 tf.function 将纯 TensorFlow 代码与 Python 代码分开。

@tf.function
def my_func(x):
  print('Tracing.\n')
  return tf.reduce_sum(x)

您第一次运行 tf.function 时,虽然它在 Python 中执行,但它会捕获一个完整的、优化的图,该图表示函数内完成的 TensorFlow 计算。

x = tf.constant([1, 2, 3])
my_func(x)

在后续调用中,TensorFlow 只执行优化的图,跳过任何非 TensorFlow 步骤。请注意,下面的 my_func 不会打印跟踪,因为 print 是一个 Python 函数,而不是 TensorFlow 函数。

x = tf.constant([10, 9, 8])
my_func(x)

对于具有不同签名shape  dtype)的输入,图可能无法重用,因此会生成一个新图。

x = tf.constant([10.0, 9.1, 8.2], dtype=tf.float32)
my_func(x)

这些捕获的图提供了两个好处:

  • 在许多情况下,它们可以显着提高执行速度(尽管在这个简单的示例中并非如此)。
  • 您可以使用 tf.saved_model 导出这些图,以便在其他系统(如 服务器  移动设备)上运行,无需安装 Python。


静态图 vs 动态图
TensorFlow 1.x(静态图)


import tensorflow.compat.v1 as tf
import numpy as np  # 导入numpy库
tf.disable_v2_behavior()

# 1. 定义计算图(原代码不变)
x = tf.placeholder(tf.float32, shape=[None, 784])
W = tf.Variable(tf.random.normal([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b

# 2. 关键:定义input_data(手动创建2个样本,每个样本784个元素)
# np.random.randn(2, 784):生成2行784列的随机浮点数数组,符合x的格式
input_data = np.random.randn(2, 784).astype(np.float32)  # 转为float32类型,匹配tf格式

# 3. 创建会话并执行(原代码不变)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())  # 初始化变量W和b
    result = sess.run(y, feed_dict={x: input_data})  # 传入定义好的input_data
    print("计算结果形状:", result.shape)  # 输出结果形状,验证逻辑正确


TensorFlow 2.x(动态图/即时执行):

print('动态图机制演示')
import tensorflow as tf
print(tf.__version__)
a=tf.Variable([[1,2],[3,4]])
b=tf.constant([[5,6],[7,8]])

print(a)
#使用tf.add()函数实现2个二维变量的相加。
print(tf.add(a,b))

print(tf.matmul(a,b))


四、变量和变量

变量(Variable)

普通的 tf.Tensor 对象是不可变的。要在 TensorFlow 中存储模型权重(或其他可变状态),请使用 tf.Variable

var = tf.Variable([0.0, 0.0, 0.0])
var.assign([1, 2, 3])
var.assign_add([1, 1, 1])

变量的值可以用于修改

# 创建变量
weight = tf.Variable(tf.random.normal([2, 3]))
bias = tf.Variable(tf.zeros([3]))

print(f"初始权重:\n{weight}")

# 修改变量的值
weight.assign(tf.ones([2, 3]))
print(f"修改后权重:\n{weight}")

# 部分更新
weight[0, 0].assign(5.0)
print(f"部分更新后:\n{weight}")

变量的关键特性

  1. 状态保持:在训练过程中保持状态
  2. 梯度跟踪:可以计算相对于变量的梯度
  3. 可优化:可以被优化算法更新
  4. 可保存:可以保存到检查点文件

常量(Constant)

常量是不可变的张量,一旦创建就不能修改:

# 创建常量
scalar_const = tf.constant(3.14)
vector_const = tf.constant([1, 2, 3, 4])
matrix_const = tf.constant([[1, 2], [3, 4]])

# 常量的值不能改变
print(scalar_const)  # tf.Tensor(3.14, shape=(), dtype=float32)

变量 vs 常量的使用场景


总结


TensorFlow是Google开源的机器学习框架,以计算图为核心,支持多平台、多语言,可高效执行深度学习任务。其核心概念包括张量、计算图、会话(1.x)、变量与常量。

张量是基础数据结构,以多维数组形式存在,通过形状、数据类型、维度、设备位置四大属性描述,可表示输入数据、模型参数及计算结果。计算图由操作节点和数据流边构成,1.x 需显式构建静态图并通过会话执行,2.x 默认启用即时执行(动态图),无需会话,还可通过tf.function捕获优化图以提升性能和支持模型导出。
变量(tf.Variable)用于存储可更新的模型参数,支持梯度跟踪与优化,可整体或部分修改;常量(tf.constant)不可变,适用于固定值。框架支持张量运算、GPU 加速,2.x 通过更简洁的 API(如直接调用运算函数、简化变量操作)降低使用门槛,兼顾灵活性与高性能,是实现机器学习任务的核心工具。



【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。