国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

TensorFlow-dev-summit:那些TensorFlow上好玩的和黑科技

BLUE / 1802人閱讀

摘要:現(xiàn)場宣布全球領(lǐng)先的深度學(xué)習(xí)開源框架正式對外發(fā)布版本,并保證的本次發(fā)布版本的接口滿足生產(chǎn)環(huán)境穩(wěn)定性要求。有趣的應(yīng)用案例皮膚癌圖像分類皮膚癌在全世界范圍內(nèi)影響深遠(yuǎn),患病人數(shù)眾多,嚴(yán)重威脅身體機(jī)能。

前言

本文屬于介紹性文章,其中會介紹許多TensorFlow的新feature和summit上介紹的一些有意思的案例,文章比較長,可能會花費30分鐘到一個小時

Google于2017年2月16日(北京時間)凌晨2點在美國加利福尼亞州山景城舉辦了首屆TensorFlow開發(fā)者峰會。Google現(xiàn)場宣布全球領(lǐng)先的深度學(xué)習(xí)開源框架TensorFlow正式對外發(fā)布V1.0版本,并保證Google的本次發(fā)布版本的API接口滿足生產(chǎn)環(huán)境穩(wěn)定性要求。

TensorFlow 在 2015 年年底一出現(xiàn)就受到了極大的關(guān)注,經(jīng)過一年多的發(fā)展,已經(jīng)成為了在機(jī)器學(xué)習(xí)、深度學(xué)習(xí)項目中更受歡迎的框架之一。自發(fā)布以來,TensorFlow不斷在完善并增加新功能,直到在這次大會上發(fā)布了穩(wěn)定版本的TensorFlow V1.0。這次是谷歌第一次舉辦的TensorFlow開發(fā)者和愛好者大會,我們從主題演講、有趣應(yīng)用、技術(shù)生態(tài)、移動端和嵌入式應(yīng)用多方面總結(jié)這次大會上的內(nèi)容,希望能對TensorFlow開發(fā)者有所幫助。

TensorFlow: 為大眾準(zhǔn)備的機(jī)器學(xué)習(xí)框架

TensorFlow在過去獲得成績主要有以下幾點:

TensorFlow被應(yīng)用在Google很多的應(yīng)用包括:Gmail, Google Play Recommendation, Search, Translate, Map等等;

在醫(yī)療方面,TensorFlow被科學(xué)家用來搭建根據(jù)視網(wǎng)膜來預(yù)防糖尿病致盲(后面也提到Stanford的PHD使用TensorFlow來預(yù)測皮膚癌,相關(guān)工作上了Nature封面);

通過在音樂、繪畫這塊的領(lǐng)域使用TensorFlow構(gòu)建深度學(xué)習(xí)模型來幫助人類更好地理解藝術(shù);

使用TensorFlow框架和高科技設(shè)備,構(gòu)建自動化的海洋生物檢測系統(tǒng),用來幫助科學(xué)家了解海洋生物的情況;

TensorFlow在移動客戶端發(fā)力,有多款在移動設(shè)備上使用TensorFlow做翻譯、風(fēng)格化等工作;

TensorFlow在移動設(shè)備CPU(高通820)上,能夠達(dá)到更高的性能和更低的功耗;

TensorFlow ecosystem結(jié)合其他開源項目能夠快速地搭建高性能的生產(chǎn)環(huán)境;

TensorBoard Embedded vector可視化工作

能夠幫助PHD/科研工作者快速開展project研究工作。

Google第一代分布式機(jī)器學(xué)習(xí)框架DistBelief不再滿足Google內(nèi)部的需求,Google的小伙伴們在DistBelief基礎(chǔ)上做了重新設(shè)計,引入各種計算設(shè)備的支持包括CPU/GPU/TPU,以及能夠很好地運行在移動端,如安卓設(shè)備、ios、樹莓派 等等,支持多種不同的語言(因為各種high-level的api,訓(xùn)練僅支持Python,inference支持包括C++,Go,Java等等),另外包括像TensorBoard這類很棒的工具,能夠有效地提高深度學(xué)習(xí)研究工作者的效率。

TensorFlow在Google內(nèi)部項目應(yīng)用的增長也十分迅速:在Google多個產(chǎn)品都有應(yīng)用如:Gmail,Google Play Recommendation, Search, Translate, Map等等;有將近100多project和paper使用TensorFlow做相關(guān)工作

TensorFlow在過去14個月的開源的時間內(nèi)也獲得了很多的成績,包括475+非Google的Contributors,14000+次commit,超過5500標(biāo)題中出現(xiàn)過TensorFlow的github project以及在Stack Overflow上有包括5000+個已被回答 的問題,平均每周80+的issue提交。

過去1年,TensorFlow從最開始的0.5,差不多一個半月一個版本:

TensorFlow 1.0的發(fā)布

TensorFlow1.0也發(fā)布了,雖然改了好多api,但是也提供了tf_upgrade.py來對你的代碼進(jìn)行更新。TensorFlow 1.0在分布式訓(xùn)練inception-v3模型上,64張GPU可以達(dá)到58X的加速比,更靈活的高層抽象接口,以及更穩(wěn)定的API。

New High Level API

對于新的抽象接口,TensorFlow相對于其他DeepLearning FrameWork做的比較好,layers能讓人很容易build一個model,基于layer之上的包括TF.Learn里面仿照scikit-learn風(fēng)格的各種estimator設(shè)計以及之后將融入TensorFlow 官方支持的Keras,能夠讓小伙伴用幾行配置模型結(jié)構(gòu)、運行方式、模型輸出等等;在這層之上就有canned Estimator,所謂的model in box,比如lr,kmeans這類。

Broad ML Support

在TensorFlow中有一些高興的機(jī)器學(xué)習(xí)的算法實現(xiàn),如LR, SVM、 Random Forest,在TF.Learn中有很多常用的機(jī)器學(xué)習(xí)算法的實現(xiàn),用戶可以很快的使用,而且API風(fēng)格和scikit-learn很類似,而且在后續(xù)的video提到會有分布式的支持。

XLA: An Experimental TensorFlow Compiler

TensorFlow XLA能夠快速地將TensorFlow轉(zhuǎn)成比較底層的實現(xiàn)(依賴device),這里后面有個talk,詳細(xì)講述了XLA。

廣泛的合作

Included in IBM’s PowerAI

Support movidus myriad 2 accelerator

Qualcomm’s Hexagon DSP (8倍加速,這里還請了Qualcomm的產(chǎn)品負(fù)責(zé)人來站臺)

TensorFlow In Depth

TensorFlow在research和production上有很好的優(yōu)勢,如下圖:

在模型訓(xùn)練上,1機(jī)8卡的性能無論是在一些標(biāo)準(zhǔn)的基準(zhǔn)測試或者是真實數(shù)據(jù)上都有比較好的加速比:

當(dāng)然在多機(jī)分布式訓(xùn)練上,能夠達(dá)到64張GPU上58倍的加速比:

TensorFlow被一些頂尖的學(xué)術(shù)研究項目使用: – Neural Machine Translation – Neural Architecture Search – Show and Tell

當(dāng)然TensorFlow在生產(chǎn)上也被廣泛應(yīng)用:

如Mobile Google Translate,Gmail等等,也被國內(nèi)外很多大廠使用做為模型訓(xùn)練的工具。

這些都是Jeff Dean在Keynote的內(nèi)容講到的內(nèi)容,內(nèi)容有點多,而且個人感覺這群google的小伙伴的ppt做的有點任性,不過誰叫他們牛逼呢,接下來幾個talk比較有技術(shù)含量,相信各位會更加有興趣。

有趣的應(yīng)用案例

皮膚癌圖像分類

皮膚癌在全世界范圍內(nèi)影響深遠(yuǎn),患病人數(shù)眾多,嚴(yán)重威脅身體機(jī)能。所幸醫(yī)療機(jī)構(gòu)統(tǒng)計皮膚癌在早期的治愈率是98%,更值得慶幸的是在這樣一個時代,智能終端能夠在早期及時發(fā)現(xiàn),及早預(yù)防(到2020,預(yù)計全球有61億臺智能手機(jī))。

這位小哥做的工作是啥呢,他拿到了一批皮膚癌的數(shù)據(jù),然后使用一個pretrained的inception-v3對數(shù)據(jù)來做一個inference,

最終結(jié)果:

而且在手機(jī)上很容易搭建,完成一個app用來做早起皮膚癌的檢測:

最終相關(guān)成果發(fā)表在Nature,而且在Nature的封面,這是一個特別成功地通過計算機(jī)視覺及深度學(xué)習(xí)相關(guān)的技術(shù),利用廉價的移動設(shè)備,能夠很有效地檢測是否有皮膚癌,大大節(jié)省了醫(yī)療檢測的成本,相信在未來 會有更多相關(guān)的技術(shù)出現(xiàn)。

利用AI預(yù)測糖尿病,預(yù)防失明

這個talk講的前面也提到的通過視網(wǎng)膜圖像預(yù)測糖尿病,預(yù)防失明:

通過視網(wǎng)膜圖片預(yù)測糖尿病是一個困難的問題,即使是專業(yè)的醫(yī)生,也很難去判斷,但是深度學(xué)習(xí)卻可以幫助我們:

通過收集適量的醫(yī)療數(shù)據(jù),構(gòu)建一個26layers的深度卷積網(wǎng)絡(luò),我們可以讓網(wǎng)絡(luò)自動學(xué)習(xí)這些圖像中的feature,來獲得較高的分類準(zhǔn)確率,而這個是人眼很難解決的。 這里有一個demo的演示:

模型最后的評估比專業(yè)醫(yī)生對比,F(xiàn)-score為0.95,比專業(yè)醫(yī)生的中位數(shù)0.91還高,這個太厲害了,相信不久會看到深度學(xué)習(xí)在醫(yī)療,尤其是這種病癥圖像分析上有很多驚人的成果。

Wide & Deep In Google Play

這項技術(shù)有段時間特別火,被用來做推薦相關(guān)的應(yīng)用,首先解釋下Memorization和Generalization:

模型的基本結(jié)構(gòu)如下:

整個推薦會同事考慮到商品的相關(guān)性以及一些推理關(guān)系,例如老鷹會飛、麻雀會飛這類邏輯屬于Memorization, 而說帶翅膀的動物會飛這屬于Genralization。

在具體的應(yīng)用場景,如Google Play的App推薦:

這里構(gòu)建一個如下圖的網(wǎng)絡(luò)來進(jìn)行訓(xùn)練(joint training):

為啥要joint training,而不是直接用deep和wide的來做ensemble呢? 這里做這個給出一個解釋,因為wide和deep會相互影響,最后較精確度會高,并且model會比較小:

而上面提到的Wide & Deep Learning Model在Tensorflow下僅僅只需要10行代碼來實現(xiàn)(突然想起了那個100美元畫一條線的故事):

Magenta: 音樂和藝術(shù)生成

這個項目講的是利用深度學(xué)習(xí)來做一些藝術(shù)相關(guān)的工作,項目地址:tensorflow-magenta 有一些很好玩的東西,如風(fēng)格化,生成藝術(shù)家風(fēng)格的音樂,利用深度學(xué)習(xí)模型模擬人類對藝術(shù)的想象力,創(chuàng)造出屬于DeepLearning的藝術(shù)風(fēng)格。 想要詳細(xì)了解的可以看看這里的介紹welcome-to-magenta,還有前面提到的github上project。

DeepMind團(tuán)隊所做的一些開發(fā)工作

DeepMind在被Google收購之后,也選擇TensorFlow作為其深度學(xué)習(xí)相關(guān)研究的平臺,然后做了很多很有意思的東西:

Data Center Cooling

這是Google在全世界各地若干個數(shù)據(jù)中心之一:

然后這群Google的小伙伴做了些什么事情呢?

Google的小伙伴利用強(qiáng)化學(xué)習(xí),是的!你沒有聽錯,應(yīng)用在AlphaGo上的一種技術(shù)來做數(shù)據(jù)中心冷卻設(shè)備的自動控制,并且效果十分顯著:

Gorila

Gorial是DeepMind下的一個強(qiáng)化學(xué)習(xí)的框架,基于TensorFlow的高級API實現(xiàn),很穩(wěn)定,只需要更改其中極少部分代碼就可以完成新的實驗,支持分布式訓(xùn)練,十分高效, 并且訓(xùn)練好的模型可以通過TensorFlow Serving快速地部署到生產(chǎn)環(huán)境。

AlphaGo

這個相信不說,大家都知道的,第一次在圍棋上打敗人類,然后升級版的Master 連續(xù)60盤不敗,原理不說了,網(wǎng)絡(luò)上很多分析文章,貼兩張圖聊表敬意:

WaveNet:語音音頻合成

這里DeepMind的小哥演示了WaveNet的一些demo, 具體的可以參見這里來了解。 貼一些效果對比:

XLA以及Keras與TensorFlow的融合

XLA與TensorFlow的結(jié)合

TensorFlow的各方面的優(yōu)勢都很突出,除了在速度這塊有些不足,如果,TensorFlow能在速度上做進(jìn)一步優(yōu)化,會怎么樣呢 ?

是的,Google的開發(fā)者也意識到這個問題,于是有了這個XLA, XLA的優(yōu)勢:

提高執(zhí)行速度,編譯子圖會減少生命周期較短的op的時間,來至少TensorFlow執(zhí)行是的時間;融合pipelined的op來減少內(nèi)存的開銷;

通過分析和調(diào)節(jié)內(nèi)存需求,來減少很多中間結(jié)果的緩存

減少定制化op的依賴,通過提供自動化融合底層ops的性能來達(dá)到原先需要手工去融合定制化op的性能

減少移動設(shè)備的內(nèi)存占用,使用AOT編譯子圖來減少tensorflow執(zhí)行時間,能夠共享object/header file pair給其他應(yīng)用,能夠在Mobile Inference上減少幾個數(shù)量級的內(nèi)存占用

提高了程序的可移植性,能夠在不改變大部分tensorflow源碼的前提下,很容易地更改以適應(yīng)新的硬件設(shè)備,

XLA主要包括兩種使用方式:JIT(Just in time)能夠自動將Graph中的部分子圖通過XLA融合某些操作來減少內(nèi)存需求提高執(zhí)行速度;AOT(Ahead of time)可以提前將Graph轉(zhuǎn)換為可以執(zhí)行的源碼,減少生成的可執(zhí)行文件的大小, 減少運行的時間消耗,一個很明顯的應(yīng)用場景是模型在移動設(shè)備上的Inference優(yōu)化。

因為XLA原理涉及到編譯器,這塊不是我擅長的地方,所以這里就這樣過了, 如果有興趣的小伙伴可以關(guān)注下xla docs還有此次TensorFlow Dev Summit 上XLA的talkXLA: TensorFlow, Compiled! 最后貼幾張XLA的一些評測性能:

Keras與TensorFlow的集成

Keras 是一個可以在很多平臺上應(yīng)用的深度學(xué)習(xí)框架,”An API Specify for building deep learning models across many platforms”。 TensorFlow已經(jīng)會在官方TensorFlow支持,1.1會在tf.contrib,1.2會tf.keras,而且會支持TensorFlow Serving,是不是很心動。 Keras的作者在TensorFlow Dev Summit上講了以下內(nèi)容:

所以之后Keras的用戶可以更快的在TensorFlow的框架下做出相應(yīng)地模型,能更方便地進(jìn)行分布式訓(xùn)練,使用Google的Cloud ML, 進(jìn)行超參,還有更更重要的:TF-Serving。 這些feature現(xiàn)在好像還沒有支持,不過應(yīng)該很快了,大家可以期待下。 這里,F(xiàn)rancois Chollet使用Keras構(gòu)造了一個Video-QA的model,這個模型在Keras的官方文檔也有描述,具體可以去那邊看看,大概是這樣一個場景:

這樣一個場景,利用原生的python構(gòu)造太難了,但是用Keras,只需要考慮設(shè)計你的模型,如何來完成類似的功能,完全不用擔(dān)心coding的實現(xiàn),如圖是一個類似問題的一個簡單地模型設(shè)計:

更詳細(xì)一點:

而在Keras中如何實現(xiàn)呢

video = tf.keras.layers.Input(shape=(None, 150, 150, 3))cnn = tf.keras.applications.InceptionV3(weights="imagenet", include_top=False, pool="avg)

cnn.trainable = False

encoded_frames = tf.keras.layers.TimeDistributed(cnn)(video)

encoded_vid = tf.layers.LSTM(256)(encode_frames)

question = tf.keras.layers.Input(shape=(100), dtype="int32")

x = tf.keras.layers.Embedding(10000, 256, mask_zero=True)(question)

encoded_q = tf.keras.layers.LSTM(128)(x)

x = tf.keras.layers.concat([encoded_vid, encoded_q])

x = tf.keras.layers.Dense(128, activation=tf.nn.relu)(x)

outputs = tf.keras.layers.Dense(1000)(x)

model = tf.keras.models.Mode([video, question], outputs)

model.compile(optimizer=tf.AdamOptimizer(), loss=tf.softmax_crossentropy_with_logits)

這里代碼是無法在現(xiàn)在的tensorflow版本上跑的,如果想了解下keras上構(gòu)建上述模型的簡便性,可以看看這里. Keras在構(gòu)造深度模型的方便是大家眾所周知的,值得期待之后Keras在TensorFlow的更新:

TensorFlow High-Level APIs: Models in a Box

TensorFlow在靈活性、可擴(kuò)展性、可維護(hù)性上做的很好,但是現(xiàn)在在高級api、模塊式算法這塊原先都還不足,但是Google Brain的工程師在這個talk上介紹了一些High-level API的相關(guān)工作。

layers: 封裝了一些層的操作,簡化用原生TensorFlow源碼,比如new 一個variable來做weight等等;

Estimator or Keras: 封裝了一些更高層的操作包括,train和evaluate操作,用戶可以通過幾行代碼來快速構(gòu)建訓(xùn)練和評估過程;

Canned Estimators: 更高級API,所謂的Models in a box

構(gòu)造左圖中所示的深度網(wǎng)絡(luò)只需要如圖右中的七行代碼 同樣,構(gòu)建訓(xùn)練、評估、預(yù)測也很快可以通過api調(diào)用完成:

最后是Model in a Box

area = real_valued_column("square_foot")rooms = real_valued_column("num_rooms")zip_code = sparse_column_with_integerized_feature("zip_code", 100000)regressor = LinearRegressor(feature_columns=[area, room, zip_code])classifier.fit(train_input_fn)classifier.evaluate(eval_input_fn)

一些其他技術(shù)以及生態(tài)

ML Toolkit

TensorFlow可能最開始被人知曉,就是因為大家都覺得他是一個深度學(xué)習(xí)的框架,其實不是,現(xiàn)在TensorFlow上還有很多機(jī)器學(xué)習(xí)的算法集成:

而且算法API的開發(fā)都是仿照scikit-learn的風(fēng)格,有Python下做機(jī)器學(xué)習(xí)的小伙伴,可以很快的適應(yīng)。 這里值得提出的,有趣TensorFlow對機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型的支持,小伙伴們可以特別容易地結(jié)合傳統(tǒng)的機(jī)器學(xué)習(xí)方法和深度學(xué)習(xí)模型來一起訓(xùn)練:

分布式TensorFlow

TensorFlow在分布式性能上,前面也提到了,在1.0版本上有了很大的提升可以做到64塊GPU上達(dá)到58倍的加速,這里先基本介紹下數(shù)據(jù)并行和模型并行:

數(shù)據(jù)并行 每一個worker上有完整的模型,部分?jǐn)?shù)據(jù),參數(shù)的更新傳給Params Server;

模型并行 每一個worker上有部分的網(wǎng)絡(luò)模型;

怎么在TensorFlow寫分布式代碼,這里我就不說了,很簡單地配置,這里我講下,可能大部分像我這樣的小伙伴之前不太了解的一些彩蛋 在TensorFlow中做分布式訓(xùn)練的一些技巧,有過分布式train的經(jīng)驗應(yīng)該會很感激這些黑科技: – Round-Robin variables – Load balancing and partitioning

上面說的是啥呢? Params Server在保存模型的參數(shù)時,默認(rèn)是每一個ps存一個variable,然后下一個到下個ps上存,但是就會存在很多問題,可能這個variable很小,但是另一個很大,這樣你會發(fā)現(xiàn)ps和work 之間的帶寬的占用差距很多,怎么解決呢?看下面幾張圖

說點題外話,為啥我在看到這里的時候特別激動呢,筆者之前在開展團(tuán)隊內(nèi)部的分布式訓(xùn)練平臺時就遇到這個問題,我們在測試AlexNet模型時,發(fā)現(xiàn)多個ps上的帶寬占用差別極大,原因在與AlexNet模型的最后三個 全連接參數(shù)太多,造成了ps的不均衡。

上面說了下Distributed TensorFlow我特別激動的東西,之后talk的就是比較簡單的了,如果在TensorFlow做分布式的job,文檔里面都有,很簡單,這里不提了 不對,這里還必須說下TensorFlow對于容災(zāi)的一個支持: 下圖是幾種分布式下機(jī)器掛掉的情況:

多麻煩是吧,但是沒有關(guān)系,在TensorFlow下能夠自動對這些進(jìn)行一個快速的恢復(fù),只需要更改一行代碼

將模型布入生產(chǎn)環(huán)境

如何把訓(xùn)練好的模型快速部署在生產(chǎn)環(huán)境提供可用的服務(wù),TensorFlow Serving就是專注在這塊,我這里簡單介紹下吧:

把訓(xùn)練好的模型提供生產(chǎn)環(huán)境可用的服務(wù),通常有以下幾個需求:

長期穩(wěn)定服務(wù),低時延

支持多個模型服務(wù)

支持同一模型多版本

保證計算時耗盡量小以保證一些實時性需求

mini-batching的支持,以提高效率

TensorFlow Serving的設(shè)計就是為了解決這些需求,而且TensorFlow基于gRPC,支持多種語言。

TensorFlow生態(tài)

這部分講了如果利用TensorFlow生態(tài)結(jié)合一些流程的框架比如Spark、Hadoop等等來更好地使用TensorFlow。

數(shù)據(jù)準(zhǔn)備工作

支持的數(shù)據(jù)讀取方法,從快到慢依次是: 1.tf.Example, tf.SequenceExample對象; 2.原生的讀取CSV,JSON的OP 3.直接從Python feed數(shù)據(jù)(最簡單)

如何在其他如Hadoop, Spark上支持TFRecords(Beam原生支持) 見tensorflow ecosystem

集群的管理

TensorFlow支持以下多種框架:

分布式存儲

容器支持

模型導(dǎo)出

SavedModel: 1,TensorFlow模型的標(biāo)準(zhǔn)保存格式;2,包括以下必須的assets,比如vocabularies(不太會翻,啥意思);

GraphDef: 通常在移動設(shè)備的模型保存比較通用

移動端以及嵌入式應(yīng)用

Mobile and Embedded TensorFlow

這里介紹了怎么在移動設(shè)備比如安卓、IOS設(shè)備、樹莓派上面怎么使用TensorFlow來做一些開發(fā),具體的可能對移動設(shè)備程序開發(fā)的小伙伴們比較有用,我這里也不描述了,給個talk的 地址,有興趣的可以去看看吧。

Hands On TensorBoard

這個talk主要是介紹了TensorBoard的一些應(yīng)用,很多用法以前都沒有嘗試過,聽演講者描述之后受益匪淺。

# Define a simple convolutional layer def conv_layer(input, channels_in, channels_out):?

? ? w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out]))?

? ? b = tf.Variable(tf.zeros([channels_out]))?

? ? conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME")?

? ? act = tf.nn.relu(conv + b)?

? ? return act# And a fully connected layer def fc_layer(input, channels_in, channels_out):?

? ? w = tf.Variable(tf.zeros([channels_in, channels_out]))?

? ? b = tf.Variable(tf.zeros([channels_out]))?

? ? act = tf.nn.relu(tf.matmul(input, w) + b)?

? ? return act# Setup placeholders, and reshape the data x = tf.placeholder(tf.float32, shape=[None, 784]) y = tf.placeholder(tf.float32, shape=[None, 10]) x_image = tf.reshape(x, [-1, 28, 28, 1])# Create the network conv1 = conv_layer(x_image, 1, 32) pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")conv2 = conv_layer(pooled, 32, 64) pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME") flattened = tf.reshape(pool2, [-1, 7 * 7 * 64])fc1 = fc_layer(flattened, 7 * 7 * 64, 1024) logits = fc_layer(fc1, 1024, 10)# Compute cross entropy as our loss function cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))# Use an AdamOptimizer to train the network train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)# compute the accuracy correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))# Initialize all the variables sess.run(tf.global_variables_initializer())# Train for 2000 steps for i in range(2000): batch = mnist.train.next_batch(100)# Occasionally report accuracy if i % 500 == 0: [train_accuracy] = sess.run([accuracy], feed_dict={x: batch[0], y: batch[1]})?

? ? print("step %d, training accuracy %g" % (i, train_accuracy))# Run the training step sess.run(train_step, feed_dict={x: batch[0], y_true: batch[1]})

很多小伙伴都寫過類似的代碼,構(gòu)造網(wǎng)絡(luò),然后設(shè)定訓(xùn)練方式,最后輸出一些基本的結(jié)果信息,如下:

step 0, training accuracy 10% step 500, training accuracy 12% step 1500, training accuracy 9% step 2000, training accuracy 13%

TensorFlow給你的不僅僅是這些,有一個特別棒的工具TensorBoard能夠可視化訓(xùn)練過程中的信息,能讓人直觀的感受,當(dāng)然需要一些簡單的配置:

寫入Graph

writer = tf.summary.FileWriter("/tmp/mnist_demo/1") writer.add_graph(sess.graph)

這里雖然能夠可視化Graph,卻感覺很雜亂,我們可以通過給一些node增加name,scope,讓圖變得更好看點:

def conv_layer(input, channels_in, channels_out, name="conv"):?

? ? with tf.name_scope(name):?

? ? ? ? w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out]), name="W")?

? ? ? ? b = tf.Variable(tf.zeros([channels_out]), name="B")?

? ? ? ? conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME")?

? ? ? ? act = tf.nn.relu(conv + b)?

? ? ? ? return tf.nn.max_pool(act, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")def fc_layer(input, channels_in, channels_out, name="fc"):?

? ? with tf.name_scope(name):?

? ? ? ? w = tf.Variable(tf.zeros([channels_in, channels_out]), name="W")?

? ? ? ? b = tf.Variable(tf.zeros([channels_out]), name="B")?

? ? ? ? return tf.nn.relu(tf.matmul(input, w) + b)# Setup placeholders, and reshape the data x = tf.placeholder(tf.float32, shape=[None, 784], name="x") x_image = tf.reshape(x, [-1, 28, 28, 1]) y = tf.placeholder(tf.float32, shape=[None, 10], name="labels")conv1 = conv_layer(x_image, 1, 32, "conv1") conv2 = conv_layer(conv1, 32, 64, "conv2")flattened = tf.reshape(conv2, [-1, 7 * 7 * 64]) fc1 = fc_layer(flattened, 7 * 7 * 64, 1024, "fc1") logits = fc_layer(fc1, 1024, 10, "fc2")with tf.name_scope("xent"):?

? ? xent = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))with tf.name_scope("train"):?

? ? train_step = tf.train.AdamOptimizer(1e-4).minimize(xent)with tf.name_scope("accuracy"):?

? ? correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y, 1))?

? ? accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))writer = tf.summary.FileWriter("/tmp/mnist_demo/2") writer.add_graph(sess.graph)

通過TensorFlow的api,收集更多的數(shù)據(jù)記錄顯示在TensorBoard中:

?tf.summary.Scalar(‘cross_entropy’, xent) tf.summary.scalar(‘a(chǎn)ccuracy’, accuracy) tf.summary.image(‘input’, x_image, 3)

修改Conv的代碼,將Weight,bias,act加入到histogram中:

def conv_layer(input, channels_in, channels_out, name="conv"):?

? ? with tf.name_scope(name):?

? ? w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out]), name="W")?

? ? b = tf.Variable(tf.zeros([channels_out]), name="B")?

? ? conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME")?

? ? act = tf.nn.relu(conv + b)?

? ? tf.summary.histogram("weights", w)?

? ? tf.summary.histogram("biases", b)?

? ? tf.summary.histogram("activations", act)?

? ? return tf.nn.max_pool(act, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")

配置將訓(xùn)練過程中的數(shù)據(jù)寫入:

merged_summary = tf.summary.merge_all() writer = tf.summary.FileWriter("/tmp/mnist_demo/3") writer.add_graph(sess.graph)for i in range(2001):?

? ? batch = mnist.train.next_batch(100)?

? ? if i % 5 == 0:?

? ? ? ? s = sess.run(merged_summary, feed_dict={x: batch[0], y: batch[1]})?

? ? ? ? writer.add_summary(s, i)?

? ? ? ? sess.run(train_step, feed_dict={x: batch[0], y: batch[1]})

Hyperparameter Search

這次這個TensorBoard的talk給我較大的收獲就是用TensorBoard做Hyperparamter Search 是這么的方便, 這次talk中主要演示超參的兩個方面:

不同學(xué)習(xí)率

不同網(wǎng)絡(luò)結(jié)構(gòu)

代碼如下:

# Try a few learning rates for learning_rate in [1E-3, 1E-4, 1E-5]:

? ? # Try a model with fewer layers for use_two_fc in [True, False]:?

? ? for use_two_conv in [True, False]:

? ? # Construct a hyperparameter string for each one (example: "lr_1E-3,fc=2,conv=2)?

? ? ? ? hparam_str = make_hparam_string(learning_rate, use_two_fc, use_two_conv)

? ? ? ? writer = tf.summary.FileWriter("/tmp/mnist_tutorial/" + hparam_str)

? ? ? ? # Actually run with the new settings?

? ? ? ? mnist(learning_rate, use_two_fully_connected_layers, use_two_conv_layers, writer)

tensorboard --logdir /tmp/mnist_tutorial

Embedding Visualizer

embedding = tf.Variable(tf.zeros([10000, embedding_size]), name="test_embedding") assignment = embedding.assign(embedding_input)config = tf.contrib.tensorboard.plugins.projector.ProjectorConfig() embedding_config = config.embeddings.add() embedding_config.tensor_name = embedding.name?

embedding_config.sprite.image_path = os.path.join(LOG_DIR, "sprite.png") # Specify the width and height of a single thumbnail. embedding_config.sprite.single_image_dim.extend([28, 28]) tf.contrib.tensorboard.plugins.projector.visualize_embeddings(writer, config)for i in range(2001):?

? ? batch = mnist.train.next_batch(100)?

? ? if i % 5 == 0:?

? ? ? ? [train_accuracy, s] = sess.run([accuracy, summ], feed_dict={x: batch[0], y: batch[1]})?

? ? ? ? writer.add_summary(s, i)?

? ? if i % 500 == 0:?

? ? ? ? sess.run(assignment, feed_dict={x: mnist.test.images, y_true: mnist.test.labels})?

? ? ? ? saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"), i)?

? ? sess.run(train_step, feed_dict={x: batch[0], y_true: batch[1]})

Future for TensorBoard

未來TensorBoard,會在以下三個方面來做一些提升:

在TensorBoard上集成Tensorflow的調(diào)試

增加插件的支持

企業(yè)級TensorBoard的支持

總結(jié)

照例總結(jié)下,從上面不難看出TensorFlow在過去一年的時間里確實做了很多很有意思的工作,無論是在Reasearch還是Production上,包括各種有意思的工具,其中收獲較大的是利用TensorFlow來做超參的調(diào)節(jié)、還有Keras的新的支持、分布式的各種模型變量保存的優(yōu)化方法、分布式容災(zāi)、XLA的支持是的模型更快,這么幾天的時間花費感覺沒有浪費,但是因為個人知識有限,如上面有錯誤或者不周到 的地方,歡迎指出,敬請諒解。

感謝

十分感謝InfoQ的Tina Du對文章一些編輯工作,做了很多文字方面的總結(jié)

歡迎加入本站公開興趣群

商業(yè)智能與數(shù)據(jù)分析群

興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識

QQ群:81035754

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/4479.html

相關(guān)文章

  • 【GPU云主機(jī) UHost】產(chǎn)品簡介、產(chǎn)品優(yōu)勢、機(jī)型與性能和深度學(xué)習(xí)指南

    摘要:云主機(jī)產(chǎn)品簡介增強(qiáng)型云主機(jī)是基于成熟的云計算技術(shù),專享高性能硬件的云主機(jī)服務(wù)。目前提供采用采用和采用機(jī)型。支持多種操作系統(tǒng)增強(qiáng)型云主機(jī)支持多種操作系統(tǒng),如等,以適應(yīng)不同行業(yè)的專業(yè)軟件及建模需求。機(jī)型與性能型可選顆。GPU云主機(jī)UHost產(chǎn)品簡介GPU增強(qiáng)型云主機(jī)是基于UCloud成熟的云計算技術(shù),專享高性能GPU硬件的云主機(jī)服務(wù)。大幅提升圖形圖像處理和高性能計算能力,并具備彈性、低成本、易于...

    Tecode 評論0 收藏0
  • 深度學(xué)習(xí)

    摘要:深度學(xué)習(xí)在過去的幾年里取得了許多驚人的成果,均與息息相關(guān)。機(jī)器學(xué)習(xí)進(jìn)階筆記之一安裝與入門是基于進(jìn)行研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),被廣泛用于語音識別或圖像識別等多項機(jī)器深度學(xué)習(xí)領(lǐng)域。零基礎(chǔ)入門深度學(xué)習(xí)長短時記憶網(wǎng)絡(luò)。 多圖|入門必看:萬字長文帶你輕松了解LSTM全貌 作者 | Edwin Chen編譯 | AI100第一次接觸長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)時,我驚呆了。原來,LSTM是神...

    Vultr 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<