美文网首页
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