目录
1.张量的创建——constant、zeros、ones、fill
2.张量的加、减、乘、除——add、subtract、multiply、divide
3.张量的平方、次方、开方——square
4.矩阵乘法——matmul
?5.切分第一维,构建数据集——tf.data.Dataset.from_tensor_slices
?6.计算梯度(函数求导)——tf.GradientTape
7.遍历每个元素——enumerate
8.独热编码——one_hot
9.输出符合概率分布——softmax
10.变量自更新——assign_sub
11.指定维度最大的索引值——argmax
1.张量的创建——constant、zeros、ones、fill
- ????????常量张量:tf.constant(矩阵)
- ????????全1张量:tf.ones(矩阵格式)
- ????????填充任意值张量:tf.fill(矩阵格式,填入的内容)
- ????????全0张量:tf.zeros(矩阵格式)
a = tf.constant([[1, 2],
[3, 4]])
? ? ? ? 如上,创建了一个具有2个维度,每个维度2个元素的张量。
2.张量的加、减、乘、除——add、subtract、multiply、divide
- ? ? ? ? 加法:tf.add(张量1,张量2)
- ? ? ? ? 减法:tf.subtract(张量1,张量2)
- ? ? ? ? 乘法:tf.multiply(张量1,张量2)
- ? ? ? ? 除法:tf.divide(张量1,张量2)
a = tf.ones([2, 3])
b = tf.fill([2, 3], 4.0) # 这里必须赋值一个浮点数。
print('a ', a, '\n')
print('b ', b, '\n')
print('加法', tf.add(a, b), '\n') # a + b
print('减法', tf.subtract(a, b), '\n') # a - b
print('乘法', tf.multiply(a, b), '\n') # a * b
print('除法', tf.divide(a, b), '\n') # a / b
3.张量的平方、次方、开方——square、pow、sqrt
- ????????平方:tf.square(张量名)? ? ? ? ???——所有元素直接平方
- ? ? ? ? 次方:tf.pow(张量名, 次方数)? ? ? ? ——所有元素直接作幂次方
- ? ? ? ? 开方:tf.sqrt(张量名)? ? ? ? ? ? ? ? ? ? ?——所有元素直接开方
# 张量的平方、次方、开方
a = tf.fill([2, 3], 3.)
print('张量a:\n ', a, '\n')
print('a平方:\n ', tf.square(a), '\n')
print('a次方:\n ', tf.pow(a, 3), '\n')
print('a开方:\n ', tf.sqrt(a), '\n')
4.矩阵乘法——matmul
- ? ? ? ? 矩阵乘法:matmul(矩阵1,矩阵2)——n行m列? 与? m行k列才能相乘。
a = tf.ones([2, 3])
b = tf.fill([3, 2], 2.)
print(a)
print(b)
print(tf.matmul(a, b))
?5.切分第一维,构建数据集——tf.data.Dataset.from_tensor_slices
- ? ? ? ? 切分传入张量的第一维度,生成输入特征/标签对,构建数据集。
- ? ? ? ? 传入5行2列的特征(第一维5个元素)
- ? ? ? ? 传入5行1列的标签(第一维5个元素)
- ? ? ? ? 假定,2个特征对应1个标签,则会创造一个shape为((2,),(1,))的数据形式,即每3个特征对应一个标签
# data = tf.data.Dataset.from_tensor_slices( (输入特征, 标签) )
# numpy 和 Tensor格式都可以用该语句读入数据。
features = tf.constant([12, 23, 10, 17]) # 特征
labels = tf.constant([0, 1, 1, 0]) # 标签
dataset = tf.data.Dataset.from_tensor_slices((features, labels)) # 特征,标签配对。
print(dataset)
for elements in dataset:
print(elements)
?6.计算梯度(函数求导)——tf.GradientTape
- ????????with结构记录计算过程,gradient求出张量的梯度。
- ????????结构表示运算表达式,gradient表示求导(因变量,自变量)
with tf.GradientTape() as tape:
w = tf.Variable(tf.constant(3.0)) # 指定张量x为可训练变量
loss = tf.pow(w, 2) # loss = w**2
grad = tape.gradient(loss, w) # loss对w进行求导。
print(grad) # 输出求导结果
7.遍历每个元素——enumerate
- ????????该函数可以遍历每个元素(如列表、元组、或字符串),组合为索引 元素,常在for循环中使用。
- ????????enumerate(列表名)
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
print(i, element)
8.独热编码——one_hot
- ????????独热编码(one-hot encoding):在分类问题中,常用独热编码做标签。
- ????????标记类别:1表示是,0表示非。
- ????????tf.one_hot(待转换数据,depth=几分类)
classse = 3
labels = tf.constant([1, 0, 2]) # 输入元素最小值为0,最大值为2
output = tf.one_hot(labels, depth=classse) # 输出当前的标签分类值。
print(output)
9.输出符合概率分布——softmax
- ????????常用函数 tf.nn.softmax(x)使得输出结果符合概率分布。
- ????????可以使n分类的n个输出(y0,y1 …… ,yn-1)符合概率分布。
y = tf.constant([1.01, 2.01, -0.66])
y_pro = tf.nn.softmax(y)
print("经过softmax函数之后,y_por是:", y_pro)
10.变量自更新——assign_sub
- ? ? ? ? 变量名.tf.assign_sub(自减步长)
x = tf.constant(4) # 一个张良x,内容为0维数据,1个元素,4.
w = tf.Variable(x) # 张量x变为可训练(可以自更新)
w.assign_sub(1) # w -=1 即 w = w-1。括号里是要自减的内容。
print(w)
11.指定维度最大的索引值——argmax
- ? ? ? ? tf.argmax(数组,axis = 0)? ? ? ? ?# 按列来找
- ? ? ? ? tf.argmax(数组,axis = 1)? ? ? ? ?# 按行来找
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)) # 按行来找。
12.转换矩阵的数据类型
????????转换x的数据类型,后面矩阵相乘时会因数据类型不一致报错
? ? ? ? 目标矩阵 = tf.cast(原始矩阵, 目标类型)
x_train = tf.cast(x_train, tf.float32)
x_test = tf.cast(x_test, tf.float32)
|