tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I
“ 一文概覽Tensorflow方方面面。”
大家好,我是人工智能工程師Alpha浪。
今天,我們開始「動手學(xué)習(xí)Tensorflow - Tensorflow 綜述」部分。
快速學(xué)習(xí)一門新技術(shù)的最好方法之一,就是首先對這門技術(shù)有著全局的認(rèn)識,然后在深入了解每一部分的細(xì)節(jié)。
綜述就是最好的給你全局認(rèn)識的讀物。
什么是Tensorflow
Tensorflow 是Google在2015年發(fā)布的一個端到端開源機(jī)器學(xué)習(xí)平臺。
它的前身是Google內(nèi)部從2011年開始使用的Disbelief。
那么為什么叫做 Tensorflow 呢?
Tensor 表示多維數(shù)組,Flow表示流動,從字面上來看Tensorflow的意思為多維數(shù)組在流動。
Tensorflow將數(shù)值計算表達(dá)為一個計算圖,圖中的節(jié)點為算子,圖中的邊為多維數(shù)組。
一次數(shù)值計算由對應(yīng)的多維數(shù)組 (Tensor) 流過相應(yīng)的算子 (Operator)而表達(dá),即Tensor 在Flow,所以叫做Tensorflow。
Why Tensorflow
為什么我們要選擇使用Tensorflow呢?
Tensorflow 由Google出品,Google家開源的工具一般都還不錯 (Google 大法好)。
Tensorflow有著強(qiáng)大的社區(qū)和生態(tài),在工業(yè)界有著廣泛的成功案例。Tensorflow從2015年發(fā)布到2020年,已經(jīng)是一項很成熟的技術(shù)方案了,部署在線上的Tensorflow,已經(jīng)經(jīng)歷過了數(shù)次雙十一流量高峰檢驗。
Tensorflow支持多種語言,C++, Python, java,javascript,swift etc。Java在國內(nèi)是很多科技公司的線上編程語言,支持Java的tensorflow比那些只支持c++和python的庫要能打的很多。
Tensorflow支持分布式訓(xùn)練和部署。
更多選擇Tensorflow的理由,我們在上一篇 深度學(xué)習(xí)框架紛爭 也有提及。
Tensorflow從2015年開源到現(xiàn)在,已經(jīng)發(fā)布了104個版本,從單純的機(jī)器學(xué)習(xí)算法開發(fā)包,已經(jīng)發(fā)展到一個巨大的生態(tài)系統(tǒng),成為了一個端到端的機(jī)器學(xué)習(xí)平臺。
如今的Tensorflow包含以下四個部分:
- Tensorflow核心開源庫
- Tensorflow.js
- 針對移動設(shè)備和IOT設(shè)備的Tensorflow Lite
- 針對成產(chǎn)環(huán)境的Tfx和Tensorflow Serving
Tensorflow核心庫
Tensorflow核心庫是我們最常用的部分了,通過它,我們可以輕松構(gòu)建機(jī)器學(xué)習(xí)模型。
通常來講,我們都是使用Tensorflow 核心庫的python api進(jìn)行模型的編寫。
在下一篇文章中,我們會介紹Tensorflow入門實戰(zhàn),本篇先介紹Tensorflow核心庫的一些基礎(chǔ)以及概念。
Tensorflow中的兩種模式Tensorflow中存在兩種模式。
在Tensorflow2.X之后,默認(rèn)是eager execution模式,即動態(tài)圖模式。
動態(tài)圖模式,在執(zhí)行計算的同時構(gòu)建計算圖,可以像獲取python中的變量值一樣獲取Tensor中的值,編寫模型和調(diào)試起來非常方便。
在Tensorflow1.x的版本中,默認(rèn)是非eager execution模式,即靜態(tài)圖模式。
靜態(tài)圖模式,首先進(jìn)行計算圖的構(gòu)建,然后在該計算圖上才執(zhí)行多次計算來進(jìn)行模型的訓(xùn)練和評估。
Tensor值不能在它定義的時候獲取的到,只有在真正計算的時候才能從session中獲取,調(diào)試起來非常麻煩,被很多人吐槽。
動態(tài)圖模式非常適合線下編寫調(diào)試模型;靜態(tài)圖模式則比較適合線上的場景,一次構(gòu)建好計算圖,然后在這個計算圖上執(zhí)行計算,比邊構(gòu)建圖邊計算工程效率要高很多。
Tensorflow三種實現(xiàn)模型的方式在Tensorflow中,我們可以有三種實現(xiàn)模型的方式。
在早期的Tensorflow1.x版本中,大家都是通過low-level api,直接使用graph和session來編寫模型。
在后來的Tensorflow1.x版本中,則是推薦使用Estimator來編寫模型。
在如今的Tensorflow2.x版本中,官方推薦使用Keras api來編寫模型。
Tensorflow編程模型中的一些基本概念Tensorflow中,我們會遇到以下概念:Tensor,Variable,Placeholder和 Operator。
廣義上說,Tensorflow中變量分為兩種類型,Tensor和Operator,其中,Tensor表示多維數(shù)組,包括了像Variable和Placeholder這樣的specific tensor。Operator表示算子,例如相加,相乘等。
例如,我們想執(zhí)行下圖中的一個簡單的relu模型。
參數(shù)W和b我們會定義成Variable,一般模型的參數(shù)都會定義成Variable類型的Tensor。
輸入變量X會定義成Placeholder,Placeholder是我們要fed進(jìn)計算圖的那部分tensor,例如輸入和label。
而像Add,MatMul和RELU則是算子,對輸入的Tensor值進(jìn)行相關(guān)計算。
Tensorflow中模型的三種存儲格式Tensorflow中模型可以有三種存儲格式,分別是check point,saved model以及frozen graph格式。
Check point模型可能是我們接觸最多的模型格式了,我們在Tensorflow中直接模型存儲的方式就是以check point的格式來存儲。
Check point將全部學(xué)到的Variable tensor值進(jìn)行保存,但是不保存模型結(jié)構(gòu),因此只有在模型source code存在的時候才能對check point格式的模型進(jìn)行加載。
Saved model是Tensorflow Serving加載的模型格式。除了保存變量Variable的值之外,它還保存模型的結(jié)構(gòu),因此沒有模型的Source code也能對saved model進(jìn)行加載。
Saved model格式常用在線上部署,例如通過Tensorflow serving來部署,或者通過tensorflow c++或者java api來進(jìn)行模型的inference。
Frozen Graph格式目前在Tensorflow官方文檔中已經(jīng)看不到了,但是它在業(yè)界還是有一定的應(yīng)用場景的。
Frozen Graph根據(jù)模型的輸入和輸出,只保留在infercne階段和它們相關(guān)聯(lián)的計算圖中的節(jié)點和邊,進(jìn)而可以去除掉在Inference階段用不到的tensor和operator,使得模型更小。
Tensorflow DatasetTensorflow Dataset是用來構(gòu)建模型輸入pipeline的。
例如,我們通過Tensorflow Dataset來設(shè)定batch size的大小以及迭代的epoch輪數(shù)。
Tensorflow Dataset是Estimator和Keras Model的輸入格式。
TensorboardTensorboard 是Tensorflow中提供的可視化工具。
它不僅可以可視化模型試驗過程中模型的metrics,如accuracy,loss等;它還可以可視化計算圖中的節(jié)點和邊;同時它還可以可視化圖片,可視化降維后embedding的低維空間等。
值得提的一點是,不僅Tensorflow可以使用Tensorboard進(jìn)行可視化,像Pytorch等也可以使用它做可視化。
TfDebugTfDebug還是Tensorflow1.x版本中的一個工具,現(xiàn)在在Tensorflow 2.x的文檔中中已經(jīng)沒有了它的身影。
在Tensorflow1.x靜態(tài)圖模式下,只有在計算圖真正執(zhí)行的時候才能獲取Tensor的值,而不能在Tensor定義的地方獲取它的值。
那是一段痛苦的記憶,那個時候只有通過Tfdebug這個工具,才能進(jìn)行debug,既麻煩低效又痛苦。
現(xiàn)在Tensorflow2.x版本中,默認(rèn)是動態(tài)圖方式,debug非常方便,TfDebug也就再也用不到了^_^ 。
Tensorflow中GPU的使用在這里要提一個在Tensorflow中使用GPU的好習(xí)慣。
Tensorflow默認(rèn)會對GPU卡全部占用,即使是執(zhí)行很少的運(yùn)算。而如果這塊卡被一個人全部占用,那么其他人就得不到使用。
因此在使用gpu的時候,一定要進(jìn)行以下設(shè)置:
可以使用tf.test.is_gpu_avaibalbe() 來查看當(dāng)前gpu是否可用,如果不可用,要檢查下是否是gpu驅(qū)動沒有安裝,以及是否沒有安裝Tensorflow-gpu。
可以使用 os.environ['CUDA_VISIBLE_DEVICES'] = 0,1 來進(jìn)行g(shù)pu卡的選擇。
我們會在下一篇文章中完成剩下的Tensorflow綜述部分。
總結(jié)
以上是生活随笔為你收集整理的tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可视化神器_详解Python
- 下一篇: 开发详细设计文档_郑州APP开发:开发前