01-TensorFlow2.0基礎

01-TensorFlow基礎

Tensorflow是什麼

Google的開源軟件庫前端

  • 採起數據流圖,用於數值計算
  • 支持多種平臺 - GPU、CPU、 移動設備
  • 最初用於深度學習,變得愈來愈通用

Tensorflow數據結構

#數據流圖

  1. 線:節點之間的輸入輸出關係,線上運輸張量. tensor:張量- 指代數據python

  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 支持比較簡單
相關文章
相關標籤/搜索