tensorflow计算常用函数
1 张量生成
1.1 创建一个张量
tf.constant(维度,数据类型)
例如:a = tf.constant([1, 5],dtype = tf.int64)
1.2 创建一个全为0的张量
tf.zero(维度)
例如:tf.zero([2,3])
1.3 创建一个全为1的张量
tf.ones(维度)
例如:tf.ones([2,3])
1.4 创建一个全为指定值的张量
tf.fill(维度,指定值)
例如:tf.fill([2,2],9)
1.5 生成正态分布的随机数,默认均值为0,标准差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
例如:tf.random.normal([2,2],mean=0.5,stddev=1)
1.6 生成截断式正态分布的随机数
tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
例如:tf.random.normal([2,2],mean=0.5,stddev=1)
需要注意的是截断式正态分布产生的随机数取值在$ (\mu - 2\sigma,\mu + 2\sigma) $之间,也就是说,截断式正态分布生成的随机数据更加集中
2 常用函数
2.1 强制tensor转换为该数据类型
tf.cast(张量名,dtype=数据类型)
2.2 计算张量维度上元素的最小值
tf.reduce_min(张量名)
2.3 计算张量维度上元素的最大值
tf.reduce_max(张量名)
2.4 计算张量沿指定维度的平均值
tf.reduce_mean(张量名,axis=操作轴)
当不指定维度时,对所有元素进行操作
2.5 计算张量沿指定维度的和
tf.reduce.sun(张量名,axis=操作轴)
2.6 tf.Variable()函数
tf.Variable()
将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
tf.Variable(初始值)
例如:w = tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
2.7 TensorFlow中的数学运算
对应元素的四则运算:tf.add, tf.subtract, tf.multiply, tf.divide
平方、次方和开方:tf.suqre, tf.pow, tf.sqrt
矩阵乘:tf.matmul
注意:只有维度相同张量才能进行四则运算,和矩阵运算一样
2.8 tf.data.Dataset.from_tensor_slices
切分传入张量的第一维度,生成输入特征/标签对,构建数据集
用法:data = tf.data.Dataset.from_tensor_slices((输入特征,标签))
注意:Numpy和Tensor格式都可用该语句读入数据
例如:
feature = tf.constant([12,23,10,17])
labels = tf.constant([0,1,1,0])
dataset = tf.data.Dataset.from_tensor_slices((feature,labels))
2.9 tf.GradientTape()
使用with结构记录计算过程,gradient求出张量的梯度
with tf.GradientTape() as tape:
若干个计算过程
grad = tape.gradient(函数,对谁求导)
# 例如
with tf.GradientTape() as tape:
w = tf.Variable(tf.constant(3.0))
loss = tf.pow(w,2)
grad = tape.gradient(loss,w)
2.10 enumerate
enumerate是python的内建函数,它可遍历每个元素(如列表、元组或字符串),组合为:索引 元素,常在for循环中使用。
enumerate(列表名)
seq = ['one', 'two', 'three']
for i,element in emumerate(seq):
print(i,element)
2.11 tf.one_hot
独热编码(one-hot encoding):在分类问题中,常用独热码做标签,
标记类别:1表示是,0表示非。
例如在鸢尾花数据集中,假设标签为1,则独热码为(0, 1, 0),这样可以表示出标签的概率。
tf.one_hot
函数可以将待转换数据转换为One-hot形式的数据输出。
用法为:tf.one_hot(待转换数据,depth=几分类)
例如:
classes = 3
labels = tf.constant([1,0,2])
output = tf.one_hot(labels, depth=classes)
# 运行结果为
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]
2.12 tf.nn.softmax()
tf.nn.softmax()
函数使得前向传播的输出符合概率分布,常与独热码一起使用。
2.13 assign_sub()
赋值操作,更新参数的值并返回,也就是自减操作,可以配合梯度下降法来更新参数。
调用assign_sub
前,先用tf.Variable
函数定义变量为可训练
2.14 tf.argmax()
返回张量沿指定维度最大值的索引tf.argmax(张量名,axis=操作轴)