• 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)或者@
    • 范数: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)

    前向传播过程:

     

    九、矩阵操作

    1、合并

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

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

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

    2、分割

    tf.split()

     

    3、复制与填充

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

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

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

    第一个维度不填充,

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

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

     

    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=):实现根据索引号收集数据的目的。

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

     

    • tf.boolean_mask(x,mask,axis):可以通过给定掩码(Mask)的方式进行采样。

     

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

     

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

     

      

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

    摘自:《Tensor flow深度学习》

  • 相关阅读:
    spring揭秘 读书笔记 六 bean的一生
    分枝限界算法
    libLAS1.8.0 编译和配置(VS2013+Win7 64)(一)
    Unity学习笔记 之 发射小球碰撞物体的代码记录
    hdu1281 棋盘游戏 --- 最大匹配
    javascript设计模式
    3、Android中Activity的跳转
    2.11 确定运行计划
    php扩展之 pdo_mysql.so
    POJ 1061 青蛙的约会(扩展欧几里得)
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/12560459.html
Copyright © 2020-2023  润新知