【他山之石】愛不釋手的TensorFlow 小技巧及張量詮釋

2022-01-12 人工智慧前沿講習

收錄於話題 #他山之石 178個

「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。在科研的道路上,更需藉助東風才能更快前行。為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。

本文分享自華為雲社區《【雲駐共創】愛不釋手的TensorFlow 小技巧及張量詮釋》,原文作者:小強鼓掌

地址:https://bbs.huaweicloud.com/blogs/302552

TensorFlow 是一個端到端開源機器學習平臺。它擁有一個全面而靈活的生態系統,其中包含各種工具、庫和社區資源,可助力研究人員推動先進機器學習技術的發展,並使開發者能夠輕鬆地構建和部署由機器學習提供支持的應用。它可以很好的支持深度學習的各種算法,可以支持多種計算平臺,系統穩定性較高。TensorFlow擁有多層級結構,可部署於各類伺服器、PC終端和網頁並支持GPU高性能數值計算。

01

TensorFlow是谷歌開源的第二代用於數字計算的軟體庫。TensorFlow 是一個端到端平臺,無論您是專家還是初學者,它都可以讓您輕鬆地構建和部署機器學習模型。它可以很好的支持深度學習的各種算法,但它的應用不局限於深度學習,可以支持多種計算平臺,系統穩定性較高。TensorFlow擁有多層級結構,可部署於各類伺服器、PC終端和網頁並支持GPU和TPU高性能數值計算,被廣泛應用於谷歌內部的產品開發和各領域的科學研究。靈活可擴展:TensorFlow在不同計算機上運行:小到智慧型手機,大到計算機集群都能擴展,可以立刻生成你的訓練模型。GPU:雖然TensorFlow在大型計算機集群的並行處理中,運行性能略低於CNTK,但是在個人機器使用場景中,會根據機器配置自動選擇CPU或GPU,更加友好與智能。多平臺:TensorFlow生成的模型,可以滿足更多使用者的需求。適用於Mac,Linux,Windows系統上開發。滿足開箱即用的模型使用概念。運算能力強:利用了DAG圖創建工作流圖,優化了計算過程。分布式:目前原生支持的分布式深度學習框架不多,只有 TensorFlow、CNTK、DeepLearning4J、MXNet 等。在單 GPU 的條件下,絕大多數深度學習框架都依賴於 cuDNN,因此只要硬體計算能力或者內存分配差異不大,最終訓練速度不會相差太大。但是對於大規模深度學習來說,巨大的數據量使得單機很難在有限的時間完成訓練。而TensorFlow支持分布式訓練。TensorFlow是由Tensor+Flow組成,Tensor即為張量,Flow為流動,名字的含義就是張量在流動。

02

tensorflow的數據讀入有三種方式:通過feeding的方式;通過管道(pipeline)的方式;直接讀取變量或常量中保存的數據。Datasets屬於上面提出的第二種方式,可以簡化數據輸入過程,而且能夠提高數據的讀入效率。TextLineDataset:從文本文件中讀取行;TFRecordDataset:讀取TFRecord文件;FixedLengthRecordDataset:從二進位文件讀取固定大小的記錄;Iterator:提供一種一次訪問一個數據集元素的方法。對於Datasets的使用,我們可以使用Dataset的子類提供的方法,也可以直接使用基類的方法:tf.data.Dataset.from_tensors()或者tf.data.Dataset.from_tensor_slices()。Feature Columns實際上是一個數據結構,一個用於描述特徵的數據結構。利用Feature Columns可以很方便的對輸入訓練模型前的特徵進行處理。比如鳶尾花的識別,對於輸入數據,每列表示不同的特徵,如花瓣的長度,花萼的長度等等,我們想要對不同的列分別進行處理(或者對所有的列進行處理),使用Feature Columns就可以輕鬆的實現。Feature Columns形成了對輸入數據集的結構性描述。可以方便我們對每列數據進行處理,而且使得代碼的可讀性更強。想必大家對Keras已經比較了解了,使用Keras來構建一個神經網絡,簡直是飛一般地速度,而且完美的兼容tensorflow。simple_model=Sequential()simple_model.add(Dense(3,input_shape=(x.shape[1],),activation='relu',name='layer1'))simple_model.add(Dense(5,activation='relu',name='layer2'))simple_model.add(Dense(1,activation='sigmoid',name='layer3'))構建一個模型就是如上面這麼簡單,而且調用API中定義好的模型更是只需要一句話,極其的方便。相比於tensorflow原版的tf.train.Saver保存模型的方式,SavedModel提供了更好的將模型部署到生成環境的手段,更適用於商業目的。如上圖右下方部分,在使用SavedModel打包模型時,可以產生兩種模型:對應於第一種模型,Tensorflow Model Analysis可以方便我們對模型進行分析,是不是存在參數的問題,抑或是模型哪裡設計的不合適等等;通過分析後,感覺模型不錯,我們就可以通過Tensorflow Serving進行部署。此外,相比於Saver的方式,我們在inference時不需要再重新定義Graph(模型),如果使用Saver的話,在使用該模型時就需要再定義該模型,如果是一個程序猿設計並使用的還好,如果換成另一個猿去用這個模型,他又不知道模型的tensor的情況,那就尷尬了。所以使用SavedModel可以讓我們更輕鬆地去使用模型。使用Eager有什麼好處呢?回想之前我們在調試tensorflow的程序時,不得不使用sess.run(),麻煩的要死,而使用Eager就可以直接的將變量列印出來,大大方便了我們的調試;好處不止這麼多,在進行模型搭建的時候,以前我們需要仔細考慮下Tensor的shape,一旦出錯要定位也很不容易。而使用Eager可以一邊搭建網絡結構,一邊將shape列印出來確認下是否正確。這就使我們在搭建網絡時更加方面快捷了;此外,使用Eager後,自定義Operation和Gradient也會方便很多。下面舉個簡單的小例子。首先使用pip install tf-nightly(或GPU版本pip install tf-nightly-gpu)來安裝Eager。import tensorflow as tfimport tensorflow.contrib.eager as tfetfe.enable_eager_execution() #開啟Eager模式a = tf.constant([5], dtype=tf.int32)for i in range(a): print (i)

03

張量是TensorFlow的核心數據單位,在本質上是一個任意維的數組。張量可理解為一個 n 維矩陣,所有類型的數據,包括標量、矢量和矩陣等都是特殊類型的張量。3.2 TensorFlow 支持以下三種類型的張量:1. 常量constant:常量是其值不能改變的張量。2. 變量variable:當一個量在會話中的值需要更新時,使用變量來表示。例如,在神經網絡中,權重需要在訓練期間更新,可以通過將權重聲明為變量來實現。變量在使用前需要被顯示初始化。另外需要注意的是,常量存儲在計算圖的定義中,每次加載圖時都會加載相關變量。換句話說,它們是佔用內存的。另一方面,變量又是分開存儲的。它們可以存儲在參數伺服器上。3. 佔位符placeholder:用於將值輸入 TensorFlow 圖中。它們可以和 feed_dict 一起使用來輸入數據。在訓練神經網絡時,它們通常用於提供新的訓練樣本。在會話中運行計算圖時,可以為佔位符賦值。這樣在構建一個計算圖時不需要真正地輸入數據。需要注意的是,佔位符不包含任何數據,因此不需要初始化它們。階:在TensorFlow系統中,張量的維數來被描述為階.但是張量的階和矩陣的階並不是同一個概念.張量的階(有時是關於如順序或度數或者是n維)是張量維數的一個數量描述.比如,下面的張量(使用Python中list定義的)就是2階。t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]你可以認為一個二階張量就是我們平常所說的矩陣,一階張量可以認為是一個向量.對於一個二階張量你可以用語句t[i, j]來訪問其中的任何元素.而對於三階張量你可以用t[i, j, k]來訪問其中的任何元素。

形狀:TensorFlow文檔中使用了三種記號來方便地描述張量的維度:階,形狀以及維數.下表展示了他們之間的關係:

形狀可以通過Python中的整數列表或元祖(int list或tuples)來表示,也或者用TensorShape class。數據類型:除了維度,Tensors有一個數據類型屬性.你可以為一個張量指定下列數據類型中的任意一個類型:

04

TensorFlow用張量這種數據結構來表示所有的數據。你可以把一個張量想像成一個n維的數組或列表。一個張量有一個靜態類型和動態類型的維數,張量可以在圖中的節點之間流通。就形成了TensorFlow 。TensorFlow易於理解,它的API保持著高度的一致性,這意味著在嘗試不同模型時,無需從頭學習一套新的東西。TensorFlow API很穩定,維護者始終在努力確保每次改動都向下兼容。TensorFlow與NumPy無縫集成,可使大多數了解Python的數據科學家如魚得水。不同於其他庫,TensorFlow不佔編譯時間。這就使用戶可快速驗證自己的想法,而省去了專門的等待時間。本文整理自華為雲社區內容共創活動之有哪些 TensorFlow 小技巧?什麼是張量 (tensor)?

本文目的在於學術交流,並不代表本公眾號贊同其觀點或對其內容真實性負責,版權歸原作者所有,如有侵權請告知刪除。

更多他山之石專欄文章,請點擊文章底部「閱讀原文」查看

分享、點讚、在看,給個三連擊唄!

相關焦點

  • 深度學習 | 實戰:TensorFlow教程
    為此,我們將構建一個tensorflow模型,該模型與我們先前在numpy中為貓識別構建的tensorflow模型幾乎相同(但現在使用softmax輸出)。這是將numpy實現的模型與tensorflow進行比較的好機會。
  • TensorFlow 2.0 部署:TensorFlow Serving
    使用以下命令即可:tensorflow_model_server \ --rest_api_port=埠號(如8501) \ --model_name=模型名 \ --model_base_path="SavedModel格式模型的文件夾絕對地址(不含版本號)"註解TensorFlow
  • TensorFlow調試程序介紹
    要了解出現這種情況的原因,請注意對標準 Python 調試程序而言,Session.run() 調用實際上是單個語句,它並不會公開運行中圖表的內部結構(節點及其連接)和狀態(節點的輸出數組 或 張量)。gdb 等較低級別的調試程序在組織堆疊框架和變量值時無法令其與 TensorFlow 圖表操作產生關聯。專業級運行時調試程序是 TensorFlow 用戶最常提出的功能請求之一。
  • Windows系統如何安裝Tensorflow Object Detection API
    節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯繫的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),伺服器,行動裝置等等。
  • 所有的Tensorflow模型都可以嵌入到行動裝置
    你可以直接克隆 tensorflow template application 的原始碼並且針對你自己的機器學習腳本調整模型文件。更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front) 如果我們要將 TensorFlow 模型嵌入行動裝置,首先需要確定模型的格式。
  • 深度學習框架(TensorFlow、keras、PyTorch)
    一、TensorFlow(參見中文文檔)TensorFlow其命名基於工作原理,tensor 意為張量(即多維數組),flow 意為流動。
  • TensorFlow 2.0 常用模塊3:tf.data
    具體而言,如果我們的數據集中的所有元素通過張量的第 0 維,拼接成一個大的張量(例如,前節的 MNIST 數據集的訓練集即為一個 [60000, 28, 28, 1] 的張量,表示了 60000 張 28*28 的單通道灰度圖像),那麼我們提供一個這樣的張量或者第 0 維大小相同的多個張量作為輸入,即可按張量的第 0 維展開來構建數據集,數據集的元素數量為張量第 0 位的大小。
  • 我的 TensorFlow 2.0 初體驗
    重磅乾貨,第一時間送達本文轉載自小小挖掘機(id:wAIsjwj)群裡的小夥伴們都說TF2.0挺不錯的,方便了很多,
  • Keras的標準化:TensorFlow 2.0中的高級api指南
    例如,如果在Colab筆記本中運行: pip install tensorflow  import tensorflow as tf  Dense = tf.keras.layers.Dense當使用函數API構建模型時,層是可調用的(在一個張量上),並返回一個張量作為輸出。這些輸入張量和輸出張量可以用來定義一個模型。
  • 步履不停:TensorFlow 2.4 新功能一覽!
    參數伺服器訓練教程https://tensorflow.google.cn/tutorials/distribute/parameter_server_trainingClusterCoordinatorhttps://tensorflow.google.cn/api_docs/python/tf/distribute/experimental/coordinator
  • 詳解Tensorflow模型量化(Quantization)原理及其實現方法
    因此,為了解決此類問題模型量化應運而生,本篇我們將探討模型量化的概念原理、優缺點及tensorflow模型量化的實現方法。五、tensorflow訓練後量化(Post-training quantization)介紹及其實現方法tensorflow訓練後量化是針對已訓練好的模型來說的,針對大部分我們已訓練未做任何處理的模型來說均可用此方法進行模型量化,而tensorflow提供了一整套完整的模型量化工具,如TensorFlow
  • 【TensorFlow實戰筆記】 遷移學習實戰--卷積神經網絡CNN-Inception-v3模型
    /models/inception_dec_2015.zip3.flower_photos: http://download.tensorflow.org/example_images/flower_photos.tgz模型和數據集介紹1.模型的運用為tf的持久化,通過模型得到數據輸入所對應的張量
  • 教程 | TensorFlow 官方解讀:如何在多系統和網絡拓撲中構建高性能模型
    不同之處在於 StagingArea 提供了更簡單的功能且可在 CPU 和 GPU 中與其他階段並行執行。將輸入管道拆分為 3 個獨立並行操作的階段,並且這是可擴展的,充分利用大型的多核環境。本節的餘下部分將詳細介紹每個階段以及 data_flow_ops.StagingArea 的使用細節。
  • TensorFlow 篇 | TensorFlow 數據輸入格式之 TFRecord
    示例代碼如下所示:import tensorflow as tfimport numpy as npdef _bytes_feature(value): """Returns a bytes_list from a string / byte."""
  • 一個模型庫學習所有:谷歌開源模塊化深度學習系統Tensor2Tensor
    連結:https://github.com/tensorflow/tensor2tensor深度學習(DL)在很多技術領域中都已獲得廣泛應用,包括機器翻譯、語音識別和物體識別等。在研究社區中,人們可以找到各類研究作者開源的代碼,複製他們的結果,進一步發展深度學習。
  • TensorFlow Lite發布重大更新!支持移動GPU、推斷速度提升4-6倍
    在Pixel 3的人像模式(Portrait mode)中,與使用CPU相比,使用GPU的Tensorflow Lite,用於摳圖/背景虛化的前景-背景分隔模型加速了4倍以上。新深度估計(depth estimation)模型加速了10倍以上。
  • TensorFlow 2.0 模型:模型類的建立
    1class MyModel(tf.keras.Model): 2    def __init__(self): 3        super().這個類在初始化部分實例化了一個 全連接層 (tf.keras.layers.Dense ),並在 call 方法中對這個層進行調用,實現了線性變換的計算。
  • 谷歌開源最大手動注釋視頻數據集和 TensorFlow 模型性能調優工具
    【進入新智元公眾號,在對話框輸入「170207」下載論文】谷歌今天還開源了 TensorFlow 模型性能調優工具 tfprof,使用 tfprof 可以查看模型的參數量和張量形狀(tensor shape),了解運算的運行時間、內存大小和設備位置。
  • TensorFlow 安裝手冊 — 使用 pip 安裝 TensorFlow
    Python 2.7 GPU supporthttps://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.11.0-cp27-none-linux_x86_64.whlPython 3.4 CPU-onlyhttps://storage.googleapis.com/tensorflow
  • TensorFlow Lite 深度解析 | 中文教學視頻
    另外,視頻中提到的 TensorFlow Lite 的代碼位置:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite模型的模式文件位於:https://github.com/tensorflow