01-TensorFlow基礎
Tensorflow是什麼
Google的開源軟件庫前端
- 採起數據流圖,用於數值計算
- 支持多種平臺 - GPU、CPU、 移動設備
- 最初用於深度學習,變得愈來愈通用
Tensorflow數據結構
#數據流圖
線:節點之間的輸入輸出關係,線上運輸張量. tensor:張量- 指代數據python
- 節點:operation (op): 專門運算的操做節點,全部的操做都是一個op,處理數據
- 只要使用tensorflow的API定義的函數都是OP
- 節點被分配到各類計算設備上運行
- graph: 圖 整個的程序結構
- 本質上是一個分配的內存位置,默認有一個圖,全部的tensor 和 op 的內存地址都是同樣的。
- 不一樣的圖內存地址不同,計算的過程當中互不干擾
- session: 會話: 運算程序的圖 (只能運行一張圖,能夠在會話中指定圖去運行 graph = g)
- 運行圖的結構
- 分配資源計算
- 掌握資源(變量、隊列、線程)
Tensorflow的特性
- 高度的靈活性,便於調用函數,也能夠寫本身的封裝
- 真正的可移植性,在不一樣的設備上均可以簡單運行
- 產品和科研結合
- 自動求微分,主要用於反向傳播計算
- 多語言支持,C++, Java , JS, R
- 性能最優化
Tensorflow的先後端系統
- 前端系統:定義程序的圖的機構
- 後端系統: 運算圖結構
Tensorflow版本變遷
Tensorflow1.0 主要特性
- XLA: Accelerate Linear Algebra
- 引用更高級別的API
- tf.layers/ tf.metrics / tf.losses/ tf.keras
- Tensorflow調試器
- 支持docker鏡像,引入tensorflow serving 服務
Tensorflow 2.0 主要特性
- 使用tf.keras 和 eager mode 進行簡單模型構建
- 魯棒的跨平臺模型部署
- 強大的研究實驗
- 清除了不推薦使用和重複的API
Tensorflow2.0 簡化模型開發流程
- 使用tf.data加載數據
- 使用tf.keras 構建模型,也可使用premade estimator 驗證模型
- 使用tensorflow hub進行遷移學習
- 注: 遷移學習 - 使用一個前人預先訓練好的,應用在其餘領域的網絡做爲模型訓練的起點,站在前人基礎上更進一步,沒必要從新發明輪子。
- 使用eager mode 進行運行和調試
- 使用分發策略進行分佈式訓練
- 導出到SavedModel
- 使用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
"""
不一樣方式求解 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.*
- Tensorflow 2.0 與 pytorch
全面性
- python缺乏少許的功能,使用頻次很低
- 沿維翻轉張量 (np.flip, np.flipud, np.fliplr)
- 檢查無窮與非數值張量(np.is_nan, np.is_inf)
- 快速傅里葉變換 (np.fft)
序列化和部署
- Tensorflow 支持更加普遍,多語言,跨平臺
- pytorch 支持比較簡單