TensorFlow基础之核心概念
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
解释:
-
形状(Shape):描述每个维度的大小
(2, 3)表示 2 行 3 列的矩阵(224, 224, 3)表示 224×224 像素的 RGB 图像
-
数据类型(Dtype):张量中数据的类型
tf.float32:32位浮点数(最常用)tf.int32:32位整数tf.bool:布尔值tf.string:字符串
-
维度/秩(Rank):张量的维数
- 标量:秩为 0
- 向量:秩为 1
- 矩阵:秩为 2
-
设备(Device):张量存储的设备位置
- CPU:
/device:CPU:0 - GPU:
/device:GPU:0
- CPU:
张量在机器学习中的意义
数据表示:
- 输入数据:图像、文本、音频都可以表示为张量
- 模型参数:权重和偏置都是张量
- 中间结果:计算过程中的所有数据都是张量
- 输出结果:预测结果、损失值等
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}")
变量的关键特性:
- 状态保持:在训练过程中保持状态
- 梯度跟踪:可以计算相对于变量的梯度
- 可优化:可以被优化算法更新
- 可保存:可以保存到检查点文件
常量(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)、变量与常量。
tf.function捕获优化图以提升性能和支持模型导出。tf.Variable)用于存储可更新的模型参数,支持梯度跟踪与优化,可整体或部分修改;常量(tf.constant)不可变,适用于固定值。框架支持张量运算、GPU 加速,2.x 通过更简洁的 API(如直接调用运算函数、简化变量操作)降低使用门槛,兼顾灵活性与高性能,是实现机器学习任务的核心工具。- 点赞
- 收藏
- 关注作者
评论(0)