Tensorflow2学习--001(基本操作与介绍)

Tensorflow基本操作

tensorflow是如今世界上最流行的开源机器学习框架之一,它可以让我们快速搭建机器学习模型。

Tensorflow基本数据类型

numpy 不支持自动求导 并且不能利用GPU计算

tf.Tensor 类似numpy

什么是tensor
    数据 1.1
    向量 [1.1]
    matrix [[1.1,2.2],[3.3,4.4],[5.5,6.6]]
    
    tensor 基本所有的数据类型

tf is a computing lib
    int float double
    bool string

常量类型创建  
    tf.constant(1)
    创建一个int类型的tensor 值为1
    tf.constant(1.)
    创建一个float整型tensor 值为1.0
    tf.constant(2.2,dtype = tf.int32)
    创建一个int类型的tensor 
    tf.constant([True,Flase])
    创建一个bool类型的tensor 判断默认是bool 不是01 
    tf.constant('hello,tensor')
    创建一个string类型的tensor 

tensor的属性和方法:
    运用CPU环境创建:
    with tf.device("cpu"):
        a = tf.constant([1])
    运用GPU环境创建:
    with tf.device("gpu"):
        a = tf.range(3)
    
    不指定会运用默认的设备

    1. device 返还一个当前tensor所在的设备
        a.device
    
        aa = a.gpu() 转换设备到gpu
        bb = b.cpu() 转换到cpu  
        
        不同点: 运算方式不一样 必须要在一个设备上运算 
        若a在cpu b在gpu 会报错

    2. .numpy() tensor转为numpy数据类型
    
    3. tf.rank(b)
        返还一个rank(等级 维度) 类型为tensor
    4. tf.is_tensor(b) 
        判断是否为tensor
    
    5. tf.convert_to_tensor(sss)
        转为tensor类型 

    6. tf.cast(aa,dtype = tf.float32)
        数据转换类型

    7. tf.cast(aa,dtype = tf.int32)
        将bool转为int

    8. tf.Variable(a) 
        Variable类型
        专门对于可以优化的参数
        y = wx + b   w和b 除了是tensor 还是 Variable类型 
        tf.Variable(tensor)  又一层的包装
        可以让参数具有可求导的特性
        Variable.trainable 是否可训练
        当一个tensor转为Variable 就会记录梯度信息


创建tensor
    1. 将 numpy转为tensor
        tf.convert_to_tensor(np.ones([2,3]))
        

    2.  tf.zeros_like()
        tf.ones_like()
    3.  tf.ones()    [] != [1]  维度不同
        tf.zeros()  

    4. tf.fill([shape],n)

    5. tf.random.normal([shape],mean=,stddev=) 正态分布
        注意: np.random.normal(平均值列表,方差列表,size)  产生[正态1,正态2,正态3.。。。]

    6. tf.random.truncated_normal([shape],mean=,stddev=) 截断的正态分布  避免梯度消失

    7. tf.random.uniform([],minval=,maxval=)均匀分布


不同的tensor的应用
    [] 标量scalr 一个loss, accuracy

    [out_dim] 向量 
    y = x @ w + b
    y是类型假设共10类 x=[4,784] 四张图片 每张784像素点
    w 参数 应该为 [784,10]    b: [10] 偏置
    每个维度都有其含义 
    使用某些维度 要知道他们都有什么用



tensor索引:
    有规律的索引
    s[,,,,]
    s[-1:] 起始位置-1 -- end
    不写的是开头或者末尾
    s[:]
    : 全部
    s[::2] 步长  ::num
    s[::-1] 逆序
    
    s[0,...] ...代表省略 自动推断
    s[0,...,2] 拿到0图像2通道
    
    无规律的索引
    tf.gather() 给一个index 根据自己的index来索引
    tf.gather(a,axis=,indices=[]) 给出维度和索引
    axis 取值维度(行 或 列)  indices 按axis取某一行 列

    取不同维度的值        
    tf.gather_nd(a,[[0,0],[1,0]]) 0的1和1的1
    
    tf.boolean_mask(a,mask=[True,True,True,True])
    最外层四个图片都取
    tf.boolean_mask(a,mask=[True,True,True,True],axis=0)
    axis维度是否选取  mask必须和元素个数对应
    
    a = tf.ones([2,3,4])
    tf.boolean_mask(a,mask=[[True,True,True],[True,True,Flase]])   
    0维度的 [4][4][4]
    0维度的 [4][4]
    [[4],[4],[4],[4],[4]]
    5*4

维度变换:
    view 理解方式
    [b,28,28]  [b,h,w]
    [b,28*28]  不考虑行和列信息
    [b,2,14*28]  图片分为上下两部分 每部分不考虑行列
    [b,28,28,1] 增加channel
    
    tf.reshape(s,[])
    -1 全部
    视图的转换 

    shape  ndim
    tf.reshape
    tf.transpose(a,perm=[axis]) 转置

    维度展开:
        a:[班级,学生,成绩]
        学校 = [学校,班级,学生,成绩]
        tf.expand_dims(a,axis=)
        在axis处增加一个维度
        用处:             
        如增加一个维度   
                        [1,3,1,35] 
                        [1,3,1,35]  可以进行数据的组合 
                            ||
                        [2,3,1,35]  

        如果 某axis为1 则可以去除该维度 不指定参数 去除所有为1 的维度
        tf.squeeze(a,axis=)




Broadcasting(广播机制)
    张量维度扩张的手段
    并且没有进行复制数据 只是一个手段

    tf.broadcase_to()   可以进行显示的维度扩展
    (x,new_shape)


    维度的自动扩展
    [b,10] + [10] = [b,10]

image

    小维度先对其 
    向大维度进行扩张

image

image

    广播机制好处:
        1.极其便捷
        shape [4,32,8]  + score [5.0]
        =  shape [4,32,8] + shape [1]
        
        2.极度节省内存

    broadcast_to 和 tile的 区别
    
    tile(x,[2,1,1])
    2,1,1 代表 一二三维度分别复制 2 1 1 次

image

张量运算
    1. +-*/  对应运算加减乘除
    2. ** pow square tf.pow(a,3) a**3
    3. sqrt
    4. // %
    5. exp log  tf.exp(a)  tf.math.log(a) 以e为底 
    不能实现以别的为底的log 只能logb / loga == logba 

    6.@ matmul  并行矩阵运算 
                [b,3,4] @ [b,4,5] = [b,3,5]
                tf.matmul(a,b)

    7.linear layer
    8. reduce_mean/max/min/sum  某个维度下面的计算 
posted @ 2022-06-16 15:18  cc学习之路  阅读(126)  评论(0)    收藏  举报