TensorFlow礦機
『壹』 tensorflow裝好後裡面那麼多文件包,包中有包,好多函數藏得深,你怎麼處理的,運行就報沒函數
由於我之前已經安裝好了anaconda,可能導致終端的python調用的是anaconda路徑中的python,由此引發了一些後面的問題
我是按照tensorflow英文文檔中的按照方式,為了安裝最新的tensorflow版本,目前的中文文檔更新有點落後於官網,部分代碼有改動
我最初是選擇pip安裝方式,簡單便捷,原以為安裝完成以後就可以在終端直接使用,卻發現在運行代碼
import tensorflow as tf的時候提示沒有tensorflow模塊
在之後,我又選擇了Anaconda安裝方式,安裝過程一切順利,在終端創建source activate tensorflow中可以完美運行tensorflow。但是在spyder界面和終端直接運行python的情況下都無法導入tensorflow模塊
『貳』 tensorflow 跑不起來,是因為沒有指定cpu執行嗎
基本使用
使用 TensorFlow, 你必須明白 TensorFlow:
使用圖 (graph) 來表示計算任務。
在被稱之為 會話 (Session) 的上下文 (context) 中執行圖。
使用 tensor 表示數據。
通過 變數 (Variable) 維護狀態。
使用 feed 和 fetch 可以為任意的操作(arbitrary oper搜索ation) 賦值或者從其中獲取數據。
『叄』 在redhat 環境下裝了tensorflow-gpu 1.3.0 ,提示已經安裝成功,運行import tensorflow as tf 報錯
首先下載anaconda在此需要記住,安裝的是4.2版本,4.3的話,會有很多坑,問題無法解決,在這里可以去anaconda官網下載,如果覺得慢的話,可以考慮到清華的anaconda源裡面下載記住anaconda-4.2.1之後進行anaconda的安裝,一路點擊next就可以了,安裝完畢之後,在cmd中輸入python,就可以看到anaconda安裝成功之後用管理員身份運行cmd程序,這里是需要的,避免一些許可權的錯誤安裝pip,到網上去搜索pip的安裝包,解壓縮之後,到目錄下執行pythonsetup.pyinstall,完成安裝,pip版本最好是8.0.1以上的,最好是9.0之後進入到anaconda的安裝目錄中,cdC:\ProgramFiles\Anaconda3,然後開始安裝tensorflowcpu一鍵安裝pipinstall--upgrade--ignore-installedtensorflowgpu版本的pipinstall--upgrade--ignore-installedtensorflow-gpu一般cpu可以直接安裝6之後我們在python環境下輸入importtensorflowastf就可以了執行一些簡單命令了
『肆』 如何通過玩TensorFlow Playground來理解神經網路
單個神經元的數學機制很簡單,它所能做的只是將數據點分成兩類。而眾多神經元組成的深度神經網路能提取更多特徵,解決更復雜更抽象的問題。(之前相關報道:業界 | 想揭開深度學習隱藏層的神秘面紗?試試Tensor Flow的神經網路游樂場)源碼:https://github.com/tensorflow/playground
神經網路和深度學習近來已經變成了互聯網上的熱詞,你可能也想一探究竟。但是當很多人拿起教科書准備自學成才時,卻最後發現自己被數學模型和公式搞得暈頭轉向。反正我就是這樣的。
對於和我一樣的人來說,我們還有一種不需要太過艱深的數學知識就能理解神經網路的方法:TensorFlow Playground,這是一個用 JavaScript 寫的網頁應用,能讓你把玩在你的瀏覽器中運行的真實的神經網路,並且可以讓你點擊按鈕和調整參數,從而了解它是怎麼工作的。體驗地址:http://playground.tensorflow.org/
在這篇文章中,我會向你介紹如何使用 TensorFlow Playground ,因而你能夠理解神經網路背後的核心思想。然後你就能理解為什麼最近這么多人會變得對這項技術感到如此地興奮。
讓計算機解決問題
計算機編程需要程序員。人類通過一行行的代碼制定計算機執行的每一個步驟,從而指示計算機解決問題。但有了機器學習和神經網路,你就可以讓計算機自己去解決問題了。一個神經網路就是一個函數,能夠學會訓練數據集中的給定輸入所對應的預期輸出。
神經網路就是能夠從訓練數據集中學習的函數
比如,為了構建能夠識別貓的圖像的神經網路,你可以使用大量貓圖像樣本訓練網路。最終得到的網路就和一個函數一樣,其將貓圖像作為輸入,然後輸出「cat(貓)」標簽。或者更實用的情況是——你可以向其中輸入來自游戲伺服器的大量用戶活動日誌,然後輸出有較高轉化概率的用戶。
這是怎麼辦到的?讓我們來看一個簡單的分類問題。假設你有一個如下的數據集。其中每一個數據點都有兩個值:x1(橫坐標)和 x2(縱坐標)。這里有兩組數據點:橙色組和藍色組。
要區分一個數據點是橙色的還是藍色的,你該如何編寫代碼?也許你會像下面一樣任意畫一條對角線來分隔兩組數據點,定義一個閾值以確定每個數據點屬於哪一個組。
你的 IF 語句的條件應該看起來是這樣:
其中 b 是確定線的位置的閾值。通過分別為 x1 和 x2 賦予權重 w1 和 w2,你可以使你的代碼的復用性更強。
此外,如果你調整 w1 和 w2 的值,你可以按你喜歡的方式調整線的角度。你也可以調整 b 的值來移動線的位置。所以你可以重復使用這個條件來分類任何可以被一條直線分類的數據集。
但問題的關鍵是程序員必須為 w1、w2 和 b 找到合適的值——即所謂的參數值,然後指示計算機如何分類這些數據點。
一個神經元:將一個數據點分為兩類
現在,讓我們看看 TensorFlow Playground 背後的計算機是如何解決這個特定問題的。在 Playground 上,點擊左上角的「Play(播放)」按鈕。藍色和橙色數據點之間的線開始緩慢移動。點擊復位(reset)按鈕然後再點擊播放幾次,觀察有不同初始值的線是如何移動的。你看到的是計算機正在試圖找到權重和閾值的最佳組合,從而畫出兩組之間的直線。
TensorFlow Playground 上一個簡單的分類問題
TensorFlow Playground 使用了一個人工神經元進行這個分類。什麼是人工神經元?這是由人類大腦中生物神經元的行為所啟發的一種概念。
生物神經元之間的網路
對於生物神經網路的機制的詳細描述,可以參見維基網路「神經元」頁面:當神經元接收到來自其相連的神經元的電信號時,它會變得興奮(激活)。神經元之間的每個連接的強度不同。一些神經元之間的連接很強,足以激活其它神經元,而另一些連接則會抑制激活。你大腦中的數千億神經元及其連接一起構成了人類智能。
對生物神經元的研究導致了一種新的計算模式的誕生——人工神經網路。使用人工神經網路,我們可以使用簡單的數學方式模擬生物神經元的行為。為了解決上述的分類問題,你可以使用下面的簡單神經網路,它只具有一個神經元(即感知器(Perceptron))。
x1 和 x2 是輸入值,w1 和 w2 是權重——代表了輸入與神經元連接的強度。b 是所謂的偏置(bias),表示一個神經元是否可被輸入激活的閾值。這個單一的神經元可以通過下面的公式計算。
是的,這也就是前面提到的用一條直線分類數據集時所需的公式。而且實際上這也是一個神經元所能做的唯一事情:使用權重和偏置檢查輸入值,將一個數據點分到兩類中的一類。帶有兩個輸入時,一個神經元可以使用一條直線將一個數據點在一個二維空間中分成兩類。如果有三個輸入,一個神經元可以使用一個平面將一個三維空間分成兩部分,以此類推。這就是所謂的「使用一個超平面分割 n 維空間(dividing n-dimensional space with a hyperplane)」。
一個神經元可以將任何數據點分為兩類
使用單個神經元執行圖像識別
一個「超平面(hyperplane)」如何解決日常問題呢?舉個例子,假設你有大量如下的手寫文本圖像:
手寫文本的像素圖像
你可以訓練一個神經元將一組圖像分類為「數字 8 的圖像」和「其它」兩類。
你該怎麼做呢?首先,你需要准備數萬張用於訓練的樣本。假設單張圖像是 28×28 像素的灰度圖像,它可對應於一個 28×28=784 個數字的數組。假設給定 55,000 張樣本圖像,那就將得到一個帶有 784×55000 個數字的數組。
對於這 5.5 萬個樣本中的每一張樣本圖像,你都可以將 784 個數字輸入到一個神經元中,這些每個樣本都帶有一個訓練標簽——是否表示了「8」。
正如你在 Playground 演示中看到的那樣,該計算機會嘗試尋找權重和偏置的最優組合,進而分辨每張圖像是否是「8」。
在經過了 5.5 萬個樣本的訓練之後,該神經元會生成如下的一個權重集合,其中藍色代表正值,紅色代表負值。
就是這樣的。即使是這樣非常原始的單個神經元,你也可以在手寫文本圖像的識別上實現 90% 的准確度[1]。要識別 0-9 這 10 個數字,你只需要 10 個神經元就能達到 92% 的准確度。
再說一次,這個神經元所能做的只是將數據點分成兩類:「8」或「其它」。什麼才能算作是一個「數據點」?在這個案例中,每一張圖像包含 28×28=784 的數字。從數學的角度上說,你可以說每張圖像都代表了 784 維空間中的一個點。該神經元用一個超平面將這個 784 維空間分成了兩個部分,從而將每張圖像(每個數據點)分為了「8」或「其它」。(是的,我們幾乎不可能想像維度空間和超平面看起來是怎樣的。還是不要去想了。)
在上述例子中,我們所用的樣本數據是手寫文本的圖像,但你也可以使用神經網路分類其它許多類型的數據。比如,網路游戲提供商可以通過檢查玩家活動日誌來識別作弊的玩家;電子商務提供商可以通過網頁伺服器訪問日誌和交易歷史識別優質客戶。換句話說,你可以將任何可以轉換成數字表示的數據表示成 n 維空間中的數據點,然後讓神經元找到所需的超平面,看它是否能幫你有效地分類你的問題。
怎麼訓練神經網路?
如你所見,神經網路是用基礎數學實現的簡單機制。神經網路和傳統編程之間的唯一不同是:你讓計算機通過學習訓練數據集來確定參數(權重和偏置)。換句話說,我們的樣本中訓練出的權重模式不是由人類編程的。
在這篇文章中,我不會詳細地討論你可以如何使用反向傳播和梯度下降等演算法訓練參數。我只想說,訓練過程中的計算機會嘗試一點點增大或減小每個參數,看其能如何減少相比於訓練數據集的誤差,以望能找到最優的參數組合。
你可以將計算機看作一個學生或初級員工。開始的時候,計算機會犯很多錯,它需要一些時間才能找到解決真實世界問題(包括可能的未來問題)的實際方法並最小化誤差(即所謂的泛化(generalization))。
在其可以最小化誤差之前,一個神經網路需要訓練時間
我們可能會在未來的一篇文章中重新談到這一主題。至於現在,你只需要知道 TensorFlow 這樣的神經網路庫已經囊括了大部分訓練必需的數學知識,而不必過於擔心。
更多神經元,更多提取特徵
我們已經展示了單個神經元進行簡單分類的方式,但你可能也想知道如何使用單個神經元建立能夠識別數千張不同圖像、以及能與專業圍棋手對抗的網路。有一個原因可以解釋為什麼神經網路能變得比我們上面描述的更聰明。讓我們看一下來自 TensorFlow Playground 的另一個樣例。
這個數據集不能被單個神經元分類,因為兩組數據點不能被一條直線分開。這就是所謂的非線性分類問題。在現實世界中,非線性和復雜的數據集是無限的,比如上面這個,而問題是如何捕捉這種類型的復雜模式?
答案是在輸入值與輸出神經元之間增加一個隱含層(hidden layer )。
TensorFlow Playground 上的非線性分類問題
這里發生了什麼?如果你點擊隱含層中的每一個神經元,你就會看到它們每一個都在進行簡單的單條直線的分類:
第一個神經元檢查數據點是在左邊還是在右邊
第二個神經元檢查它是否在正右方
第三個檢查它是否在右下方
這三個結果被稱為數據的特徵。這些神經元的輸出表示相應特徵的強度。
最終,輸出層的神經元使用這些特徵對數據分類。如果你繪制一張包含這些特徵值的三維空間圖,這個最終神經元能用一個平面簡單的劃分該空間。這里有一個將原始數據轉換為特徵空間的例子。
一個隱層將輸入變換為特徵空間,使其可線性分類
在 Playground 的演示例子中,這樣的變換導致多種特徵對應一個三角形或矩形區域。如果你通過點擊「plus」按鈕加入更多神經元,你將看到輸出神經元能捕捉數據集中更多復雜的多邊形。
回到工作者的類比,你可以說這種變換是一個經驗豐富的專家在日常工作中提取見解。一個新職員會被來自郵件、手機、老闆、消費者等各方的任意信號所困惑,但高級職員在從這些輸入中提取關鍵信號卻很高效,並且能根據一些重要原則組織這些雜亂事項。
神經網路同樣如此,試圖提取數據集中最重要的特徵解決問題。這也是為何有時神經網路在處理一些復雜的任務上能夠相當聰明。
神經網路(看起來)似乎可以從隨機信號中提取見解
我們需要更深入:建立抽象的層次結構
一個單隱含層有更多的神經元,你就能捕捉更多的特徵。而且有更多隱層,意味著你能從數據集中提取更多復雜的構造。在下一例子中,你可以看到它是如何的強大。
分類此數據集你會編寫什麼樣的代碼?幾十個 IF 語句帶有大量的條件和閾值,每一個都會給定的數據點應該位於哪個小區域。我個人是不想這么做。
這個是機器學習和神經網路超過人類程序員表現的展示。
在 TensorFlow Playground 上的雙螺旋問題
很酷,不是嗎?你剛才看到的是計算機試圖建立深度神經網路的抽象層次結構( hierarchy of abstraction)。第一張隱層中的神經元正在進行同樣簡單的分類,然而第二、第三隱含層中的神經元正在從簡單特徵中組合出復雜特徵,並最終產出雙螺旋模式。
更多神經元 + 更深的網路 = 更復雜的抽象。這也是簡單的神經元如何變得更聰明,並在圖像識別、圍棋這些特定問題上表現如此之好的原因。
Inception:谷歌公開的一個圖像識別模型
一些公開的深度網路可視化樣例展示了它們進行訓練、建立識別模式的層級結構的方式——從簡單的邊緣和斑點,到目標的部分部位以及整體類別。
兩大挑戰:計算能力和訓練數據
在此文章中,我們看到了一些 TensorFolw Playground 演示解釋了神經網路的機制和能力。就像你看到的那樣,這一技術的基礎非常簡單。每一個神經元只將一個數據點分類成兩個類別中的一個。然而,通過有更多的神經元和深度層,一個神經網路能提取出訓練數據集中隱藏的見解和復雜模式,並且建立抽象的層級結構。
接下來的問題是,為什麼如今還不是每個人都在使用這一偉大的技術?這是因為神經網路還有兩大挑戰。第一個是訓練深度神經網路需要大量的算力。第二,它們需要大量的訓練數據集。一個強力的 GPU 伺服器可能要花費數天、甚至數周的時間,才能使用數百萬張圖像的數據集訓練出一個深度網路。
而且,為了得到最好的訓練結果,需要結合不同的網路設計與演算法,並進行大量的試錯。如今,一些研究者會使用幾十個 GPU 伺服器,甚至超級計算機來進行大規模分布式的訓練。
但在不久的將來,全面管理的分布式訓練與預測服務——比如谷歌 TensorFlow 雲機器學習平台——可能會解決這些問題,為大家提供成本合理的基於雲的 CPU 和 GPU,而且也可能會把大型的或深度的神經網路的能力開放給每一個人。
『伍』 tensorflow使用gpu 但是運行還是大量使用cpu訓練速度也沒有提升
安裝GPU版本的tensorflow就可以了pipinstall--upgrade還需要安裝GPU加速包,下載CUDA和cuDNN的安裝包了,注意版本號分別是CUDA8.0和cuDNN5.1。
如果都安裝成功,運行程序時會自動使用GPU計算
『陸』 tensorflow實現了哪些演算法
在這樣的數據流圖中,有四個主要的元素:
* 操作(operations)
* 張量(tensors)
* 變數(variables)
* 會話(sessions)
『柒』 如何用100美元和TensorFlow來造一個能「看」東西的機器人
要回答這個問題有一點難,不過我可以回答100美元等於多少人民幣元,根據今日北京時間10:29分更新的外匯牌價:1美元=6.8953人民幣元,100美元=689.53人民幣元,交易時以銀行櫃台成交價為准,!
『捌』 學習TensorFlow,Python 需要掌握到什麼程度才可以
如果目的只是『能寫能用』,目標是『復現實驗室模型』,對Python的需求確實不太高,但是白著啥都不會就上肯定不行,至少明白基礎語法和一些基本概念。
考慮到TF同樣能用在工程實踐中,能跑在集群上,能做超復雜超大型的模型,可能需要多人協作,那麼Python基礎越好自然就更好。
把代碼寫得規整漂亮清晰易修改易復用也很重要。
『玖』 python tensorflow包運行報錯,有哪位大神用過tensorflow,知道這個該怎麼改
要運行的文件名為 First_TensorFlow_Project.py,在存放該文件的文件夾中,有另一個命名為 string.py 的文件,而 string 和 Python 原生庫中的 string 重名。
當我在終端運行 First_TensorFlow_Project.py 文件之後,會自動生成一個 string.pyc 文件,只要有這個文件存在,系統就會報我在問題中提到的錯誤。
把 string.py 和 string.pyc 刪除或者重命名之後就可以正常運行了。