美文网首页
Tensorflow 2.0

Tensorflow 2.0

作者: 学术界末流打工人 | 来源:发表于2020-02-25 23:03 被阅读0次

    Tensorflow介绍与环境搭建

    Tensorflow是什么

    Tensorflow: 是goolge开发的,最开始是google brain开发的内部库,后来开源出来

    1. 它是采用数据流图用于数值计算-可以理解为一个流程图,节点代表数学操作,线代表数据的走向,当数据从起点走到终点时我们就认为计算完成了
    2. 它功能强大,多平台支持,支持CPU,GPU,移动设备等
    3. 最开始用于深度学习,变得越来越通用,任何可以抽象成数据流图都可以用tensorflow

    特性:

    • 高度的灵活性,体现在数据流图上,只要可以表示为数据流图的就可以使用tensorflow
    • 可移植性,在多平台执行
    • 产品和科研结合,科研的结果可以直接用到产品上去
    • 自动求微分
    • 多语言支持
    • 性能最优化

    Tensorflow版本变迁

    1. 2015年11月:TensorFlow宣布开源并首次发布
    2. 12月:支持GPUs,Python 3.3(v 0.6)
    3. 2016年4月:分布式TensorFlow(v 0.8)
    4. 11月: 支持Windows(v 0.11)
    5. 2017年2月:性能改进,API稳定性(v 1.0) 此版本为分水岭
    6. 4月: Keras 集成(v 1.1)keras后端支持TensorFlow,并且TensorFlow中也有对Keras的集成版本
    7. 8月: 高级API,预算估算器,更多模型,初始TPU支持(v 1.3)
    8. 11月:Eager execution 和 TensorFlow Lite (v 1.5)
    9. 2018年3月:推出TF Hub,TensorFlow.js,TensorFlow Extended(TFX)
    10. 5月:新入门内容;Cloud TPU 模块与管道(v 1.6)所谓管道就是对数据一种高效的输入方式
    11. 6月: 新的分布式策略API;概率编程工具TensorFlow Probability(v 1.8)
    12. 8月:Cloud Big Table 集成(v 1.10)
    13. 10月:侧重于可用性的API改进(v 1.12)
    14. 2019年:TensorFlow v 2.0 发布

    TensorFlow 1.0--主要特性

    • XLA---Accelerate Linear Algebra 专门针对线性运算的编译器,这个编译器可以优化TensorFlow,使他计算的更快,
      • TensorFlow训练速度提升58倍
      • 可移植性,可以在移动设备运行
    • 引入更高级别的API---tf.layers/tf.metrics/tf.losses/tf.keras
    • TensorFlow调试器

    TensorFlow 2.0--主要特性

    • 使用tf.keras和eager mode 进行更加简单的模型构建
    • 跨平台模型部署
    • 因为对API进行优化,提供强大的研究实验
    • 清楚不推荐使用的API和减少重复来简化API

    TensorFlow2.0---简化的模型开发流程

    • 使用tf.data加载数据
    • 使用tf.keras构建模型,也可以使用premade estimator来验证模型
      • 使用 TensorFlow hub 进行迁移学习
    • 使用eager mode进行运行和调试
    • 使用分发策略来进行分布式训练
    • 导出到SavedModel
    • 使用TensorFlow Serve,TensorFlow Lite,TensorFlow.js 部署模型

    TensorFlow2.0---强大的跨平台能力

    • TensorFlow服务
      • 直接通过HTTP/REST或GRPC/协议缓冲区
    • TensorFlow Lite---可部署在Android,IOS和嵌入式系统上
    • TensorFlow.js---在javascript中部署模型
    • 其他语言

    TensorFLow2.0---强大的研究实验能力

    • Keras功能API和子类API,允许创建复杂的拓扑结构
    • 自定义训练逻辑,使用tf.GradientTape和tf.custom_gradient进行更细粒度的控制
    • 低层API自始至终可以与高层结合使用,完全可定制
    • 高级扩展:Ragged Tensors, Tensor2Tensor等

    TensorFlow VS PyTorch

    • 入门时间
      • TensorFlow 1.*
        • 静态图 :构建完之后不可更改
        • 学习额外概念
          • 图,会话,变量,占位符等
        • 写样板代码
      • TensorFlow 2.0
        • 动态图:构建完之后可以更改
        • Eager mode避免1.0缺点,直接集成在python中
      • Pytorch
        • 动态图
        • Numpy的扩展,直接集成在python中
      • 图的创建和调试
      • 全面性
      • 序列化与部署

    图创建和调试
    - TensorFlow 1.*
    - 静态图,难以调试,学习tfdbg调试

    • TensorFlow 2.0 与 pytorch
      • 动态图,python 自带调试的工具

    全面性

    • Pytorch缺少
      • 沿维翻转张量(np.flip, np.flipud, np.fliplr)
      • 检查无穷与非数值张量(np.is_nan, np.is_inf)
      • 快速傅里叶变换(np.fft)
    • 随着时间变化 越来越少

    序列化与部署

    • Tensorflow 支持更加广泛
      • 图保存为protocol buffer
      • 跨语言
      • 跨平台
    • Pytorch支持比较简单

    Tensorflow-keras 实战

    tfkeras简介

    keras是什么:

    • 基于python的高级神经网络API
    • Francois Chollet 于2014-2015年编写的
    • 以Tensorflow,CNTK或者Teano为后端运行,keras必须有后端才可以运行
      • 后端可以切换,现在多用tensorflow

    Tensorflow-keras是什么:

    • Tensorflow对keras API规范的实现
    • 相对于以tensorflow为后端的keras,Tensorflow-keras与Tensorflow结合更加紧密
    • 实现在tf.keras空间下

    Tf-keras和keras联系:

    • 基于同一套API
      • keras程序可以通过改导入方式轻松转为tf.keras程序
      • 反之可能不成立,因为tf.keras有其他特性
    • 相同的JSON和HDF5模型序列化格式和语义

    Tf-keras和keras区别:

    • Tf.keras全面支持eager mode
      • 只是用keras.Sequential和keras.Model时没有影响
      • 自定义Model内部运算逻辑时候会有影响
        • Tf底层API可以使用keras的model.fit等抽象
        • 适用于研究人员
    • Tf.keras支持基于tf.data的模型训练
    • Tf.keras支持TPU训练
    • Tf.keras支持tf.distribution中的分布式策略
    • 其他特性
      • Tf.keras可以与Tensorflow中的estimator集成
      • Tf.keras可以保存为SavedModel

    如何选择?

    • 如果想用tf.kears的任何一个特性,那么选择tf.keras
    • 如果后端互换性很重要,那么选keras
    • 如果都不重要,那随便

    分类问题和回归问题

    • 分类问题预测的是类别,模型的输出是概率分布
      • 三分类问题输出例子:[0.2,0.7,0.1]
    • 回归问题预测的是值, 模型的输出是一个实数值

    目标函数

    为什么需要目标函数?

    • 参数是逐步调整的
    • 目标函数可以帮助权衡模型的好坏

    分类问题:

    • 需要权衡目标类别与当前预测的差距
      • 三分类问题输出例子:[0.2,0.7,0.1]
      • 三分类真实类别:2->one_hot->[0,0,1]
    • One-hot编码,把正整数变为向量表达
      • 生成一个长度不小于正整数的向量,只有正整数的位置处为1,其余位置都为0
    • 平方差损失
    • \frac 1 n \sum_{x,y}\frac 1 2(y-Model(x))^2
    • 交叉熵损失
    • \frac 1 n\sum_{x,y}yln(Model(x))
    • 平方差损失举例
      • 预测值:[0.2,0.7,0.1]
      • 真实值:[0,0,1]
      • 损失函数值:[(0-0)2+(0.7-0)2+(0.1-1)^2]*0.5=0.65

    回归问题:

    • 预测值与真实值的差距
    • 平方差损失
    • 绝对值损失

    归一化与批归一化

    归一化:

    • Min-max 归一化: x * = \frac{(x-min)} {max-min}
    • Z-core 归一化:x * = \frac{(x-\mu)} \delta μ均值 δ方差

    批量归一化:

    • 每层的激活值都做归一化

    左侧没有归一化,导致theta1和theta2的数据范围不一致,所以等高线看起来为椭圆,导致计算梯度时候法向量不指 向圆心,会走弯路

    Dropout


    Dropout作用:
    • 防止过拟合
      • 训练集很好,训练集上不好
      • 参数太多,记住样本,不能泛化

    wide & deep模型

    • 16年发布,用于分类和回归
    • 应用到了Google Play 中的应用推荐

    稀疏特征

    • 离散值特征

    • One-hot表示

    • Eg:专业={计算机,人文,其他},人文=[0,1,0]

    • Eg.:词表={人工智能,你,他,慕课网,...}. 他=[0,0,1,0...]

    • 叉乘={(计算机, 人工智能),(计算机, 你),....}

    • 叉乘之后

      • 稀疏特征做叉乘获取共现信息
      • 实现记忆的效果

    稀疏特征-优缺点

    • 优点
      • 有效,广泛用于工业界
    • 缺点
      • 需要人工设计
      • 可能过拟合,所有特征都叉乘,相当于记住每一个样本

    密集特征

    • 向量表达

      • Eg:词表={人工智能,你,他,慕课网}
      • 他:[0.3,0.2,0.6,(n维向量)]
    • Word2vec工具

      • 男-女=国王-王后

      密集特征优缺点

      • 优点
        • 带有语义信息,不同向量之间有相关性
        • 兼容没有出现过的特征组合
        • 更少人工参与
      • 缺点
        • 过度泛化,推荐不怎么相关的产品

    超参数搜索

    为什么要超参数搜索:

    • 神经网络有很多训练过程中不变的参数
      • 网络结构参数:几层,每层宽度,每层激活函数等
      • 训练参数:batch_size,学习率,学习衰减算法等
    • 手工去试耗费人力

    搜索策略:

    • 网格搜索
    • 随机搜索
    • 遗传算法搜索
    • 启发式搜索

    网格搜索:

    随机搜索:

    遗传算法搜索:

    启发式搜索:


    References

    1. 深度学习与Tensorflow2实战
    2. Google工程师亲授 Tensorflow2.0-入门到进阶

    相关文章

      网友评论

          本文标题:Tensorflow 2.0

          本文链接:https://www.haomeiwen.com/subject/fjfufhtx.html