内容来源视频,视频地址:here
2019年3月 tensorflow 2.0 测试版发布
2019年10月 tensorflow 2.0 正式发布
2020年1月 tensorflow2.1 发布
-
创建一个张量,
tf.constant(张量内容, dtype=数据类型[可选])
-
将
numpy
数据装换成tensor
数据类型,tf.convert_to_tensor(数据名, dtype=数据类型[可选])
-
创建全为
0
的张量,tf.zeros(维度)
; -
创建全为
1
的张量,tf.ones(维度)
; -
创建全为指定值的张量,
tf.fill(维度, 指定值)
; -
生成正态分布的随机数, 默认均值为
0
,标准差为1
,tf.random.normal(维度, mean=均值, stddev=标准差)
; -
生成截断式正态分布的随机数,
tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
;
随机数的取值在 ( μ − 2 θ , μ + 2 θ ) (\mu - 2\theta, \mu + 2\theta) (μ−2θ,μ+2θ)之间,之外会重新生成; -
生成均匀分布随机数,
tf.random.uniform(维度, minval=最小值, maxval=最大值)
; -
tensor
数据类型转换:tf.cast(张量名, dtype=数据类型)
; -
计算张量维度上的元素最小值:
tf.reduce_min(张量名, axis=轴)
,axix=0
表示列上,1
表示行上;
类似的还有:tf.reduce_max
、tf.reduce_sum
、tf.reduce_mean
等; -
tf.Variable(初始值)
将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。
eg.w = tf.Variable(tf.random.normal([2, 2], mean=0, stddev=1))
,也就是正太分布随机初始化我们定义维度的可训练参数w
:
-
四则运算:
tf.add(张量1, 张量2)
、tf.subtract(张量1, 张量2)
、tf.multiply(张量1, 张量2)
、tf.divide(张量1, 张量2)
,分别对应加减乘除;维度相同的张量才可进行四则运算
。 -
tf.square(张量)
、tf.pow(张量, n次方)
、tf.sqrt(张量)
,分别对应平方、次方和开方; -
使用
tf.matmul(矩阵1, 矩阵2)
来进行矩阵乘法; -
输入特征与对应标签的配对,使用
tf.data.Dataset.from_tensor_slices((输入特征, 标签))
,Numpy
和Tensor
格式的都可以使用该语句读入数据。 -
函数对参数的求导运算,使用
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)
print(grad) # 6.0
因为目标函数是 y = w 2 y=w^2 y=w2, 而标记的求导变量是w
,且初始化为常数3
,那么结果就是6
。
- 独热编码表示,使用
tf.one_hot(带转换数据, depth=几分类)
,
eg.
datas = tf.constant([2, 0, 1])
classes = 3 # 待分类类别
output = tf.one_hot(datas, depth=classes)
print(output)
softmax
即:tf.nn.softmax(x)
- 参数自更新函数,
tensor.assign_sub(tensor要自减的内容)
w = tf.Variable(4)
w.assign_sub(2)
print(w) # 2
类似的,还有assign_add
- 返回张量在指定轴上的最大值下标,
tf.argmax(tensor, axis=轴)
a = tf.constant([[1, 2, 3],[4, 5, 6]])
print(tf.argmax(a, axis=0))
print(tf.argmax(a, axis=1))
- 条件语句,
tf.where(条件语句, 真返回A, 假返回B)
- 将两个数据按照垂直方向叠加,
np.vstack(数组1, 数组2)
import numpy as np
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
c = np.vstack((a, b))
print(c)
- 网格坐标点生成,
np.mgrid[],.ravel(), np.c_[]
x, y = np.mgrid[1:3:1, 2:4:0.5] # 起始值:结束值:步长
print(x)
print(y)
x, y = np.mgrid[1:3:1, 2:4:0.5] # 起始值:结束值:步长
grid = np.c_[x.ravel(), y.ravel()]
print(grid)