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=索引号)

你可能感兴趣的:(深度学习,1024程序员节,深度学习,tensorflow)