Tensorflow2.0常用函数
以下所有内容均基于tensorflow2.0及以上版
并且每段代码开头以import tensorflow as tf为基础,这里我省略了,没有在每一段代码例子内填写。
- tf.random.truncated_normal
该函数用于强制转换数据类型
用法:tf.random.truncated_normal(张量名,dtype=数据类型)
代码例子:
a = tf.random.truncated_normal([2,3],0.5,1)
a1 = tf.cast(a,tf.int32)
print (a,a1,'\n')
- tf.reduce_max/ reduce_min
用于寻找该张量中全部元素的最大值
代码例子:
#张量维度上所有元素的最大值
b = tf.reduce_max(a)
#张量维度上所有元素的最小值
c = tf.reduce_min(a)
print(b,'\n',c)
- axis
表示操作张量的方向,用于控制求均值的方向,去横向均值还是纵向均值.
axis=0表示跨行计算(经度,down),=1表示跨列计算(维度,across)
代码例子:
x = tf.constant([[1,2,3],
[2,2,3]])
#求均值
print(tf.reduce_mean(x))
print(tf.reduce_mean(x,axis=1))
print(tf.reduce_mean(x,axis=0))
#求和
print(tf.reduce_sum(x))
print(tf.reduce_sum(x,axis=1))
print(tf.reduce_sum(x,axis=0))
- tf.random.truncated_normal
生成正态分布的随机数。
用法:tf.random.truncated_normal (矩阵形状,mean=均值,stddev=标准差),常用于初始化权重和偏置矩阵。
代码例子:
a = tf.random.truncated_normal([2,3],0.5,1)
b = tf.random.truncated_normal([2,3],0,1)
c = tf.random.truncated_normal([3,2],0,1)
- tf.random.truncated_normal
生成截断式正态分布(相比正态分布更向均值集中)的随机函数
用法:tf.random.truncated_normal(矩阵形状,mean=均值,stddev=标准差)
代码例子:
f = tf.random.truncated_normal([2,3],0,1)
- tf.Variable
是将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。
用法:tf.Variable(初始值),神经网络训练中,常用该函数标记待训练参数
代码例子:
#初始化参数w,使用
w = tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
#或
a = tf.random.truncated_normal([2,3],0.5,1)
w = tf.Variable(a)
-
tensorflow还提供了数学运算
加减乘除:tf.add(a,b), tf.subtract(a,b), tf.multiply(a,b), tf.divide(a,b)
平方、次方、开方:tf.square(a,b), tf.pow(a,b), tf.sqrt(a,b)
矩阵乘法:tf.matmul(b,c) -
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(函数,对谁求导)
代码例子:
with tf.GradientTape() as tape:
#w初始值设为3
w = tf.Variable(tf.constant(3.0))
#损失函数设为w^2,因此导数为2w
loss = tf.pow(w,2)
#求导后带入w的数值
grad = tape.gradient(loss,w)
- enumerate
enumerate是python的内建函数,它可以遍历每个元素(如列表、元组或字符串),组合为:索引 元素,常在for循环中使用
用法:enumerate(列表名)
代码例子:
seq = ['one','two','three']
for i,element in enumerate(seq):
print(i,element)
- tf.one_hot
独热编码,分类问题经常需要使用独热编码进行标签
若做花朵分类,共分成三类(0,1,2),则独热编码表示标签1的方式为(0. 1. 0.),含义为:0%的可能为:0, 100%的可能为:1, 0%的可能为:2
用法:
tf.one_hot(待转换数据,depth=几分类)
代码例子:
classes = 3
labels = tf.constant([1,0,2,1]) #输入的元素值最小为0,最大为2
output = tf.one_hot(labels,depth=classes)
- tf.nn.softmax
用于使n分类的n个输出符合概率分布
代码例子:
y = tf.constant([1.01,2.01,-0.66])
y_pro = tf.nn.softmax(y)
print("After softmax, y_pro is:", y_pro)
- assign_sub
作用类似于:-=
赋值操作,更新参数的值并返回。(一般用于w和b的自更新)
调用assign_sub前,先用tf.Variable定义变量w为可训练(可自更新)
w.assign_sub(w为需要自减的内容)
代码例子:
w = tf.Variable(4.00)
w.assign_sub(1.5)
print(w)
- tf.argmax
返回张量指定维度维度的最大值索引号。注:请注意是索引号
tf.argmax(张量名,axis=操作轴)
代码例子:
import numpy as np
test = np.array([[1,2,3],[2,3,4],[5,4,3],[8,7,2]])
print(test)
print(tf.argmax(test,axis=0)) #返回每一列(经度)最大值的索引号
print(tf.argmax(test,axis=1)) #返回每一行(纬度)最大值的索引号
print(tf.argmin(test)) #如果不设置数值,默认axis值为0
print(tf.argmin(test,axis=0)) #返回每一列(经度)最小值的索引号
print(tf.argmin(test,axis=1)) #返回每一行(纬度)最小值的索引号