1.张量(tensor)
tensorflow中的张量多维数组(列表),能够表示0~n阶的数组,张量的维数即为数组的阶数。举例说明如下:
·0维张量 <=>标量,如数字1,2,3等
·1维张量<=>一维向量,如[1,2,3]等
·2维张量<=>二维数组(矩阵),如[[1,2],[2,3]]等
tensorflow中创建一个张量的语法为
tf.constant(张量内容,dtype=数据类型(可选))
其中tensorflow中的数据类型有如下几种:
·数字类型,如tf.int16,tf.int32,tf.int64,tf.float32,tf.float64等;
·bool类型,tf.bool;
·字符串类型,tf.string;
下面以创建一个一维张量为例,说明如何创建张量:
import tensorflow as tf
a=tf.constant([1,5],dtype=tf.int32)
print(a)
print(a.dtype)
print(a.shape)
2.常用的创建张量的函数
·创建全为0的张量
tf.zeors([维度])
·创建全为1的张量
tf.ones([维度])
·创建全为指定值的张量
tf.fill([维度],指定值)
例子:
a2=tf.zeros([2,2],dtype=tf.int32)
b2=tf.ones(5,dtype=tf.float32)
c2=tf.fill([2,3],9)
print(a2)
print(b2)
print(c2)
·生成正态分布的随机数张量
tf.random.normal([维度],mean=均值,stddev=标准差)
mean的默认值为0,stddev的方差默认值为1
·生成截断式正态分布随机数(在两倍标准差间的随机数)
tf.random.truncated([维度],mean=均值,stddev=标准差)
·生成在[minval,maxval]间均匀分布的随机张量
tf.random.uniform([维度],minval=最小值,maxval=最大值)
例子:
a3=tf.random.normal([2,2],mean=0.5,stddev=1)
print(a3)
b3=tf.random.truncated_normal([2,3],mean=0.1,stddev=1)
print(b3)
c3=tf.random.uniform([2,1],minval=-1,maxval=1)
print(c3)
3.Tesorflow中的常用函数
·强制将张量转化为该数据类型
tf.cast(张量名,dtype=要转换的数据类型)
·计算张量元素中的最大、最小值
tf.reduce_max(张量)
tf.reduce_min(张量)
·沿着指定维度计算均值与求和
tf.reduce_mean(张量,axis=维度)
tf.reduce_sum(张量,axis=维度)
例子:
x1=tf.constant([1.,2.,3.],dtype=tf.float32)
print(x1)
x2=tf.cast(x1,dtype=tf.int32)
print(x2)
print(tf.reduce_min(x2),tf.reduce_max(x2))
x=tf.constant([[1,2,3],[2,2,3]],dtype=tf.int32)
print(tf.reduce_mean(x,axis=0))
print(tf.reduce_mean(x,axis=1))
print(tf.reduce_sum(x,axis=0))
·标记张量为可训练的函数,标记的变量会在反向传播中记录梯度信息
tf.Variable(初始张量)
·常用的数字运算函数
张量的维度相同时,有加、减、乘、除四则运算
加法:tf.add(张量1,张量2)
减法:tf.subtract(张量1,张量2)
对应元素相乘:tf.multiply(张量1,张量2)
对应元素相除:tf.divide(张量1,张量2)
例子:
a4=tf.ones([2,3],dtype=tf.int32)
b4=tf.fill([2,3],5)
print(tf.add(a4,b4))
print(tf.subtract(a4,b4))
print(tf.multiply(a4,b4))
print(tf.divide(a4,b4))
·开平方,平方,开方运算
开平方:tf.sqrt(张量)
平方:tf.square(张量)
开方:tf.pow(张量,指数)
例子:
a5=tf.fill([3,3],2.)
print(tf.square(a5))
print(tf.pow(a5,3))
print(tf.sqrt(a5))
·矩阵乘
tf.matmul(张量1,张量1)
例子:
a6=tf.ones([3,2])
b6=tf.fill([2,3],4.)
print(tf.matmul(a6,b6))
·将特征与标签匹配函数
tf.data.Dataset.from_tensor_slices((输入特征,标签))
该函数会切分输入特征的第一维度,生成(输入特征,标签)的数据对,构建数据集
例子:
a7=tf.constant([[1,2],[3,4],[5,6],[7,8]])
b7=tf.constant([1,0,1,0])
dataset=tf.data.Dataset.from_tensor_slices((a7,b7))
for element in dataset:
print(element)
·梯度求解函数
tf.GradientTape().gradient(函数,求导变量)
例子:
with tf.GradientTape() as tape:##with结构记录计算过程
w=tf.Variable(tf.constant(3.0))
loss=tf.pow(w,2)
grad=tape.gradient(loss,w)##计算梯度
print(grad)
·独热编码(One-hot encoding)
tf.one_hot(待转换的数据,depth=分几类)
例子:
classes=3
labels=tf.constant([1,0,4])
output=tf.one_hot(labels,depth=classes)
print(output)
·归一化指数函数softmax
tf.nn.softmax(输出值)
例子:
y=tf.constant([1.01,2.01,-0.66])
y_pro=tf.nn.softmax(y)
print(y_pro)
·自增自减更新操作函数
对于Variable类型的可更新类型的张量,可用下面的函数实现更新:
w为张量
w.assign_sub(减少的值)
w.assign_add(增加的值)
例子:
w=tf.Variable(4.0)
w.assign_sub(1)
print(w)
w.assign_add(1)
print(w)
·返回指定维度最大值、最小值的索引
tf.argmin(张量,axis=维度)
tf.argmax(张量,axis=维度)
test=np.array([[1,2,3],[2,2,3],[4,5,6],[5,5,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=1))