【IT168 評論】TensorFlow的功能
TensorFlow適用於Matlab和C ++的API,有廣泛的語言支持。在前段時間的TensorFlow峰會上,TensorFlow 發布了面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js。
TensorFlow.js 是一個開源的用於開發機器學習項目的 WebGL-accelerated JavaScript 庫。TensorFlow.js 可以為開發者提供高性能的、易於使用的機器學習構建模塊,允許研發人員在瀏覽器上訓練模型,或以推斷模式運行預訓練的模型。TensorFlow.js 不僅可以提供低級的機器學習構建模塊,還可以提供高級的類似 Keras 的 API 來構建神經網絡。
TensorFlow其他應用
研發者還可以在TensorFlow上構建其他機器學習算法,例如決策樹或k-Nearest Neighbors。以下是TensorFlow的生態系統:
TensorFlow生態系統
從上圖可以看出,TensorFlow集成良好,並且支持GPU處理、python和C++語言,研發人員可以將它與docker等容器集成使用。
TensorBoard
TensorBoard是一套可視化工具,研發人員使用TensorFlow寫的神經網絡看上去會顯得非常複雜混亂,為了可以更加直觀的調試、優化神經網絡,谷歌開發了TensorBoard。Tensorboard是tensorflow內置的一個可視化工具,它通過將tensorflow程序輸出的日誌文件的信息可視化,使得tensorflow程序的理解、調試和優化更加簡單高效。Tensorboard的可視化依賴於tensorflow程序運行輸出的日誌文件,因而tensorboard和tensorflow程序在不同的進程中運行。
mnist_tensorboard
TensorFlow在國內的現狀
對於國內的一些初創型AI企業來說,TensorFlow顯得尤為重要,但是從目前現狀來看,絕大多數的創業公司更忠於老牌深度學習框架,比如:Caffe、Keras、Theano。
以Keras為例,一些人工智慧企業選擇它的理由是:Keras句法清晰;API簡單,易用;文檔齊全,並且文檔內容組織地好,從簡單到複雜,一步步的指引;擴展性好;後端支持Tensorflow, theano,mxnet,cntk,而且自定義層比較好寫,並且關鍵一點是Keras 強調極簡主義——研發者只需幾行代碼就能構建一個神經網絡。
對於國外而言,TensorFlow是非常受歡迎的,從Github公開的數據中我們可以看到,光是該工具的fork就已經達到了60389,位於同類型工具的第一位。
然而在TensorFlow的中國社區中,它的影響力卻沒有那麼強大。據了解,目前為止,TensorFlow中國的fork數僅有3315,僅為官方原版TensorFlow社區的5%。
TensorFlow最新發布
2018年3月,谷歌發布了Tensorflow 1.7.0版本,相比原版有不少的重大更新。該版本的TensorFlow和英偉達Tensor RT進行了集成,達成對GPU硬體計算環境的高度優化。在測試中,集成版本的TensorFlow比原版(在7毫秒延遲環境下)執行速度快了8倍。
近日,TensorFlow 發表推文正式發布 TensorFlow v1.9。谷歌大腦研究員、Keras作者François Chollet對於這一版本評價甚高,他說:「不管是不是TF用戶都應該看一看:TF最近進步巨大。這是通往ML未來的一大步。」對於TensorFlow新版的發布,各大廠商、企業、研發人員又一次擦亮眼睛,期待著新版本TensorFlow的功能改進。
那麼,這次更新究竟都涉及什麼功能呢?
首先是對Keras的支持。Keras是一個深度學習的高級API,把創建和訓練模型所需的工作整合成了很多模塊,TensorFlow是它的一個後端。在TensorFlow中,它叫tf.keras。
據了解,TensorFlow的新手指南變了樣,帶領小白們從Keras入手,還附上了一個詳細的Keras Guide。
同時,TensorFlow裡的Keras本身也有提升。tf.keras升級到了Keras 2.1.6 API,新增了tf.keras.layers.CuDNNGRU和tf.keras.layers.CuDNNLSTM,分別用於更快的GRU實現和更快的LSTM實現。
主要特點和改進
更新文檔tf.keras:基於新Keras的入門和程式設計師指南頁面。
為Keras 2.1.6 API更新tf.keras。
添加tf.keras.layers.CuDNNGRU和tf.keras.layers.CuDNNLSTM層。
將核心功能列的支持和損失添加到梯度boosted tree估計器中。
Python接口用於TFLite優化轉換器已擴展,命令行界面(toco,tflite_convert)再次包括在標準pip安裝。
突破性變化
空變量範圍,用variable_scope(tf.get_variable_scope(), …)替換variable_scope(」, …)。
用於構建自定義操作的標頭從site-packages / external移至site-packages / tensorflow / include / external。
錯誤修復
tfe.Network已棄用,使用tf.keras.Model。
其他更改
添加GCS配置操作。
更改籤名MakeIterator以啟用傳播錯誤狀態。
兩個Dirichlet分布的KL分歧。
對於超過EOF的某些讀取,GcsFileSystem行為更一致。
更新tf.scan的基準以匹配eager和graph模式的範圍。
為複雜dtypes修復tf.reduce_prod gradient了錯誤。
在變量中允許使用』.』(例如「hparams.parse(』ab = 1.0』)」),之前這會導致錯誤。這將對應於具有嵌入式』.』的屬性名稱。符號(例如』a.b』),只能間接訪問(例如通過getattr和setattr)。要設置它,用戶首先需要將變量顯式添加到hparam對象(例如「hparams.add_hparam(name =』a.b』,value = 0.0)」)。
graph和eager模式下tf.scan的基準。
增加了對FFT,FFT2D,FFT3D,IFFT,IFFT2D和IFFT3D的complex128支持。
使ids獨特nn.embedding_lookup_sparse,當批處理中存在重複的ID時,這有助於減少用於查找嵌入的RPC調用。
在boosted tree中支持指標列。
防止tf.gradients()通過整數張量反向傳播。
將LinearOperator [1D,2D,3D] Circulant添加到tensorflow.linalg。
Conv3D,Conv3DBackpropInput,Conv3DBackpropFilter現在可提供任意支持。
添加tf.train.Checkpoint用於讀寫基於對象的檢查點。
添加了LinearOperatorKronecker,無密集實現克羅內克積。
允許LinearOperator進行廣播。
SavedModelBuilder現在將重複刪除指向具有相同基本名稱和相同內容的文件的資源名稱。請注意,如果之前具有相同名稱但內容不同的資源相互覆蓋,則可能會導致新資源文件包含在SavedModels中。
結論
無論怎樣,我們都不得不承認TensorFlow是一個很棒的系統,人們用人工智慧做了很多令人驚嘆的事情,包括一些醫療保健、電影推薦引擎、音樂、個性化廣告以及社交媒體情感挖掘等,TensorFlow確實是實現這些目標的頭等功臣!