TensorFlow 的常用模塊介紹

在使用 TensorFlow 的時候會遇到一個問題,就是不知道要使用的功能在哪個模塊中,比如是在 nn 的模塊或者 contrib 的模塊,所以本文梳理下常用到的四個模塊的功能。

Module: tf.nn

神經網路的功能支持模塊,這是最常用到的一個模塊,用於構建經典的卷積網路,它下面還包含了 rnn_cell 的子模塊,用於構建循環神經網路;挑幾個它下面包含的常用函數看看:

  • avg_pool(...): 平均池化
  • batch_normalization(...): 批標準化
  • bias_add(...): 添加偏置
  • conv2d(...): 2維卷積
  • dropout(...): 隨機丟棄神經網路單元
  • relu(...): relu 激活層
  • sigmoid_cross_entropy_with_logits(...): sigmoid 激活後的交叉熵
  • softmax(...): softmax 激活層

可以看到,基本所有經典神經網路的操作都放在了這個模塊。

Module: tf.contrib

這個模塊最常用到的是它的 slim 子模塊,它的官方的解釋是這樣的:

contrib module containing volatile or experimental code.

也就是說,所有的易於變動的,或者說實驗性質的功能就放在這個模塊裡面;所以它下面是有著及其豐富的功能子模塊的,從中也可一窺 TensorFlow 後續的發展,所以看看它下面包含的全部子模塊:

  • bayesflow 貝葉斯計算
  • cloud 雲操作
  • cluster_resolver 集群求解
  • compiler 控制 Tensorflow/XLA JIT 編譯器
  • copy_graph 在不同的計算圖之間複製元素
  • crf 條件隨機場
  • cudnn_rnn Cudnn 層面的循環神經網路操作
  • data 用於構造輸入數據的流水線
  • decision_trees 決策樹相關模塊
  • deprecated 記錄已經或將被替換的summary函數
  • distributions 各種統計分布相關的操作
  • estimator 自定義標籤與預測的對錯的度量方式
  • factorization 聚類以及因子分解
  • ffmpeg 用 FFmpeg 處理聲音文件
  • framework 框架類工具,包含了變數操作、命名空間、checkpoint 操作
  • gan 對抗生成相關
  • graph_editor 計算圖的操作
  • grid_rnn GridRNN 相關
  • image 圖像操作
  • input_pipeline 輸入流水線
  • integrate 求解常微分方程
  • keras Keras 相關 API
  • kernel_methods 核映射相關方法
  • kfac KFAC 優化器
  • labeled_tensor 有標籤的 Tensor
  • layers 類似 nn 裡面的函數,一些經典 CNN 方法的重構
  • learn 類似 ski-learn 的 高級 API
  • legacy_seq2seq RNN 模型用於序列數據
  • linalg 線性代數相關
  • linear_optimizer 訓練線性模型、線性優化器
  • lookup 構建快速查找表
  • losses loss 相關
  • memory_stats 設備內存使用情況
  • meta_graph_transform 計算圖轉換
  • metrics 各種度量模型表現的方法
  • nccl 一些收集結果的操作
  • ndlstm ndlstm 相關
  • nn tf.nn 某些方法的其他版本
  • opt 某些優化器的其他版本
  • predictor 構建預測器
  • reduce_slice_ops 切片約減
  • remote_fused_graph module: Remote fused graph ops python library.
  • resampler 重抽樣
  • rnn 其他的循環神經網路操作
  • saved_model 更加易用的模型保存、繼續訓練、模型轉換
  • seq2seq 序列解碼以及序列 loss
  • session_bundle
  • signal 信號處理相關
  • slim contrib 主模塊的交互方式,主要入口
  • solvers 貝葉斯計算
  • sparsemax 稀疏概率激活函數及相關 loss
  • specs specs ops.
  • staging 分段輸入
  • stat_summarizer 查看運行狀態
  • stateless 偽隨機數
  • tensor_forest 隨機森林
  • tensorboard 可視化工具
  • testing 單元測試工具
  • tfprof 查看模型細節的工具
  • timeseries 時間序列工具
  • tpu TPU 配置
  • training 訓練及輸入相關工具
  • util Tensors 處理相關工具

可以看到,裡面的東西基本涵蓋了 TensorFlow 所有的功能,但是總體感覺各個功能還是有點混亂。

Module: tf.train

這個模塊主要是用來支持訓練模型的,照樣挑幾個它下面包含的常用類和函數看看:

  • class AdadeltaOptimizer: Adadelta 優化器
  • class AdamOptimizer: Adam 優化器
  • class Coordinator: 線程管理器
  • class Example tfrecord 的生成模板
  • class ExponentialMovingAverage: 指數移動平均
  • class GradientDescentOptimizer: 梯度下降優化器
  • class MomentumOptimizer: 動量優化器
  • class NanTensorHook: loss 是否為 NaN 的捕獲器
  • class QueueRunner: 入隊隊列啟動
  • class RMSPropOptimizer: RMSProp 優化器
  • class Saver: 保存模型和變數類
  • NewCheckpointReader(...)checkpoint 文件讀取
  • batch(...): 生成tensorsbatch
  • create_global_step(...): 創建 global step
  • get_checkpoint_state(...): 從 "checkpoint" 文件返回模型狀態
  • init_from_checkpoint(...): 從 checkpoint 文件初始化變數
  • latest_checkpoint(...): 尋找最後一次的 checkpoint 文件
  • list_variables(...): 返回 checkpoint 文件變數為列表
  • load_variable(...): 返回 checkpoint 文件某個變數的值
  • match_filenames_once(...): 尋找符合規則的文件名稱
  • shuffle_batch(...): 創建隨機的 Tensor batch
  • start_queue_runners(...): 啟動計算圖中所有的隊列

可以看到,主要包含了模型優化器、tfrecord 數據準備、模型保存、模型讀取四個大類的功能。

Module: tf.summary

主要用來配合 tensorboard 展示模型的信息,幾個常用類和函數如下:

  • class FileWriter: Summary文件生成類
  • class Summary Summary 類
  • get_summary_description(...): 獲取計算節點信息
  • histogram(...): 展示變數分布信息
  • image(...): 展示圖片信息
  • merge(...): 合併某個 Summary 信息
  • merge_all(...): 合併所有的各處分散的 Summary 信息到默認的計算圖
  • scalar(...): 展示某個標量的值
  • text(...): 展示文本信息

這個模塊比較簡單,但是使用時有些地方還是要注意,這個以後專門用一篇文章來寫。

常用函數和方法

TensorFlow 還把那些經常使用的 Tensor 操作功能直接放在了 tf 下面,包括了:

Maths、Array、Matrix 相關的操作,也就是例如算術操作、張量(矩陣)操作、數據類型轉換、矩陣的變形、切片、合併、規約、分割、序列比較與索引提取等常用功能。

總體來說,了解了 TensorFlow 這幾個大的常用模塊功能後,再去使用起來才會感到邏輯清晰一點。

歡迎關注,後續會持續的寫一些關於 TensorFlow 的使用經驗的文章,也是因為工作原因接觸到了谷歌的這個代碼框架,想著既然用了,就用的好點,所以才寫這個文章,也不是科班出身,有不正確的地方敬請指出。

參考資料:https://tensorflow.google.cn/api_docs

推薦閱讀:

YOLO2:實時目標檢測視頻教程,視頻演示,Android Demo ,開源教學項目,論文。
當tensorflow模型超過單張顯卡顯存的時候,應該怎麼拆分到多個GPU上運行?
實踐指南!16位資深行業者教你如何學習使用TensorFlow

TAG:TensorFlow | 人工智慧 |