成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

谷歌的人工智能系統是現在的新熱點。當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,也翻譯作計算節點或運算),即程序員常說的op,閱讀TensorFlow官方文件時會經常遇到。進一步講,神經網絡就是一堆張量、以及操作張量的 op 的集合,它們共同構成了神經網絡圖(graph)。

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

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

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

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

為什么創建圖?

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

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

創建二進制計數器圖

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

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

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

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

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

然后,我們為輸入和輸出的神經元創建占位符(placeholders)。占位符是TensorFlow里一個操作,便于后續輸入實際的數值。這里X和y_是圖中的兩個張量,每一個都有相關聯的 placeholder 操作。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

訓練和使用二進制計數器

在完成創建圖之后,就可以開始訓練了。

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

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

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

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

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

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

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

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

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

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

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

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

TensorFlow上手要點都總結在這兒了,你還有理由偷懶嗎?
運行二進制計數器

下一步

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

責任編輯:未麗燕 來源: 姜泱
相關推薦

2010-03-22 09:33:51

Opera MiniIphone

2019-07-23 07:52:41

數據庫MySQL優化方法

2019-04-19 08:25:13

HBase基礎Google

2019-04-22 14:12:12

HBase集群Google

2009-04-25 10:40:47

2014-12-15 09:49:05

2015-12-16 09:34:53

蘋果swift編程

2024-05-31 14:11:37

?大模型多模態AI

2015-11-16 13:46:54

服務器云操作系統Mesos

2019-01-24 08:19:17

云服務多云云計算

2020-09-09 08:45:27

IOC容器高并發

2022-09-16 09:13:27

代碼偷懶方法

2013-08-26 09:44:43

iOS 7AppStoreiPhone越獄

2013-05-27 09:33:13

Windows 8.1

2021-11-01 08:00:00

Java異常處理開發

2015-06-09 13:45:14

2010-03-09 14:18:14

Linux安裝Orac

2021-04-10 15:34:09

LinuxLinux好處

2021-07-06 05:23:05

軟件限免游戲Steam

2021-02-28 13:28:25

Linux藝術設計操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费 | 91在线精品秘密一区二区 | 日韩精品一区二区三区在线播放 | 在线看片国产精品 | 亚洲欧美在线观看 | 一区二区三区久久久 | 午夜影院在线免费观看视频 | wwwxxx国产| 日韩一区二区成人 | 欧美日韩一二区 | 日韩在线观看一区 | 国产精品久久久久久久久久不蜜臀 | 免费黄色大片 | 国产精品久久久久久久久久久久午夜片 | 欧美a级成人淫片免费看 | 在线精品亚洲欧美日韩国产 | 婷婷成人在线 | 欧美成年黄网站色视频 | 国产成人久久精品一区二区三区 | 成人免费看黄网站在线观看 | 国产成人免费视频网站视频社区 | 免费中文字幕日韩欧美 | 久久精品网 | 97免费在线观看视频 | 欧美电影网 | 国产剧情一区二区三区 | 久久一区二区av | 日韩毛片在线观看 | 国产综合av | 中文字幕电影在线观看 | 国产精品日日夜夜 | 亚洲激情专区 | 欧美不卡一区二区三区 | 欧美区日韩区 | 欧美日韩成人影院 | 亚洲欧洲在线视频 | 欧美1级| 18gay男同69亚洲网站 | 成人3d动漫一区二区三区91 | 911网站大全在线观看 | 国产视频精品视频 |