必威电竞|足球世界杯竞猜平台

tensorflow
來源:互聯網

TensorFlow(張量流),是谷歌基于DistBelief研發的第二代人工智能學習系統,用于感知和語言理解任務的機器學習。TensorFlow的名字來源于其運行原理,意味著基于數據流圖的計算。張量意味著N維數組,Flow意味著基于數據流圖的計算。TensorFlow將復雜的數據結構傳輸至人工智能神經網絡中進行分析和處理過程的系統。 TensorFlow最初由谷歌大腦團隊開發,主要用于谷歌的研究和生產。2015年11月9日,TensorFlow在apache 2.0開源許可證下首次發布。2019年9月,谷歌發布了TensorFlow 2.0版本,對DistBelief進行了改進。 TensorFlow可用于多種編程語言,如PythonECMAScriptC++和Java等,具有廣泛的應用領域,包括語音識別、圖像識別等機器學習和深度學習領域。

支持算法

TensorFlow 表達了高層次的機器學習計算,大幅簡化了第一代系統,并且具備更好的靈活性和可延展性。TensorFlow一大亮點是支持異構設備分布式計算,它能夠在各個平臺上自動運行模型,從手機、單個CPU / GPU到成百上千GPU卡組成的分布式系統。

從目前的文檔看,TensorFlow支持CNN、RNN和LSTM算法,這都是目前在Image,Speech和失明最流行的深度神經網絡模型。

開源意義

這一次的谷歌開源深度學習系統TensorFlow在很多地方可以應用,如語音識別,自然語言理解,計算機視覺,廣告等等。但是,基于以上論點,我們也不能過分夸大TensorFlow這種通用深度學習框架在一個工業界機器學習系統里的作用。在一個完整的工業界語音識別系統里,除了深度學習算法外,還有很多工作是專業領域相關的算法,以及海量數據收集和工程系統架構的搭建。

不過總的來說,這次谷歌的開源很有意義,尤其是對于中國的很多創業公司來說,他們大都沒有能力理解并開發一個與國際同步的深度學習系統,所以TensorFlow會大大降低深度學習在各個行業中的應用難度。

中文文檔

官方文檔中文版通過協同翻譯,現已上線,國內的愛好者可以通過GitHub協作的方式查看并完善此中文版文檔。

研發背景

谷歌大腦自2011年成立起開展了面向科學研究和谷歌產品開發的大規模深度學習應用研究,其早期工作即是TensorFlow的前身DistBelief??。DistBelief的功能是構建各尺度下的神經網絡分布式學習和交互系統,也被稱為“第一代機器學習系統”??。DistBelief在谷歌和字母控股旗下其它公司的產品開發中被改進和廣泛使用。2015年11月,在DistBelief的基礎上,谷歌大腦完成了對“第二代機器學習系統”TensorFlow的開發并對代碼開源。相比于前作,TensorFlow在性能上有顯著改進、構架靈活性和可移植性也得到增強。此后TensorFlow快速發展,截至穩定API版本1.12,已擁有包含各類開發和研究項目的完整生態系統。在2018年4月的TensorFlow開發者峰會中,有21個TensorFlow有關主題得到展示。

系統安裝

語言與系統

TensorFlow支持多種客戶端語言下的安裝和運行。截至版本1.12.0,綁定完成并支持版本兼容運行的語言為C和Python,其它(試驗性)綁定完成的語言為ECMAScriptC++、Java、Go和Swift,依然處于開發階段的包括C#Haskell、Julia、RubyRustScala??。

Python

TensorFlow提供Python語言下的四個不同版本:CPU版本(tensorflow)、包含GPU加速的版本(tensorflow-gpu),以及它們的每日編譯版本(tf-nightly、tf-nightly-gpu)。TensorFlow的Python版本支持Ubuntu?16.04、Windows 7、macOS?10.12.6 Sierra、Raspbian 9.0及對應的更高版本,其中macOS版不包含GPU加速。安裝Python版TensorFlow可以使用模塊管理工具pip/pip3??或anaconda并在終端直接運行。

此外Python版TensorFlow也可以使用Docker安裝:

C

TensorFlow提供c語言下的API用于構建其它語言的API,支持x86-64下的Linux類系統和Mac OS 10.12.6 Sierra或其更高版本,macOS版不包含GPU加速。安裝過程如下:

下載TensorFlow預編譯的C文件到本地系統路徑(通常為/usr/local/lib)并解壓縮。

使用ldconfig編譯鏈接

此外用戶也可在其它路徑解壓文件并手動編譯鏈接。

編譯C接口時需確保本地的C編譯器(例如GCC)能夠訪問TensorFlow庫。

配置GPU

TensorFlow支持在Linux和Window系統下使用統一計算架構(Compute Unified Device 建筑,?CUDA)高于3.5的英偉達?GPU??。配置GPU時要求系統有NVIDIA GPU驅動384.x及以上版本、CUDA Toolkit和CUPTI(CUDA Profiling Tools 接口)9.0版本、cuDNN SDK7.2以上版本。可選配置包括NCCL 2.2用于多GPU支持、TensorRT 4.0用于TensorFlow模型優化。

Linux下配置GPU時,將CUDA Toolkit和CUPTI的路徑加入$LD_LIBRARY_PATH環境變量即可。對于CUDA為3.0或其它版本的英偉達程序,需要從源文件編譯TensorFlow??。對Windows下的GPU配置,需要將CUDA、CUPTI和cuDNN的安裝路徑加入%PATH%環境變量,在DOS終端有如下操作:

Linux系統下使用Docker安裝的Python版TensorFlow也可配置GPU加速且無需CUDA Toolkit??:

版本兼容性

TensorFlow的公共API版本號使用語義化版本2.0標準,包括主版本號.次版本號.修訂號,其中主版本號的更改不是向下兼容的,已保存的TensorFlow工作可能需遷移到新的版本;次版本號的更改包含向下兼容的性能提升;修訂號的更改是向下兼容的問題修正。

TensorFlow支持版本兼容的部分包括協議緩沖區文件、所有的C接口、Python接口中的tensorflow模塊以及除tf.contrib和其它私有函數外的所有子模塊、Python函數和類。更新不支持版本兼容的部分為:包含“試驗性(experimental)”字段的組件、使用除C和Python外其它語言開發的TensorFlow API、以GraphDef形式保存的工作、浮點數值特定位的計算精度、隨機數、錯誤和錯誤消息。其中GraphDef擁有與TensorFlow相獨立的版本號,當TensorFlow的更新放棄對某一GraphDef版本的支持后,可能有相關工具幫助用戶將GraphDef轉化為受支持的版本。需要指出,盡管 GraphDef的版本機制與TensorFlow相獨立,但對GraphDef的更改仍受限于語義版本控制,即只能在TensorFlow主版本號之間移除或更改功能。此外,修訂版本之間實施GraphDef的向前兼容。

組件工作原理

核心組件

分布式TensorFlow的核心組件(core runtime)包括:分發中心(distributed master)、執行器(數據flow executor/worker service)、內核應用(kernel implementation)和最底端的設備層(device layer)/網絡層(networking layer)??。

分發中心從輸入的數據流圖中剪取子圖(subgraph),將其劃分為操作片段并啟動執行器。分發中心處理數據流圖時會進行預設定的操作優化,包括公共子表達式消去(common subexpression elimination)、常量折疊(constant folding)等。

執行器負責圖操作(graph operation)在進程和設備中的運行、收發其它執行器的結果。分布式TensorFlow擁有參數器(parameter server)以匯總和更新其它執行器返回的模型參數。執行器在調度本地設備時會選擇進行并行計算和GPU加速。

內核應用負責單一的圖操作,包括數學計算、數組操作(array manipulation)、控制流(control flow)和狀態管理操作(state management operations)。內核應用使用Eigen執行張量的并行計算、cuDNN庫等執行GPU加速、gemmlowp執行低數值精度計算,此外用戶可以在內核應用中注冊注冊額外的內核(fused kernels)以提升基礎操作,例如激勵函數和其梯度計算的運行效率。

單進程版本的TensorFlow沒有分發中心和執行器,而是使用特殊的會話應用(Session implementation)聯系本地設備。TensorFlow的c語言API是核心組件和用戶代碼的分界,其它組件/API均通過C語言API與核心組件進行交互。

低階API

張量(tf.Tensor)

張量是TensorFlow的核心數據單位,在本質上是一個任意維的數組。可用的張量類型包括常數、變量、張量占位符和稀疏張量。這里提供一個對各類張量進行定義的例子:

張量的秩是它的維數,而它的形狀是一個整數元組,指定了數組中每個維度的長度。張量按numpy數組的方式進行切片和重構。這里提供一個進行張量操作的例子:

張量有23種數據類型,包括4類浮點實數、2類浮點復數、13類整數、邏輯、字符串和兩個特殊類型,數據類型之間可以互相轉換。TensorFlow中的張量是數據流圖中的單位,可以不具有值,但在圖構建完畢后可以獲取其中任意張量的值,該過程被稱為“評估(evaluate)??”:

TensorFlow無法直接評估在函數內部或控制流結構內部定義的張量。如果張量取決于隊列中的值,那么只有在某個項加入隊列后才能評估。

變量(tf.Variable)

變量是可以通過操作改變取值的特殊張量。變量必須先初始化后才可使用,低階API中定義的變量必須明確初始化,高階API例如Keras會自動對變量進行初始化。TensorFlow可以在tf.Session開始時一次性初始化所有變量,對自行初始化變量,在tf.Variable上運行的tf.get_variable可以在定義變量的同時指定初始化器。這里提供兩個變量初始化的例子:

Tensorflow提供變量集合以儲存不同類型的變量,默認的變量集合包括:

用戶也可以自行定義變量集合:

在對變量進行共享時,可以直接引用tf.Variables,也可以使用 tf.variable_scope??進行封裝:

數據流圖(tf.Graph)和會話(tf.Session)

TensorFlow在數據流編程下運行,具體地,使用數據流圖(tf.Graph)表示計算指令間的依賴關系,隨后依據圖創建會話(tf.Session)并運行圖的各個部分。tf.Graph包含了圖結構與圖集合兩類相關信息,其中圖結構包含圖的節點(tf.Operation)和邊緣(張量)對象,表示各個操作組合在一起的方式,但不規定它們的使用方式,類似于匯編代碼;圖集合是在tf.Graph中存儲元數據集合的通用機制,即對象列表與鍵(tf.GraphKeys)的關聯。例如當用戶創建變量時,系統將其加入變量集合,并在后續操作中使用變量集合作為默認參數。

構建tf.Graph時將節點和邊緣對象加入圖中不會觸發計算,圖構建完成后將計算部分分流給tf.Session實現計算。tf.Session擁有物理資源,通常與Python的with代碼塊中使用,在離開代碼塊后釋放資源。在不使用with代碼塊的情況下創建tf.Session,應在完成會話時明確調用tf.Session.close結束進程。調用Session.run創建的中間張量會在調用結束時或結束之前釋放。tf.Session.run是運行節點對象和評估張量的主要方式,tf.Session.run需要指定fetch并提供供給數據(feed)字典,用戶也可以指定其它選項以監督會話的運行。這里使用低階API以批量梯度下降的線性回歸為例展示tf.Graph的構建和tf.Session的運行:

保存和恢復

TensorFlow的低階API可以保存模型和學習得到的變量,對其進行恢復后可以無需初始化直接使用。對張量的保存和恢復使用tf.train.Saver??。里提供一個應用于變量的例子:

使用檢查點工具tf.Pythontools.inspect_checkpoint可以查看文件中保存的張量,這里提供一個例子:

TensorFlow保存的模型使用SavedModel文件包,該文件包含是一種獨立于語言(language-neutral)且可恢復的序列化格式,使較高級別的系統和工具可以創建、使用和轉換 TensorFlow模型為SavedModel??。tf.saved_model API可以直接與SavedModel進行交互,tf.saved_model.simple_save用于保存模型,tf.saved_model.loader.load用于導入模型。其一般用法如下:

上述保存方法適用于大部分圖和會話,但具體地,用戶也可使用構建器(builder API)手動構建SavedModel。

高階API

Estimators

Estimators是TensorFlow自帶的高階神經網絡API??。Estimators封裝了神經網絡的訓練、評估、預測、導出等操作。Estimators的特點是具有完整的可移植性,即同一個模型可以在各類終端、服務中運行并使用GPU或TPU加速而無需重新編碼。Estimators模型提供分布式訓練循環,包括構建圖、初始化變量、加載數據、處理異常、創建檢查點(checkpoint)并從故障中恢復、保存TensorBoard的摘要等。Estimators包含了預創建模型,其工作流程如下:

這里提供一個使用Estimator預創建的深度神經網絡分類器對MNIST數據進行學習的例子:

Estimator提供“層函數(tf.layer)??”和其它有關工具以支持用戶自定義新模型,這些工具也被視為“中層API”。由于自定義完整模型過程繁瑣,因此可首先使用預構建模型并完成一次訓練循環,在分析結果之后嘗試自定義模型。這里提供一個自定義神經網絡分類器的例子:

Estimators的模型參數無需另外保存,在使用模型時提供檢查點的路徑即可調出上次學習獲得的參數重新初始化模型。Estimators也支持用戶自定義檢查點規則。這里提供一個例子:

除使用檢查點作為對模型進行自動保存的工具外,用戶也可使用低階API將模型保存至SavedModel文件。

Keras

Keras是一個支持TensorFlow、Thenao和微軟CNTK的第三方高階神經網絡API??。Keras以TensorFlow的Python API為基礎提供了神經網絡、尤其是深度網絡的構筑模塊,并將神經網絡開發、訓練、測試的各項操作進行封裝以提升可擴展性和簡化使用難度。在TensorFlow下可以直接導出Keras模塊使用。這里提供一個使用tensorflow.keras構建深度神經網絡分類器對MNIST數據進行學習的例子:

Keras可以將模型導入Estimators以利用其完善的分布式訓練循環,對上述例子,導入方式如下:

使用tensorflow.keras可以運行所有兼容Keras的代碼而不損失速度,但在Python的模塊管理工具中,tensorflow.keras的最新版本可能落后于Keras的官方版本。tensorflow.keras使用HDF5文件保存神經網絡的權重系數。

Eager Execution

Eager Execution是基于TensorFlow Python API的命令式編程環境,幫助用戶跳過數據流編程的圖操作,直接獲取結果,便于TensorFlow的入門學習和模型調試,在機器學習應用中可以用于快速迭代小模型和小型數據集。Eager Execution環境只能在程序的開始,即導入tensorflow模塊時啟用??:

Eager Execution使用Python控制流,支持標準的Python調試工具,狀態對象的生命周期也由其對應的Python對象的生命周期,而不是tf.Session決定。Eager Execution支持大多數TensorFlow操作和GPU加速,但可能會使某些操作的開銷增加。

Data

tf.數據是TensorFlow中進行數據管理的高階API??。在圖像處理問題中,tf.data可以對輸入圖像進行組合或疊加隨機擾動,增大神經網絡的訓練收益;在文字處理問題中,tf.data負責字符提取和嵌入(embedding),后者將文字轉化為高維向量,是進行機器學習的重要步驟。tf.data包含兩個類:tf.data.Dataset和tf.data.Iterator,Dataset自身是一系列由張量構成的組元,并包含緩存(cache)、交錯讀取(interleave)、預讀取(prefetch)、洗牌(shuffle)、投影(map)、重復(repeat)等數據預處理方法、Iterator類似于Python的循環器,是從Dataset中提取組元的有效方式。tf.數據支持從numpy數組和TFRecord中導入數據,在字符數據處理時時,tf.data.TextLineDataset可以直接輸入ASCII編碼文件。

tf.data可用于構建和優化大規機器學習的輸入管道(input pipline),提升TensorFlow性能。一個典型的輸入管道包含三個部分:

在本地的同步操作下,當GPU/TPU進行算法迭代時,CPU處于閑置狀態,而當CPU分發數據時,GPU/熱塑性聚氨酯處于閑置狀態。tf.數據.Dataset.prefetch在轉化和加載數據時提供了預讀取技術,可以實現輸入管道下算法迭代和數據分發同時進行,在當前學習迭代完成時能更快地提供下一個迭代的輸入數據。tf.data.Dataset.prefetch的buffer_size參數通常為預讀取值的個數。

tf.data支持輸入管道的并行,tf.contrib.data.parallel_interleave可以并行提取數據;映射函數tf.數據Dataset.map能夠并行處理用戶的指定操作。對于跨CPU并行,用戶可以通過num_parallel_calls接口指定并行操作的等級。一般而言,并行等級與設備的CPU核心數相同,即在四核處理器上可定義num_parallel_calls=4??。在大數據問題中,可使用tf.contrib.data.map_and_batch并行處理用戶操作和分批操作。這里提供一個構建和優化輸入管道的例子:

在輸入管道的各項操作中,交叉讀取、預讀取和洗牌能降低內存占用,因此具有高優先級。數據的洗牌應在重復操作前完成,為此可使用兩者的組合方法tf.contrib.數據shuffle_and_repeat????。

加速器配置

CPU和GPU設備

TensorFlow支持CPU和GPU運行,在程序中設備使用字符串進行表示。CPU表示為"/cpu:0";第一個GPU表示為"/device:GPU:0";第二個GPU表示為"/device:GPU:1",以此類推。如果TensorFlow指令中兼有CPU和GPU實現,當該指令分配到設備時,GPU設備有優先權。TensorFlow僅使用計算能力高于3.5的GPU設備。

在啟用會話時打開log_device_placement配置選項,可以在終端查看會話中所有操作和張量所分配的設備,這里提供一個例子:

默認地,TensorFlow會盡可能地使用GPU內存,最理想的情況是進程只分配可用內存的一個子集,或者僅根據進程需要增加內存使用量,為此,啟用會話時可通過兩個編譯選項來進行GPU進程管理。

這里提供一個在會話中編譯GPU進程選項的例子:

TPU設備

張量處理器(Tensor Processing Unit, TPU)是谷歌為TensorFlow定制的專用芯片。TPU部署于谷歌的云計算平臺,并作為機器學習產品開放研究和商業使用。TensorFlow的神經網絡API Estimator擁有支持TPU下可運行的版本TPUEstimator??。TPUEstimator可以在本地進行學習/調試,并上傳谷歌云計算平臺進行計算。

使用云計算TPU設備需要快速向TPU供給數據,為此可使用tf.數據Dataset API從谷歌云存儲分區中構建輸入管道。小數據集可使用tf.data.Dataset.緩存完全加載到內存中,大數據可轉化為TFRecord格式并使用tf.data.TFRecordDataset進行讀取。

設備管理(tf.device)

TensorFlow使用tf.device對設備進行管理,tf.device的設備規范具有以下形式:

其中 是一個字母數字字符串,并且不以數字開頭。 是一種注冊設備類型(例如 GPU 或 CPU)。 是一個自然數,表示名為 的作業中的任務的索引。 是一個非負整數,表示設備索引,例如用于區分同一進程中使用的不同GPU設備。

定義變量時可以使用tf.device指定設備名稱,tf.train.replica_device_setter可以對變量的設備進行自動分配,這里提供一個在不同設備定義變量和操作的例子:

根據tf.device對變量的分配,在單一GPU的系統中,與變量有關的操作會被固定到CPU或GPU上;在多GPU的系統中,操作會在偏好設備(或多個設備同時)運行。多GPU并行處理圖的節點能加快會話的運行,這里提供一個例子:

優化器配置

模型優化工具

Tensorflow提供了模型優化工具(Model 最優化 Toolkit)對模型的尺度、響應時間和計算開銷進行優化。模型優化工具可以減少模型參數的使用量(pruning)、對模型精度進行量化(quantization)和改進模型的拓撲結構,適用于將模型部署到終端設備,或在有硬件局限時運行模型,因此有很多優化方案是TensorFlow Lite項目的一部分。其中量化能夠在最小化精度損失的情況下顯著減小模型尺度和縮短響應時間,并是優化深度學習模型的重要手段。這里提供一個使用使用模型優化工具的例子:

XLA

線性代數加速器(Accelerated Linear Algebra, XLA)是一個特殊的編譯器,用于優化TensorFlow中的線性代數計算,其目標是優化內存使用,提升TensorFlow的運行速度和跨平臺,尤其是移動終端的可移植性。

XLA工作的前端輸入為“高層優化器(High Level Optimizer, HLO)”定義的數據流圖,隨后XLA使用多種獨立于計算設備的算法優化方案對圖進行分析,并將HLO計算送入后端。后端會進一步進行基于特定設備,例如GPU的優化。截至TensorFlow的1.12版本,XLA依然處于早期開發狀態,暫不能提供顯著的性能優化,其硬件支持包括JIT和AOT編譯的x86-64?CPU、英偉達 GPU??。

可視化工具

TensorFlow擁有自帶的可視化工具TensorBoard,TensorBoard具有展示數據流圖、繪制分析圖、顯示附加數據等功能。開源安裝的TensorFlow會自行配置TensorBoard。啟動TensorBoard前需要建立模型檔案,低階API使用tf.summary構建檔案,Keras包含callback方法、Estimator會自行建立檔案。這里提供兩個例子:

檔案建立完畢后在終端可依據檔案路徑運行TensorBoard主程序:

當終端顯示TensorBoard 1.12.0 at http://your_pc_name:6006 (Press CTRL+C to quit)時,跳轉至localhost:6006可使用TensorFlow界面。

調試程序

由于通用調試程序,例如Python的pdb很難對TensorFlow代碼進行調試,因此TensorFlow團隊開發了專用的調試模塊TFDBG,該模塊可以在學習和預測時查看會話中數據流圖的內部結構和狀態。TFDBG在運行時期間會攔截指令生成的錯誤,并向用戶顯示錯誤信息和調試說明。TFDBG使用文本交互系統curses,在不支持curses的Windows操作系統,可以下載非官方的Windows curses軟件包或使用readline作為代替。使用TFDBG調試會話時,可以直接將會話進行封裝,具體有如下例子:

封裝容器與會話具有相同界面,因此調試時無需修改代碼。封裝容器在會話開始時調出命令行界面(Command Line 接口, CLI),CLI包含超過60條指令,用戶可以在使用指令控制會話、檢查數據流圖、打印及保存張量

TFDBG可以調試神經網絡API Estimator和Keras,對Estimator,TFDBG創建調試掛鉤(LocalCLIDebugHook)作為Estimator中的fit和evaluate方法下monitor的參數。對Keras,TFDBG提供Keras后端會話的封裝對象,這里提供一些調試例子:

TFDBG支持遠程和離線會話調試,可應用于在沒有終端訪問權限的遠程機器(例如云計算)運行Tensorflow的場合。除CLI外,TFDBG在TensorBoard擁有擁有圖形界面的調試程序插件,該插件提供了計算圖檢查、張量實時可視化、張量連續性和條件性斷點以及將張量關聯到圖源代碼等功能。

設備部署

TensorFlow支持在一個或多個系統下使用多個設備并部署分布式服務器(distributed server)和服務器集群(cluster)。tf.train.Server.create_local_server可在本地構建簡單的分布式服務器。這里提供一個例子:

TensorFlow服務器集群是分布運行的數據流圖中的“任務(task)”集合,每個任務都會被分配至一個TensorFlow服務,其中包含一個“主干(master)”以啟動會話和一個“工作點(worker)”執行圖的操作。服務器集群可以被分割為“工作(job)”,每個工作包含一或多個任務。

部署服務器集群時,通常每個任務分配一臺機器,但也可在一臺機器的不同設備運行多個任務。每個任務都包含tf.train.ClusterSpec方法以描述該服務器集群的全部任務(每個任務的ClusterSpec是相同的)和tf.train.Server方法按工作名提取本地任務。tf.train.ClusterSpec要求輸入一個包含所有工作名和地址的字典;而tf.train.Server對象包含一系列本地設備、與tf.train.ClusterSpec中其它任務的鏈接和一個使用鏈接進行分布式計算的會話。每個任務都是一個特定工作名的成員,并有一個任務編號(task index)。任務可以通過編號與其它任務相聯系。這里提供一個部署兩個任務于兩臺服務器的例子:

分布式TensorFlow支持亞馬遜簡易存儲服務(Amazon Simple Storage Service, S3)和開源的Hadoop分布式文件系統(Hadoop Distributed File System,HDFS)。

設備安全性

TensorFlow的模型文件是代碼,在執行數據流圖計算時可能的操作包括讀寫文件、從網絡發送和接收數據、生成子進程,這些過程對系統會造成影響。在運行由未知第三方提供的TensorFlow模型、計算流圖(GraphDef和SavedModel)和檢查點文件時,一個推薦的做法是使用沙盒(sand box)以監測其行為。安全的TensorFlow模型在引入未知輸入數據時,也可能觸發TensorFlow內部或系統的錯誤。

TensorFlow的分布式計算平臺和服務器接口(tf.train.Server)不包含授權協議和信息加密選項,任何具有網絡權限的訪問者都可以運行tf.train.Server上的任何代碼,因此TensorFlow不適用于不信任的網絡。在局域網或云計算平臺部署TensorFlow計算集群時,需要為其配備獨立網絡(isolated networks)??。

TensorFlow作為一個使用大量第三方庫(NumPy、libjpeg-turbo等)的復雜系統,容易出現漏洞。用戶可以使用電子郵件向TensorFlow團隊報告漏洞和可疑行為,對于高度敏感的漏洞,其GitHub頁面提供了郵件的SSH密鑰。以下列出截至2018年7月12日的已知漏洞:

生態系統

社區建立

TensorFlow位于GitHub的三個代碼庫負責處理事件和提供技術支持,一般性的求助也可發送至stackoverflow的TensorFlow板塊。TensorFlow使用公共郵箱發布主要版本和重要公告,其官方網站的“路線圖”頁面匯總了其近期的開發計劃。TensorFlow團隊擁有Twitter賬戶和博客以發布項目的新聞和動態。TensorFlow的YouTube頻道介紹了TensorFlow在機器學習和人工智能領域的應用,并定期推送節目,包括“TensorFlow Meets”、“Ask TensorFlow”和“Coding TensorFlow”??。

項目研發

TensorFlow Hub

TensorFlow Hub是一個允許用戶發布、共享和使用TensorFlow模塊的庫開發項目。用戶可以將TensorFlow數據流圖或其部分使用Hub進行封裝并移植到其它問題中再次利用。TensorFlow Hub頁面列出了由谷歌DeepMind提供的封裝模型,其主題包括字符嵌入、視頻分類和圖像處理。

TensorFlow Extended (TFX)

TFX是谷歌基于TensorFlow開發的產品級機器學習平臺,其目標是是對產品開發中的模型實現、分析驗證和業務化操作進行整合,在實時數據下完成機器學習產品的標準化生產。TFX包含三個算法庫:TensorFlow Data Validation對機器學習數據進行統計描述和驗證、TensorFlow Transform對模型數據進行預處理、TensorFlow Model Analysis對機器學習模型進行分析,提供表現評分。另有TensorFlow Serving作為模型業務化的高性能系統,提供模型接口和管理。

TensorFlow Probability (TFP)

TFP是在TensorFlow Python API基礎上開發的統計學算法庫,其目標是方便用戶將概率模型和深度學習模型相結合使用。TFP包含大量概率分布的生成器、支持構建深度網絡的概率層(probabilistic layers)、提供變分托馬斯·貝葉斯推斷(Variational inference)和馬爾可夫鏈蒙特卡羅方法(Markov chain Monte Carlo)和一些特殊的優化器,包括Nelder-Mead方案、BFGS算法(Broyden-Fletcher-Goldfarb-Shanno algorithm)和SGLD(Stochastic 梯度 Langevin 動力學)??。

應用開發

TensorFlow.js

TensorFlow.js是TensorFlow的ECMAScript API,主要用于網頁端的機器學習應用開發。TensorFlow.js可以在瀏覽器和Node.js下轉化和運行TensorFlow構建的機器學習模型,并使用網頁端數據對模型進行訓練。截至2018年9月18日,TensorFlow.js的版本號為0.13??。

TensorFlow Lite

TensorFlow Lite是為移動和嵌入式設備運行機器學習代碼的問題提供解決方案。TensorFlow Lite包含優化算法以提升Android、iOS等系統下機器學習模型的響應時間并降低文件大小。谷歌內部的許多移動端產品,包括谷歌相冊、gmail客戶端、谷歌鍵盤等都使用TensorFlow Lite部署了人工智能算法。

Swift for TensorFlow

Swift for TensorFlow是開源版Swift的TensorFlow API開發項目。Swift for TensorFlow類似于Eager Execution可以直接執行數據流圖且性能更高。截至10月13日,Swift for TensorFlow處于早期開發狀態。

平臺研究

TensorFlow Research Cloud

谷歌云計算服務中的TPU計算集群

TensorFlow Research Cloud是面向科學研究的機器學習TPU云計算平臺。該項目擁有1000個云TPU和總計180千萬億次計算力,每個TPU擁有64 GB的高帶寬內存。TensorFlow Research Cloud項目在2018年2月進入Beta版,可以申請使用,在官方聲明中,其發起目的是“為確保全世界優秀的研究人員擁有足夠的計算資源以規劃、使用和發表下個機器學習浪潮的革命性突破”

(原文)??“Our goal is to ensure that the most promising researchers in the world have access to enough compute 功率 to imagine, implement, and publish the next wave of ML breakthroughs.”

除面向研究的TPU服務外,谷歌也提供商用的Cloud TPU項目以支持企業的Tensorflow開發。

Magenta

Magenta是在藝術領域使用機器學習的研究項目,該項目使用深度學習網絡和強化學習算法學習生成音樂、繪畫和其它藝術作品,以幫助藝術人員拓展其創作過程。Magenta項目的研究成果包括音樂創作工具NSynth和混音工具MusicVAE。

細胞核

nucleus是將TensorFlow應用于基因組文件,例如SAM和VCF格式文件的讀寫和分析的庫開發項目。Nucleus使用PythonC++進行開發,截至2018年9月已發布0.2.0版本。

參考資料 >

揭秘TensorFlow:Google開源到底開的是什么?.tech.sina.com.cn.2018-08-13

生活家百科家居網