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 支持比較簡單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM