张量的类型
**tf.Variable **: 变量 Tensor,需要指定初始值,常用于定义可变参数,例如神经网络的权重。
**tf.constant **: 常量 Tensor,需要指定初始值,定义不变化的张量。
import tensorflow as tf
v = tf.Variable([[1, 2], [3, 4]]) # 形状为 (2, 2) 的二维变量
c = tf.constant([[1, 2], [3, 4]]) # 形状为 (2, 2) 的二维常量
#输出张量的Numpy数组
c.numpy()
几个经常会用到的新建特殊常量张量的方法:
- tf.zeros:新建指定形状且全为 0 的常量 Tensor
- tf.zeros_like:参考某种形状,新建全为 0 的常量 Tensor
- tf.ones:新建指定形状且全为 1 的常量 Tensor
- tf.ones_like:参考某种形状,新建全为 1 的常量 Tensor
- tf.fill:新建一个指定形状且全为某个标量值的常量 Tensor
c= tf.zeros([3, 3]) # 3x3 全为 0 的常量 Tensor
c
'''
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]], dtype=float32)>
'''
d=tf.ones_like(c) # 与 c 形状一致全为 1 的常量 Tensor
d
'''
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=float32)>
'''
tf.fill([2, 3], 6) # 2x3 全为 6 的常量 Tensor
'''
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[6, 6, 6],
[6, 6, 6]], dtype=int32)>
'''
tf.linspace(1.0, 10.0, 5, name="linspace") # 创建一些序列,创建一个等间隔序列。
"""
<tf.Tensor: shape=(5,), dtype=float32, numpy=array([ 1. , 3.25, 5.5 , 7.75, 10. ], dtype=float32)>
"""
tf.range(start=1, limit=10, delta=2)#创建一个数字序列。
"""
<tf.Tensor: shape=(5,), dtype=int32, numpy=array([1, 3, 5, 7, 9], dtype=int32)>
"""
张量的计算 Eager Execution
c
'''
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[1, 2],
[3, 4]], dtype=int32)>
'''
# 加法计算
c + c
'''
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[2, 4],
[6, 8]], dtype=int32)>
c
'''
# 矩阵乘法
a = tf.constant([1., 2., 3., 4., 5., 6.], shape=[2, 3])
b = tf.constant([7., 8., 9., 10., 11., 12.], shape=[3, 2])
c = tf.linalg.matmul(a, b) # 矩阵乘法
'''
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[ 58., 64.],
[139., 154.]], dtype=float32)>
'''
tf.linalg.matrix_transpose(c) # 转置矩阵
'''
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[1, 3],
[2, 4]], dtype=int32)>
'''
自动求导
TensorFlow 中,你可以使用 tf.GradientTape 跟踪全部运算过程,以便在必要的时候计算梯度:
w = tf.Variable([1.0]) # 新建张量
with tf.GradientTape() as tape: # 追踪梯度
loss = w * w
grad = tape.gradient(loss, w) # 计算梯度
grad
tf.GradientTape 会像磁带一样记录下计算图中的梯度信息,然后使用 .gradient 即可回溯计算出任意梯度,这对于使用 TensorFlow 低阶 API 构建神经网络时更新参数非常重要。
常用的模块
官方文档:TensorFlow
- tf.:包含了张量定义,变换等常用函数和类。
- tf.data:输入数据处理模块,提供了像 tf.data.Dataset 等类用于封装输入数据,指定批量大小等。
- tf.image:图像处理模块,提供了像图像裁剪,变换,编码,解码等类。
- tf.keras:原 Keras 框架高阶 API。包含原 tf.layers 中高阶神经网络层。
- tf.linalg:线性代数模块,提供了大量线性代数计算方法和类。
- tf.losses:损失函数模块,用于方便神经网络定义损失函数。
- tf.math:数学计算模块,提供了大量数学计算函数。
- tf.saved_model:模型保存模块,可用于模型的保存和恢复。
- tf.train:提供用于训练的组件,例如优化器,学习率衰减策略等。
- tf.nn:提供用于构建神经网络的底层函数,以帮助实现深度神经网络各类功能层。
- tf.estimator:高阶 API,提供了预创建的 Estimator 或自定义组件。