• 机器学习--0.0


    闲话

    机器学习终于开坑了!!

    机器学习当然要tensorflow+gpu啦(可我没有/(ㄒoㄒ)/~~)

    学学基础tensorflow+cpu应该也可以吧

    之前是直接看吴恩达的视频,那些算法原理懂了个大概,结果发现根本就无法实现...也无法理解 tf 里面那些函数的作用(后来发现是tensorflow的锅

    所以这次准备再系统学习一遍

    找基于tf 2 做机器学习的资源找了好半天

    最后感觉还是这个视频讲的最详细 虽然还是tensorflow 1.x

    https://www.bilibili.com/video/BV1ua4y1t7Ws?

    他是先一步步手码实现实战实例,之后再用tf的函数来进行简化,更好让人理解原理和实现

    tensorflow2.x的代码可以网上找

    下面是正文


    函数功能

    只列举一部分。 需要的时候谁会看这个?直接搜索引擎不好吗

    其实tf和numpy基础功能也差不多,用tf 2 也是为了更好和numpy兼容|更方便

    • tf.zeros(shape,dtype=tf.float32) 全0

    • tf.zeros_like(x) 直接根据x的dim来创建 0 matrix <==> tf.zeros(x.shape)

    • tf.ones(shape,dtpye=tf.float32) 全1

    • tf.ones(x) 创建一个标量|dim=0

    • tf.ones([]) 创建一个 1*1的向量,值为 x

    • tf.ones([x])** 创建向量 shape=x

    • tf.math.log :以e为底的对数函数

    • tf.exp :指数函数

    • tf.uniform(shape,minval,maxval,dtpye) 均匀变化的数组

    • tf.random.normal(shape,mean(均值默认0),stddev(方差默认1))

    • tf.fill(dim,value) 填充数字

    • tf.random.shuffle(x) 将 x数组 随机打乱

    上面这些都和numpy没啥区别

    • tf.gather(a,axis,idx) axis可以指定轴,然后这个轴按照idx这个list中的顺序取a的数据**

    a.shape=[4,2,3,1] idx=[1,0,0,2]

    a.shape=[2,4,4,3]

    • tf.constant(value,shape) 填充常数数字

    • 返回维度

      x.ndim

    • 类型转换

      # numpy转化为tensor
      xxx=tf.covert_to_tensor(name,dtype) 
      # 转换为numpy
      x.numpy()
      # 判断是否为tensor类型 
      tf.is_tensor(x)
      # dataframe类型转换为 onehot
      data=pd.get_dummies(data,prefix=data.colums)
      # tf类型转onehot
      # dep是data中最大的数字+1
      data=tf.onehot(data,depth=)
      
    • shape|dim 操作

      # 将x张量 变成shape形
      tf.reshape(xx,shape) 
      # -1代表这个维度的所有
      tf.reshape(xx,[-1,xxx])
      # 将x转化为1*depth的one_hot向量
      tf.one_hot(x,depth)
      # xx张量增加第axis个维度(axis是从0开始)
      tf.expand_dim(xx,axis)
      
      
      # 感觉这后面的都不常用了
      
      tf.transpose(a,vector(如[x1,x2,x3,x4]))
      # 相当于将原来图像做变换
      # 比如原来是[n,h,w,c] vector=[0,3,2,1]
      # ==> [n,c,w,h] 这样可以使content不改变 '实质'
      
      # 将xx张量按axis和list分割成其他的张量
      tf.split(xx,list,axis) 
      
      # xi是张量,axis 表示张量在哪个轴上拼接
      tf.concat([x1,x2,xn],axis) 
      # 例如axis=0,则 [[x1],[x2]],axis=1,[[x1,x2]]
      
      # 删去axis轴
      tf.squeeze(x,axis) 
      # 例如 axis=0,xx=[[x1],[x2],[x3],[x4]],list=[1:2:1]
      # output:[x1] [[x2],[x3]] [x4]
      # 如果list是一个数代表平均分为list个张量
      
      

    机器学习中维度的'含义'

    dim=3

    句子:一共有几个句子,每个句子有几个单词,每个单词被看作多少维向量

    [num,len,vector_dim]

    dim=4
    二维卷积必须是四维
    照片:一共有多少张照片,每个照片的大小(h,w),有几个通道

    [num,height,weight,channel]

    dim=5 |不太懂...

    就是把一个总任务分割成了多个任务同时处理,每次处理的个数就成了第一维

    [batch,num,h,w,rgb]


    卷积神经网络 CNN

    基本参数概念

    filter

    俗称卷积核:要设定长宽,但这个具体数值是后面自己学习来的,类似于神经网络中的 w(权值)

    卷积核的长宽除了第一次是自己设定,后面都会有求解的公式

    一般卷积核和input的二维数组都是正方形所以K=W1=H1

    **卷积核大小 F 步长 S 边界填充P 卷积核个数K **

    W2 = (W1 -F +2*P)/S+1

    H2=(H2-F+2*P)/S+1

    厚度=K 这个是忽略输入本身厚度 比如输入的彩色图片厚度是3,但是 K=10 厚度不是30还是10

    但是 padding=same的话宽高是可以不变的,因为是自动选取padding,少了会自动设置padding使w不变

    tensroflow2.x 都自动帮你计算好了,''随便'' 配置都行,甚至都不要你自己变onehot编码

    stride

    步长:就是卷积核在input的二维数组上移动的长度

    padding

    因为卷积核在提取特征的时候边缘必然会比中心提取的‘更少’,边缘权值变相的减少了,所以需要加入padding这个参数

    来维持边缘边缘被提取的次数与中心相同

    padding=1可以视为在外面围一圈0,padding=2... 以此类推

    pool

    池化:简单理解就是把特征的长宽进一步压缩

    有max_pooling和 averge_pooling
    一般分类问题max_pool会更好

    一般卷积步骤

    input -> conv -> relu ->pool (这三步重复任意次) -> FC (全连接层) -> output

    卷积层数是不包括pooling层的,并且conv和relu只算一层,一个FC单独算一层,最后output也算FC只不过不同人叫法不一样

    一般经典网络架构分析

    目前通过 看这个视频了解到了alax net和vgg net 的优劣区别?

  • 相关阅读:
    C# 计算结果四舍五入
    同时执行多条SQL语句
    将一个datatable的值赋给另一个dt的三种方法转
    Oracle中增加、删除、修改字段
    Oracle 某列转为行
    DataList中链接跳转页面传参数
    修改数据库中多个表中的同一个字段的长度(可参照修改成同一字段的列名、注释等)
    克隆表结构
    博客专题
    Rational Rose2003 安装教程
  • 原文地址:https://www.cnblogs.com/cherrypill/p/13287755.html
Copyright © 2020-2023  润新知