• 01-TensorFlow2.0基础


    01-TensorFlow基础

    Tensorflow是什么

    Google的开源软件库

    • 采取数据流图,用于数值计算
    • 支持多种平台 - GPU、CPU、 移动设备
    • 最初用于深度学习,变得越来越通用

    Tensorflow数据结构

    #数据流图

    1. 线:节点之间的输入输出关系,线上运输张量. tensor:张量- 指代数据

    2. 节点:operation (op): 专门运算的操作节点,所有的操作都是一个op,处理数据

    • 只要使用tensorflow的API定义的函数都是OP
    • 节点被分配到各种计算设备上运行
    1. graph: 图 整个的程序结构
    • 本质上是一个分配的内存位置,默认有一个图,所有的tensor 和 op 的内存地址都是一样的。
    • 不同的图内存地址不一样,计算的过程中互不干扰
    1. session: 会话: 运算程序的图 (只能运行一张图,可以在会话中指定图去运行 graph = g)
    • 运行图的结构
    • 分配资源计算
    • 掌握资源(变量、队列、线程)

    Tensorflow的特性

    • 高度的灵活性,便于调用函数,也可以写自己的封装
    • 真正的可移植性,在不同的设备上都可以简单运行
    • 产品和科研结合
    • 自动求微分,主要用于反向传播计算
    • 多语言支持,C++, Java , JS, R
    • 性能最优化

    Tensorflow的前后端系统

    1. 前端系统:定义程序的图的机构
    2. 后端系统: 运算图结构

    Tensorflow版本变迁

    Tensorflow1.0 主要特性

    • XLA: Accelerate Linear Algebra
      • 提升训练速度58倍
      • 可以在移动设备上运行
    • 引用更高级别的API
      • tf.layers/ tf.metrics / tf.losses/ tf.keras
    • Tensorflow调试器
    • 支持docker镜像,引入tensorflow serving 服务

    Tensorflow 2.0 主要特性

    • 使用tf.keras 和 eager mode 进行简单模型构建
    • 鲁棒的跨平台模型部署
    • 强大的研究实验
    • 清除了不推荐使用和重复的API

    Tensorflow2.0 简化模型开发流程

    1. 使用tf.data加载数据
    2. 使用tf.keras 构建模型,也可以使用premade estimator 验证模型
      • 使用tensorflow hub进行迁移学习
      • 注: 迁移学习 - 使用一个前人预先训练好的,应用在其他领域的网络作为模型训练的起点,站在前人基础上更进一步,不必重新发明轮子。
    3. 使用eager mode 进行运行和调试
    4. 使用分发策略进行分布式训练
    5. 导出到SavedModel
    6. 使用Tensorflow Serve, Tensorflow Lite, Tensorflow.js

    Tensorflow 强大的跨平台能力

    • Tensorflow 服务
      • 直接通过HTTP/ TEST 或 GTPC/协议缓冲区
    • Tensorflow Lite - Android, iOS 和嵌入式
    • Tensorflow.js - Javascript 部署
    • 其他语言

    Tensorflow vs. Pytorch

    入门时间(易用性)

    • Tensorflow 1.*
      • 静态图 ,构建完之后不可以更改, 效率高
      • 额外概念, 会话,变量,占位符
      • 写样本代码
    • Tensorflow 2.0
      • 动态图, 构建完之后可以更改, 效率不高,调试容易
      • Eager mode 直接集成在python中
    • Pytorch
      • 动态图
      • numpy扩展,集成在python
    """
    不同方式求解 1 + 1/2 + 1/2^2 + 1/2^3 + ...... + 1/2^50
    """
    
    # 1. tensorflow 1.*求解
    import tensorflow as tf
    print(tf.__version__)
    x = tf.Variable(0.)
    y = tf.Variable(1.)
    
    add_op = x.assign(x + y)
    div_op = y.assign(y / 2)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer()) 
        for iteration in range(50):
            sess.run(add_op)
            sess.run(div_op)
        print(x.eval())
    
    
    # 2. pytorch 求解
    import torch
    print(torch.__version__)
    
    x = torch.Tensor([0.])
    y = torch.Tensor([1.])
    for iteration in range(50):
        x = x + y
        y = y / 2
    print(x)
    
    
    # 3. tensorflow 2.0 求解
    import tensorflow as tf
    print(tf.__version__)
    x = tf.constant(0.)
    y = tf.constant(1.)
    for iteration in range(50):
        x = x + y
        y = y / 2
    print(x.numpy())
    
    
    # 4. 纯python求解
    x = 0
    y = 1
    for iteration in range(50):
        x = x + y
        y = y / 2
    print(x)  # 精度有点不一样
    

    图创建和调试

    • Tensorflow 1.*
      • 静态图,难以调试, 需要使用tfdbg
    • Tensorflow 2.0 与 pytorch
      • 动态图,python自带的调试工具

    全面性

    • python缺少少量的功能,使用频次很低
      • 沿维翻转张量 (np.flip, np.flipud, np.fliplr)
      • 检查无穷与非数值张量(np.is_nan, np.is_inf)
      • 快速傅里叶变换 (np.fft)

    序列化和部署

    • Tensorflow 支持更加广泛,多语言,跨平台
    • pytorch 支持比较简单
  • 相关阅读:
    AvalonDock使用体验
    使用vs2015时,拖拉窗口,窗口隐藏后点击显示就会报错,错误代码“已在“VisualTreeChanged”事件期间更改可视化树”。
    es6的常用新特性
    js如何准确获取当前页面url网址信息
    移动端1px细线解决方案总结
    Zepto tap 穿透bug、解决移动端点击穿透问题
    js继承的方式有几种
    js常用的几种模式
    判断对象类型 typeof instanceof Object.prototype.tostring()
    new的实现机制
  • 原文地址:https://www.cnblogs.com/hp-lake/p/12008559.html
Copyright © 2020-2023  润新知