Tensorflow2.0学习(3)---基础 一、常量 二、数值精度 三、待优化张量 四、创建张量 五、索引与切片 六、维度变换 七、广播机制Broadcasting 八、数学运算 九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

tf.constant([1.2,3.3])

1、标量:

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

2、向量:

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

3、矩阵

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

4、字符串

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

5、布尔

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

二、数值精度

tf.constant(12,dtype=tf.int16)

1、类型

张量可保存为不同字节长度的精度,常用类型:tf.int16、tf.int32、tf.int64、tf.float16、tf.float32、tf.float64(即tf.double)等。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

2、 应用场景

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

3、读取精度:a.dtype

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

4、类型转换:tf.case(a,tf.bool)

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

三、待优化张量

tf.Variable(a)或者tf.Variable([1,2],[3,4])

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

四、创建张量

1、从数组、列表对象创建

tf.convert_to_tensor(np.array([1,2],[3,4]))或者tf.constant([1,2])

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

2、创建全0或全1张量

tf.zeros([ ])和tf.ones([ ])

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

新建与某个张量shape一致,内容全0或全1的张量:tf.zeros_like(a)和tf.ones_like(a) ----> tf.zeros(a.shape)

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

3、创建自定义数值张量

创建全为自定义数值的张量,形状为shape:tf.fill(shape,value)

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

4、创建已知分布的张量

正态分布:tf.random.normal()

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

均匀分布:tf.random.uniform()

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

5、创建序列

创建[0,limit) ,步长为delta=1的整型序列:tf.range(limit, delta)

(1)Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

(2) Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

(3)Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 

五、索引与切片

1、创建张量:x = tf.random.normal([4,32,32,3])

2、索引:x[0][2][1][1]

3、切片

冒号:

  • x[: ,1:3, 0:28 , :]、
  • x[0,::]             第一维所有元素
  • x[::-1]             逆序全部元素
  • x[::-2]             逆序间隔采样
  • x[0,::-2,::-2]    行、列逆序间隔采样

 

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

省略号…

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

  • x[0:2,…,1:]   相当于x[0:2,:,:,1:]
  • x[2:, …]        相当于 x[2:]
  • x[..., :2]         相当于x[:,:,:,:2]

六、维度变换

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

基本的维度变换操作函数包含了

  • 改变视图 reshape、
  • 插入新维度 expand_dims,
  • 删除维 度 squeeze、
  • 交换维度 transpose、
  • 复制数据 tile

等函数。

1、改变视图

tf.reshape(x,new_shape)

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

2、增删维度

增加维度:tf.expand_dims(x,axis),在指定的axis处可插入一个新的维度

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 删除维度:tf.squeeze(x,axis)axis为待删除的维度索引号。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 交换维度:tf.transpose(x,perm),作用shape = [b,c,h,w] 变成shape = [b,h,w,c],perm参数表示新维度的顺序List。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 复制数据:tf.tile(x,multiples),mutiples分别指定了每个维度上面的复制倍数,对应位置为1表明不复制,为2表明新长度为原来长度的2倍……

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

七、广播机制Broadcasting

 对于所有长度为1的维度,broadcasting效果和tf.tile一样,都能在此维度上复制若干份。

区别:

  • tf.tile会创建一个新的张量,执行复制 IO 操作,并保存复制后的张量数据。
  • Broadcasting不会立即复制数据,它会在逻辑上改变张量的形状,使得视图上变成了复制后的形状。因此,broadcasting节省了大量的计算资源,推荐使用。

原理介绍:

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

x@w的shape=【2,3】

b的shape=【3】

直接将 x@w  + b ,shape【2,3】 + shape【3】,为何不报错?

因为它会自动调用Broadcasting函数 tf.broadcast_to(x,new_shape) ,将两者shape扩张为相同的 [2,3],即上式可以等效为:y = x@w + tf.broadcast_to (b,[2,3]) 【操作符+在遇到 shape 不一致的 2 个张量时,会自动考虑将 2 个张量自动扩展到 一致的 shape,然后再调用 tf.add 完成张量相加运算】

核心思想:普适性,即同一份数据能普遍适合于其他位置。

在验证普适性之前,需要先将张量 shape 靠右对齐,然后进行普适性判断:

对于长度为 1 的维 度,默认这个数据普遍适合于当前维度的其他位置;

对于不存在的维度,则在增加新维度 后默认当前数据也是普适于新维度的,从而可以扩展为更多维度数、任意长度的张量形 状。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

示意图:

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

八、数学运算

  • 加减乘除:tf.add (+)、tf.subtract(-) 、tf.multiply( *)、tf.divide(/)
  • 整除和余除:// 和%
  • 平方和平方根:tf.square(x)和tf.sqrt(x)
  • 乘方指数:tf.pow(x,a)  或者 **,tf.exp(x)
  • 自然对数(即logex)tf.math.log(x)
  • 其他对数(换底公式,a为底):tf.math.log(x) / tf.math.log(a)
  • 矩阵相乘:tf.matmul(a,b)或者@
  • 范数:tf.norm(x,ord=1)----L1范数,ord=2----L2范数,ord=np.inf----∞范数
  • 最值、均值、和:tf.reduce_max(x,axis)、tf.reduce_min(x,axis)、tf.reduce_mean(x,axis)、tf.reduce_sum(x,axis)
  • Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

前向传播过程:

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

九、矩阵操作

1、合并

将多个张量在某个维度上合并为一个张量。如合并两个班级的成绩表。

——拼接:tf.concat(tensors, axis),不会产生新的维度,仅在现有的维度上合并。axis指在该维度合并。

——堆叠:tf.stack(tensors,axis)创建新维度。tf.stack要求所有合并的张量shape完全一致才能合并。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

2、分割

tf.split()

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

3、复制与填充

(1)填充:tf.pad(x,paddings)

paddings参数包含了多个【Left Padding,Right Padding】的嵌套方案List,

如 [ [0,0], [2,1], [1,2] ] 表示

第一个维度不填充,

第二个维度左边(起始处)填充两个单元,右边(结束处)填充一个单元,

第三个维度左边填充一个单元,右边填充两个单元。

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

keras.preprocessing.sequence.pad_sequences(x, maxlen = , truncating , padding = ) ,可以快速完成句子的填充和截断工作,设置句子长度为maxlen,短的则填充,长的则截断。

(2)复制:tf.tile()

4、数据限幅

  • tf.maxinum(x,a)  实现数据的下限幅,即x∈[a,+∞]
  • tf.mininum(x,a)   实现数据的上限幅,即x∈[-∞,a]
  • tf.mininum(tf.maxinum(x,a),b)   实现数据的上下限幅,即x∈[a,b]
  • tf.clip_by_value(x,a,b)   实现数据的上下限幅,即x∈[a,b]

5、高级操作

  • tf.gather(x,[ 索引号],axis=):实现根据索引号收集数据的目的。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

  • tf.gather_nd(x,[ 多维坐标索引号]):(没有axis)可以通过指定每次采样点的多维坐标来实现采样多个点的目的。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 

  • tf.boolean_mask(x,mask,axis):可以通过给定掩码(Mask)的方式进行采样。Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

  • tf.where(cond,a,b):可以根据cond条件的真假从参数A或B中读取数据,条件判定规则如下:

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

  •  tf.scatter_nd(indices,updates,shape):刷新张量的部分数据,但这个函数只能在全0的白板张量上面执行刷新操作。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

 Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

  

  • tf.meshgrid:生成二维网络的采样点坐标,方便可视化。

Tensorflow2.0学习(3)---基础
一、常量
二、数值精度
三、待优化张量
四、创建张量
五、索引与切片
六、维度变换
七、广播机制Broadcasting
八、数学运算
九、矩阵操作

摘自:《Tensor flow深度学习》