tensorflow2.0 创建张量

老子叫甜甜 提交于 2019-11-30 00:40:42

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表示特征图的通道数。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!