2 创建张量
Tensorflow中可以通过多种方式创建张量,如从python list对象创建,从numpy数组创建,创建采样自某种已知分布的张量。
2.1 从numpy,python List对象创建
Numpy Array数组和Python List是python程序中间非常重要的数据载体容器,很多数据都是通过Python语言将数据加载至Array或者List容器,再转换到Tensor类型,通过Tensorflow运算处理后导出到Array或者List容器,方便其他模块调用。
通过tf.convert_to_tensor可以创建新Tensor,并将保存在Python List对象或者Numpy Array对象中的数据导入到新的Tensor中:
tf.convert_to_tensor([1, 2.])
tf.convert_to_tensor(np.array([[1,2 ], [3, 4]]))
tf.constant()和tf.convert_to_tensor()都能够自动的把Numpy数组或者Python List数据类型转换为Tensor类型,使用其一即可。
2.2 创建全0,全1张量(tf.zeros(), tf.ones())
将张量创建为全0或者全1数据是非常常见的张量初始化手段。
考虑线性变换 ,将权值矩阵W初始化为全1矩阵,偏置b初始化为全0向量,此时线性变换输出 ,是一种比较好的初始化状态。
通过tf.zeros()和tf.ones()即可创建任意形状全0和全1的张量。
通过tf.zeros_like()和tf.ones_like()可以方便地创建与某个张量shape一致,内容全0或全1的张量。
2.3 创建自定义数值张量(tf.fill(shape, value))
通过tf.fill(shape, value)可以创建全为自定义数值value的张量。
例如,创建元素为-1的张量
tf.fill([2, 3], -1)
2.4 创建已知分布的张量
正态分布(normal Distribution或Gaussian Distribution)和均匀分布(Uniform Distribution)。在卷积神经网络中,卷积核张量W初始化正太分布有利于网络的训练;在对抗生成网络中,隐藏变量z一般采样自均匀分布。
tf.random.normal(shape, mean = 0.0, stddev = 1.0)可以创建形状为shape,均值为mean,标准差为stddev的正态分布 。
tf.random.normal([2, 2], mean = 1, stddev = 2)
tf.random.uniform(shape, minval = 0, maxval = None, dtype = tf.float32)可以创建采样自[minval, maxval]区间的均匀分布的张量,默认采样自区间[0, 1]
2.5 创建序列(tf.range)
在循环计算或者对张量进行索引时,经常需要创建一段连续的整型序列,可通过tf.range()函数实现。
tf.range(limit, delta = 1),可以创建[0, limit)之间,步长为delta的整型序列。
tf.range(start, limit, delta = 1),可以创建[start, limit),步长为delta的序列。
2.6 张量典型应用
- 标量:标量的典型用途是误差值的表示,各种测量指标的表示,比如准确度(Accuracy),精度(Precision)和召回率(Recall)。
- 向量:在全连接层和卷积神经网络层,偏置张量b使用向量来表示。
- 矩阵:全连接层的批量输入X和权重矩阵W
- 3维张量:自然语言处理中的序列信号,
- 4维张量:其在卷积神经网络中应用十分广泛,用于保存特征图数据, ,b表示batch size,b/w表示特征图的高宽,c表示特征图的通道数。
来源:CSDN
作者:biubiu先生
链接:https://blog.csdn.net/u013752048/article/details/103246415