TensorFlow基本知识及常用函数
张量(Tensor)
维度 | 阶 | 名字 | 例子 |
---|---|---|---|
0-D | 0 | 标量 | s=1 2 3 |
1-D | 1 | 向量 | v = [1, 2, 3] |
2-D | 2 | 矩阵 | m = [[1, 2, 3], [4, 5, 6]] |
n-D | n | 张量 | t = [[[ … |
数据类型
-
tf.int, tf.float …
tf.int32 tf.float32 tf.float64
-
tf.bool
tf.constant([True, False])
-
tf.string
tf.constant(“Hello”)
创建一个Tensor
tf.constant(张量内容, dtype=数据类型(可选))
# 将numpy的数据类型转化为Tensor数据类型
tf.convert_to_tensor(数据名, dtype=数据类型(可选))
# 创建全为0的张量
tf.zeros(维度)
# 创建全为1的张量
tf.ones(维度)
# 创建全为指定值的张量
tf.fill(维度, 指定值)
# 生成正态分布的随机数,默认均值为0,标准差为1
tf.random.normal(维度, mean=均值, stddev=标准差)
# 生成断崖式正态分布的随机数
tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
# 这里如果生成的随机数取值在(µ-2∂)之外,则重新生成,保证了生成值在均值附近
#生成均匀分布随机数
tf.random.uniform(维度, minval=最小值, maxval=最大值)
常用函数
# 强制tensor转化为该数据类型
tf.cast(张量名, dtype=数据类型)
# 计算张量维度上元素的最小值
tf.reduce_min(张量名)
# 计算张量维度上元素的最大值
tf.reduce_max(张量名)
理解axis
在一个二维张量或数组中,可以通过调整axis等于0或1控制执行维度
- axis=0表示跨行(第一个维度, x轴),axis=1表示跨列(第二个维度, y轴)
- 如果不指定axis,则所有元素参与运算
# 计算张量沿着指定维度的平均值
tf.reduce_mean(张量名, axis=操作轴)
# 计算张量沿着指定维度的和
tf.reduce_sum(张量名, axis=操作轴)
tf.Variable
tf.Variable()将变量标记为"可训练的",被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
tf.Variable(初始值)
w = tf.Variable(tf.random.normal([2, 2], mean=0, stddev=1))
TensorFlow中的数学运算
对应元素的四则运算: tf.add, tf.subtract, tf.multiply, tf.divide
平方、次方和开方: tf.square, tf.pow, tf.sqrt
矩阵乘: tf.matmul
# 实现两个张量对应元素想加
tf.add(张量1, 张量2)
# 实现两个张量对应元素相减
tf.subtract(张量1, 张量2)
# 实现两个张量的元素对应相乘
tf.multiply(张量1, 张量2)
# 实现两个张量的元素对应相除
tf.divide(张量1, 张量2)
## 只有维度相同的张量才可以四则运算
tf.data.Dataset.from_tensor_slices
# 切分传入张量的第一维度,生成输入特征/标签对,构建数据集
data = tf.data.Dataset.from_tensor_slices((输入特征, 标签))
tf.GradientTape
# with结构记录计算过程,gradient求出张量梯度
with tf.GradientTape() as tape:
# 若干计算过程
grad = tape.gradient(函数, 对谁求导)
enumerate
# enumerate是python的内建函数,它可以便利每个元素,组合为:索引 元素
# 常在for循环中使用
enumerate(列表名)
# Example
seq = ["one", "two", "three"]
for i, element in enumerate(seq):
print(i, element)
# 运行结果
0 one
1 two
2 three
tf.one_hot
# 独热编码:在分类问题中,常用独热编码做标签来标记类别
# 1表示是,0表示非
# tf.one_hot()函数将待转换数据,转换为one-hot形式的数据输出
tf.one_hot(待转换数据, depth=几分类)
# Example
classes = 3
labels = tf.constant([1, 0, 2]) # 输入的元素值最小为0,最大为2
output = tf.one_hot(labels, depth=classes)
print(output)
# 运行结果
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]], shape=(3, 3), dtype=float32
tf.nn.softmax
# tf.nn.softmax函数使输出符合概率分布
# 使输出值变为0~1之间的概率值
tf.nn.softmax(x)
# Example
y = tf.constant([1.01, 2.01, -0.66])
y_pro = tf.nn.softmax(y)
print(y_pro)
# 运行结果
tf.Tensor([0.25598174 0.69593046 0.0481878], shape=(3,), dtype=float32)
assign_sub
# 赋值操作,更新参数的值并返回
# 调用assign_sub前,先用tf.Variable定义变量w为可训练的
w.assign_sub(w要自减的内容)
tf.argmax
# 返回张量沿指定维度最大值的索引号
tf.argmax(张量名, axis=索引号)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构