1.标量
标量的典型用途之一是误差值的表示、各种测量指标的表示,比如准确度,精度和召回率等。
import tensorflow as tf
# 随机模拟网络输出
out = tf.random.uniform([4, 10])
# 随即构造样本真实标签
y = tf.constant([2, 3, 2, 0])
# one-hot编码
y = tf.one_hot(y, depth=10)
# 计算每个样本的MSE
loss = tf.keras.losses.mse(y, out)
# 平均MSE
loss = tf.reduce_mean(loss)
print(loss)
tf.Tensor(0.3360483, shape=(), dtype=float32)
2.向量
向量是一种非常常见的数据载体,如在全连接层和卷积神经网络层中,偏置张量𝒃就
使用向量来表示。
例如 2 个输出节点的网络层,我们创建长度为 2 的偏置向量𝒃,并累加在每个输出节点上:
# 模拟获得激活函数的输入z
z = tf.random.normal([4, 2])
print(z)
# 模拟偏置向量
b = tf.ones([2])
print(b)
# 累加偏置
z = z + b
print(z)
tf.Tensor(
[[-0.38646775 0.5014004 ]
[-1.5671092 -0.47123888]
[ 0.13978423 0.7581109 ]
[ 0.315308 -0.8128488 ]], shape=(4, 2), dtype=float32)
tf.Tensor([1. 1.], shape=(2,), dtype=float32)
tf.Tensor(
[[ 0.61353225 1.5014005 ]
[-0.5671092 0.52876115]
[ 1.1397842 1.7581109 ]
[ 1.315308 0.1871512 ]], shape=(4, 2), dtype=float32)
另外,可以通过高层接口Dense()方式直接创建的网络层,张量W和b存储在类的内部,由类自动创建并管理。可以通过全连接层的 bias 成员变量查看偏置变量b。
3.矩阵
矩阵也是非常常见的张量类型,比如全连接层的批量输入𝑋 = [𝑏, 𝑑𝑖𝑛],其中𝑏表示输入样本的个数,即 batch size,𝑑𝑖𝑛表示输入特征的长度。
# 创建特征长度为 4,一共包含 2 个样本的输入数据
x = tf.random.normal([2,4])
# 定义W张量
# 令全连接层的输出节点数为 3,则它的权值张量 W 的 shape 为[4,3]
w = tf.ones([4, 3])
# 定义b张量
b = tf.zeros([3])
# x@w+b运算
o = x@w + b
o
<tf.Tensor: id=218, shape=(2, 3), dtype=float32, numpy=
array([[-0.6558767 , -0.6558767 , -0.6558767 ],
[-0.01086588, -0.01086588, -0.01086588]], dtype=float32)>
x@w+b 网络层称为线性层,在 TensorFlow 中可以通过 Dense类直接实现,Dense 层也称为全连接层。我们通过 Dense 类创建输入 4 个节点,输出 3 个节点的网络层,可以通过全连接层的 kernel 成员名查看其权值矩阵 W:
import tensorflow as tf
from keras import layers
# 定义全连接层输出结点为3
fc = layers.Dense(3)
# 定义全连接层的输入结点为4
fc.build(input_shape=(2, 4))
# 通过kernel成员名查看其权值矩阵W
fc.kernel
<tf.Variable 'kernel:0' shape=(4, 3) dtype=float32, numpy=
array([[-0.32323658, -0.29640782, 0.27804315],
[ 0.57349694, -0.45690656, 0.41877365],
[ 0.7450305 , 0.39951694, 0.072891 ],
[-0.2107293 , 0.5728272 , -0.20536023]], dtype=float32)>
4.三维张量
三维的张量一个典型应用是表示序列信号,它的格式是:
𝑋 = [𝑏, 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒 𝑙𝑒𝑛, 𝑓𝑒𝑎𝑡𝑢𝑟𝑒 𝑙𝑒𝑛]
其中𝑏表示序列信号的数量,sequence len 表示序列信号在时间维度上的采样点数,feature len 表示每个点的特征长度。
这个可以通过IMDB 电影评价数据集自行理解,比如x_train 张量的 shape 为[25000,80],其中 25000 表示句子个数,80 表示每个句子共 80 个单词,每个单词使用数字编码方式。我们通过 layers.Embedding 层将数字编码的单词转换为长度为 100 个词向量:
这样训练集的大小即为 TensorShape([25000, 80, 100])
4.四维张量
大于 4 维的张量一般应用的比较少。
4 维张量在卷积神经网络中应用的非常广泛,它用于保存特征图(Feature maps)数据,格式一般定义为[b, h, w, c]。
其中𝑏表示输入的数量,h/w分布表示特征图的高宽,𝑐表示特征图的通道数。