TensorFlow2.0学习(3)---基础

一、常量

tf.constant([1.2,3.3])

1、标量:

2、向量:

3、矩阵

4、字符串

5、布尔

二、数值精度

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

1、类型

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

2、 应用场景

3、读取精度:a.dtype

 

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

 

三、待优化张量

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

四、创建张量

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

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

2、创建全0或全1张量

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

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

 

3、创建自定义数值张量

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

4、创建已知分布的张量

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

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

 

5、创建序列

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

(1)

(2) 

(3)

 

五、索引与切片

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]    行、列逆序间隔采样

 

省略号…

 

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

六、维度变换

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

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

等函数。

1、改变视图

tf.reshape(x,new_shape)

2、增删维度

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

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

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

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

七、广播机制Broadcasting

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

区别:

  • tf.tile会创建一个新的张量,执行复制 IO 操作,并保存复制后的张量数据。
  • Broadcasting不会立即复制数据,它会在逻辑上改变张量的形状,使得视图上变成了复制后的形状。因此,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 的维 度,默认这个数据普遍适合于当前维度的其他位置;

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

 

示意图:

八、数学运算

  • 加减乘除: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)或者@

前向传播过程:

 

摘自:《Tensor flow深度学习》

猜你喜欢

转载自www.cnblogs.com/Lee-yl/p/12560459.html