import tensorflow as tf
关于张量的维度
一维 | 直接写数 |
二维 | 用 [行数 , 列数] |
多维 | 用[n , m , j , k , ...] |
生成张量的维数只需要看有多少层括号即可。
1.创建一个Tensor
# tf.constant(张量内容,dtype = 数据类型(可选))
tf.constant([1,5],dtype = tf.int64)
2.将 numpy 的数据类型转换成Tensor数据类型
# tf.convert_to_tensor(数据名,dtype=数据类型(可选))
a = np.arange(0,5)
b = tf.convert_to_tensor(a,dtype=tf.int64)
3.创建全为 0 的张量
tf.zeros(维度)
4.创建全为 1 的张量
tf.ones(维度)
5.创建全为指定值的张量
tf.fill(维度,指定值)
6.生成正态分布的随机数,缺省时均值为0,标准差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
7.生成截断式正态分布的随机数
tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
8.生成均匀分布的随机数
tf.random.uniform(维度,minval=最小值,maxval=最大值)
9.强制转换tensor数据类型
tf.cast(张量名,dtype = 数据类型)
10.计算张量上的最小值
tf.reduce_min(张量名)
11.计算张量上的最大值
tf.reduce_max(张量名)
12.将某一变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
tf.Variable(初始值)
# eg.
w = tf.Variable(tf.random.normal([2,2],mean = 0,stddev = 1))
13.张量的数学运算:四则运算
# 加法
tf.add(张量1,张量2)
# 减法
tf.subtract(张量1,张量2)
# 乘法
tf.multiply(张量1,张量2)
#除法
tf.divide(张量1,张量2)
14.张量的数学计算:平方开方次方
# 平方
tf.square(张量名)
# 次方
tf.pow(张量名,次方数)
# 开方
tf.sqrt(张量名)
15.张量的数学计算:矩阵相乘,需要保证前一个张量的列数等于后一个张量的行数
tf.matmul(张量1,张量2)
16.切分传入张量的第一维度,生成输入特征/标签对,构建数据集,适应于numpy和tensor。
data = tf.data.Dataset.from_tensor_slices((特征,标签))
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 elem in dataSet:
print(elem)
17.计算计算过程,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)
print(grad)
#输出结果
#tf.Tensor(6.0, shape=(), dtype=float32)
18.enumerate 是python的内建函数,它可以遍历每一个元素(列表、元组、字符串等)组合为:索引-元素。常常在for循环中使用
seq = ['one','two','three']
for i,elem in enumerate(seq):
print(i,elem)
#结果:
#0 one
#1 two
#2 three
19.独热编码。在分类问题中,常常用独热码作为标签,例如在鸢尾花分类中,如果0表示狗为鸢尾,1表示杂色鸢尾,2表示弗吉尼亚鸢尾,则标签1用独热码表示为[0,1,0]
tf.one_hot(待传入数据,depth = 几分类)
classes = 3
labels = tf.constant([1, 0, 2])#输入元素的值最小为0,最大为2
output = tf.one_hot(labels,depth=classes)
print(output)
#输出结果
tf.Tensor(
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]], shape=(3, 3), dtype=float32)
20.softmax函数:使输出符合概率分布,相当于计算以下函数:
tf.nn.softmax(x)
y = tf.constant([1.01,2.01,-0.66])
y_pro = tf.nn.softmax(y)
print("y_pro = ",y_pro)
#输出结果
y_pro = tf.Tensor([0.25598174 0.69583046 0.04818781], shape=(3,), dtype=float32)
21.更新参数assign_sub:在调用该函数需要先调用tf.Variable定义变量位可训练(自更新)
w.assign.sub(w要自减的内容)
w = tf.Variable(4)
w.assign_sub(1) #等效于 w = w-1
print(w)
#运行结果
<tf.Variable 'Variable:0' shape=() dtype=int32, numpy=3>
22.tf.argmax返回张量沿指定维度最大的索引值
tf.argmax(张量名,axis=操作轴)#0为列,1为行
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))#返回每一行最大值的索引
#运行结果
[[1 2 3]
[2 3 4]
[5 4 3]
[8 7 2]]
tf.Tensor([3 3 1], shape=(3,), dtype=int64)
tf.Tensor([2 2 0 0], shape=(4,), dtype=int64)