丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給姜泱
發(fā)送

0

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

本文作者: 姜泱 2017-05-03 17:33
導語:老少咸宜的 TensorFlow 基礎入門教程!

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

雷鋒網按:本文作者 Steven Dufresne,總結了新手學 TensorFlow 需要的核心知識點和實操內容,旨在鼓勵更多人借 TensorFlow 邁入深度學習殿堂 。作為基礎入門教程,該教程從 TensorFlow 原理簡介講到上手操作,對核心概念逐條解釋,非常適合基礎薄弱、苦無入門途徑的新手。雷鋒網 AI 研習社編譯。

Steven Dufresne:在90年代我開始寫神經網絡軟件。TensorFlow開源后,一直十分渴望用它搭建一些有趣的東西。 

谷歌的人工智能系統(tǒng)是現(xiàn)在的新熱點。當TensorFlow可以被安裝在樹莓派上,操作變得非常容易。在上面我很快就搭建了一個二進制神經網絡。這篇文章中,我將把經驗分享給大家,幫助其他想要嘗試、深入了解神經網絡的人更快上手。 

TensorFlow是什么?

引用TensorFlow官網的話,TensorFlow是一個“采用數據流圖進行數值計算的開源軟件庫”。其中“數據流圖”是什么意思?這是個很酷的東西。在正式回答之前,我們先談談一個簡單神經網絡的結構。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

神經網絡基礎

一個簡單神經網絡由輸入層(input units)、隱層(hidden units)、閾值(bias unit)、輸出層(output units)幾部分構成。輸入層負責接收數據。隱層之所以這么叫是因為從用戶的角度來看,它們是隱藏的。輸出層輸出我們獲得的結果。旁邊的閾值是用來控制隱含層和輸出層的值是否輸出(即超過閾值的神經元才能輸出)。兩兩不同神經元之間的連接是權重,只是一些數字,需要靠訓練獲得。

訓練神經網絡,就是為了給權重找到最佳的值,這讓神經網絡一步步變得“智能”。在下面這個例子中,輸入神經元的值被設置為二進制數字0,0,0。接下來TensorFlow會完成這之間的所有事情,而輸出神經元會神奇得包含數字0,0,1。即便你漏掉了,它也知道二進制中000下面一個數是001,001接下來是010,就這樣一直到111.一旦權重被設定了合適的值,它將知道如何去計數。 

在運行神經網絡中有一個步驟是將每一個權重乘以其對應的輸入神經元,然后將乘積結果保存在相應的隱藏神經元。

我們可以將這些神經元和權重看作成數列(array),在Python中也被稱為列表(list)。從數學的角度來看,它們都是矩陣。圖中我們只繪制出了其中一部分,這里將輸入層矩陣和權重矩陣相乘,得到五元素隱藏層矩陣(亦稱為列表或數列)。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

從矩陣到張量

在TensorFlow中,這些列表(lists)被稱為張量(tensors)。矩陣相乘被稱為操作(operation,也翻譯作計算節(jié)點或運算),即程序員常說的op,閱讀TensorFlow官方文件時會經常遇到。進一步講,神經網絡就是一堆張量、以及操作張量的 op 的集合,它們共同構成了神經網絡圖(graph)。

以下圖片取自《TensorBoard, a tool for visualizing the graph》這篇文章,用于檢測訓練前后的張量值變化。張量是圖中的連線,上面的數字代表張量的維度(dimensions)。連接張量的節(jié)點是各種操作(op),雙擊后可以看到更多的細節(jié),比如后面一張圖是雙擊后展現(xiàn)的第一層(layer 1)的細節(jié)。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

最下面的X,是占位符操作,向輸入張量賦值。沿著左邊的線向上是輸入張量(input tensor)。上面節(jié)點標著MatMul操作,使輸入張量(input tensor)和權重張量(weight tensor,導向MatMul操作的另一條線)矩陣相乘。 

所有這些只是為了更直觀的展示出圖、張量和操作是什么,讓大家更好的理解為什么TensorFlow被稱為是“采用數據流圖進行數值計算的開源軟件庫”。但是,我們?yōu)槭裁匆獎?chuàng)建這些圖呢? 

為什么創(chuàng)建圖?

當前,TensorFlow 只有 Python 的穩(wěn)定 API,Python 是一門解釋型語言。神經網絡需要大量的運算,大型神經網絡包含數千甚至數百萬的權重,通過解釋(interpret)每一步來計算的效率極低。

因此,我們通過創(chuàng)建一個由張量和 op 構成的圖,包括所有的數學運算甚至變量的初始值,來描述神經網絡的結構。只有在創(chuàng)建圖之后,才能加載到TensorFlow里的Session。這被稱為TensorFlow的“延遲執(zhí)行”(deferred execution)。 Session通過高效代碼來運行計算圖。不僅如此,許多運算,例如矩陣相乘,都可以在GPU上完成。此外,TensorFlow也支持多臺機器或者GPU同時運行。

創(chuàng)建二進制計數器圖

以下是創(chuàng)建二進制計數器神經網絡(binary counter neural network)的腳本,完整的代碼可以在我的 GitHub 網頁上找到。注意,在TensorBoard里還有其他的一些代碼保存在其中。

下面我們將從這些代碼開始創(chuàng)建張量和 op 組成的圖。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

首先導入 "tensorflow" 模塊,創(chuàng)建一個 session 隨后使用。同時,為了讓腳本更容易理解,我們也創(chuàng)建了一些變量,包含了網絡中的神經元個數。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

然后,我們?yōu)檩斎牒洼敵龅纳窠浽獎?chuàng)建占位符(placeholders)。占位符是TensorFlow里一個操作,便于后續(xù)輸入實際的數值。這里X和y_是圖中的兩個張量,每一個都有相關聯(lián)的 placeholder 操作。

你可能會覺得奇怪,為什么我們要將占位符shape定義為二維列表[None,NUM_INPUTS]和[None,NUM_OUTPUTS],第一個維度都是”None”?從整體來看,神經網絡有點像我們每次輸入一個值,訓練它生成一個特定輸出值。但更有效率的方式是,一次提供多個輸入\輸出對(pair),這就是 batch 。上面shape中的第一維,是每個 batch 中有幾組輸入/輸出對。創(chuàng)建一個 batch 之前我們并不知道里面有幾組。實際上,后續(xù)我們將使用同一個圖來進行訓練、測試以及實際使用,所以 batch 的大小不會每次都相同。因此,我們將第一維的大小設置為 Python 占位符對象 ”None“。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

接下來,我們創(chuàng)建神經網絡圖的第一層:將權重定義為W_fc1,閾值(或偏差)定義為b_fc1,隱層定義為h_fc1。這里”fc”意為“完全連接(fully connected)”的意思,因為權重把每一個輸入神經元和每一個隱藏神經元連接起來。

tf.truncated_normal 導致了一系列操作和張量,將會把所有權重賦值為標準化的隨機數字。

Variable 的操作會給出初始化的值,這里是隨機數字,在后面可以多次引用。一旦訓練完,也可以很方便的將神經網絡保存至文件中。

你可以看到我們用 matmul 操作來執(zhí)行矩陣乘法的位置。我們插入一個 add 操作來加入偏差權重(bias weights)。其中 relu 運算執(zhí)行的就是“激活函數”(activation function)。矩陣乘法和加法都是線性運算。神經網絡用線性運算能做的事非常少。激活方程提供了一些非線性。這里的relu激活函數,就是將所有小于0的值設置為0,其余值不變。不管你信不信,這為神經網絡能夠學習的東西打開了一扇全新的大門。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

神經網絡第二層中的權重和閾值與第一層設置的一樣,只是輸出層不同。我們再次進行矩陣相乘,這一回乘的是權重和隱層,隨后加入偏差權重(bias weights),激活函數被留到下一組代碼。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

與上面的relu類似,Sigmoid是另一個激活函數,也是非線性的。這里我使用sigmoid函數,一定程度上是因為它能使最終輸出值為一個0和1之間,對于二進制計數器而言是一個理想的選擇。在我們的例子中,為了表示二進制111,所有的輸出神經元都可以有一個很大的值。這和圖像分類不同,后者會希望僅僅用一個輸出單元來輸出一個很大的值。舉個例子,比如一張圖像里有長頸鹿,我們會希望代表長頸鹿的輸出單元輸出相當大的值。這種情況下,用softmax函數作為激活函數反倒更適合。

仔細看下前面的代碼,會發(fā)現(xiàn)似乎有些重復,我們插入了兩次sigmoid。實際是我們創(chuàng)建了兩次不同的、并行的輸出。其中cross_entropy張量將被用來訓練神經網絡。而 results 張量則是后續(xù)用來執(zhí)行訓練過的神經網絡,不管它被訓練出來作何目的。這是目前我能想到的最好的方法。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

最后一件事就是訓練(training)。也就是基于訓練數據調整所有的權重。記住,在這里我們仍然只是創(chuàng)建一個圖。真正的“訓練”發(fā)生在我們開始運行這個圖的時候。

運行過程中供選擇的優(yōu)化器很多,這里我選取了 tf.train.RMSPropOptimizer。因為就像sigmoid一樣,它比較適合所有輸出值都可能較大的情況。而針對分類的情形,例如圖像分類,用tf.train.GradientDescentOptimizer效果可能更好。

訓練和使用二進制計數器

在完成創(chuàng)建圖之后,就可以開始訓練了。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

首先,要準備一些訓練數據:包括輸入變量 inputvals  和目標變量 targetvals 。其中 inputvals 包含輸入值,后者的每一個都有對應的 targetvals 目標值。例如,inputvals[0]即[0, 0, 0] ,對應的輸出或目標值為targetvals[0] ,也就是 [0, 0, 1] 。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

do_training和save_trained都可以硬編碼,每次都可以進行更改,或者使用命令行參數進行設置。

首先使所有 Variable 操作對張量初始化;然后,將之前創(chuàng)建的圖從底部到 train_step執(zhí)行最多不超過 10001 遍;這是最后一個添加到圖中的東西。我們將 inputvals和targetvals通過RMSPropOptimizer導入train_step操作。這就是通過調整權重,在給定輸入值的情況下,讓輸出值不斷接近目標值的步驟。只要輸出值和目標值之間的誤差足夠小,小到某個能承受的范圍,這個循環(huán)就會停止。

如果你有成百上千的輸入/輸出組,你可以一次訓練一個子集,也就是前面提到的一批(batch)。但這里我們一共只有8組,所以每次都全放進去。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

我們也可以將訓練好的神經網絡保存在一個文件(file)中,下次就不用再訓練了。下次可以直接導入一個已經訓練過的神經網絡文件,文件中只包含進行過變量運算后的張量的值,而不包含整個圖的結構。所以即便是執(zhí)行已經訓練好的圖,我們仍然需要腳本來創(chuàng)建圖形。MetaGraphs可以進行文件保存和導入圖,但這里我們不這么做。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

請注意,我們是從圖形底部運行至結果張量(results tensor),在訓練網絡中不斷重復的創(chuàng)建結果。

我們輸入000,希望它返回一個接近001的值。然后將返回的值重復輸入再次執(zhí)行。這樣總共運行9次,保證從000數到111有足夠的次數,之后再次回到000。

以下就是成功訓練后的輸出結果。在循環(huán)中被訓練了200次(steps)。在實際中,訓練了10001次仍沒有有效降低訓練誤差的情況非常罕見。一旦訓練成功,訓練多少次并不重要。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

運行二進制計數器

下一步

前面說過,這里講的二進制計數神經網絡代碼可以在我的Github主頁上找到。你可以根據這些代碼開始學習,或者觀看TensorFlow官網上的其他入門教程。下一步,根據機器人識別物體上獲取的靈感,我想通過它做一些硬件方面的研究。

via hackaday,雷鋒網編譯

 “TensorFlow & 神經網絡算法高級應用班”要開課啦!

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

從初級到高級,理論+實戰(zhàn),一站式深度了解 TensorFlow!

本課程面向深度學習開發(fā)者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎實戰(zhàn)技巧開始,一步步教授學員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,并最終掌握一整套基于 TensorFlow 做深度學習開發(fā)的專業(yè)技能。

兩名授課老師佟達、白發(fā)川身為 ThoughtWorks 的資深技術專家,具有豐富的大數據平臺搭建、深度學習系統(tǒng)開發(fā)項目經驗。

時間:每周二、四晚 20:00-21:00

開課時長:總學時 20 小時,分 10 周完成,每周2次,每次 1 小時

線上授課地址:http://m.ozgbdpf.cn/special/custom/mooc04.html 


實戰(zhàn)特訓:遠場語音交互技術  

智能音箱這么火,聽聲智科技CTO教你深入解析AI設備語音交互關鍵技術!

課程鏈接:http://www.mooc.ai/course/80

加入AI慕課學院人工智能學習交流QQ群:624413030,與AI同行一起交流成長

相關文章:

教你從零開始在 TensorFlow 上搭建 RNN(完整代碼)!

推薦 | ThoughtWorks 大牛教你入門 Tensorflow

萬事開頭難!入門TensorFlow,這9個問題TF Boys 必須要搞清楚

雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?

分享:
相關文章
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經綁定,現(xiàn)在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說