tensorflow怎么用,tensorflow菜鳥教程
大家好,tensorflow怎么用相信很多的網(wǎng)友都不是很明白,包括tensorflow菜鳥教程也是一樣,不過沒有關系,接下來就來為大家分享關于tensorflow怎么用...
大家好,tensorflow怎么用相信很多的網(wǎng)友都不是很明白,包括tensorflow菜鳥教程也是一樣,不過沒有關系,接下來就來為大家分享關于tensorflow怎么用和tensorflow菜鳥教程的一些知識點,大家可以關注收藏,免得下次來找不到哦,下面我們開始吧!
如何學習tensorflow
tensorflow是目前非常流行的基于Python的機器學習框架,先要學一些python基礎,如果沒有學過python,可以先找一些python入門的教程來學習,了解一些基礎的語法,能編寫和運行簡單的python程序即可;
tensorflow的網(wǎng)上教程很多的,官方網(wǎng)站上就有免費教程:https://tensorflow.google.cn/resources/learn-ml
https://tensorflow.google.cn/tutorials/
如果您想找老師輔導您學習tensorflow,可以報名一些收費的tensorflow網(wǎng)絡課程來學習。
tensorflow哪個版本更新最好
tensorflow2.x版本最好
TensorFlow1和TensorFlow2.x之間有很多變化。第一個是Tensorflow.js.的發(fā)布。隨著Web應用程序越來越占主導地位,在瀏覽器上部署模型的需求大大增加。借助Tensorflow.js,你可以使用Node在瀏覽器中運行現(xiàn)有的python模型、重新訓練現(xiàn)有的模型,并使用Javascript完全構建和訓練模型(不需要python)。
Tensorflow2.x中的另一個版本是TensorflowLite,一個輕量級庫,用于在移動和嵌入式設備上部署模型。這是因為移動和Web應用程序是兩種最主要的應用程序類型。使用TensorflowLite,你可以簡單地將現(xiàn)有模型轉換為「compressedflatbuffer」,然后將buffer加載到移動設備或任何其他嵌入式設備中。這期間發(fā)生的主要優(yōu)化過程是將32位浮點值轉換成8位,這更適合于嵌入式設備(更少的內存使用)。
怎樣用C++寫出你自己的TensorFlow
在我們開始講解前,可以先看看最終成型的代碼:
1.分支與特征后端
2.僅支持標量的分支
這個工程是我與MinhLe一起完成的。
為什么?如果你修習的是計算機科學(CS)的人的話,你可能聽說過這個短語「不要自己動手____」幾千次了。它包含了加密,標準庫,解析器等等。我想到現(xiàn)在為止,它也應該包含機器學習庫(MLlibrary)了。
不管現(xiàn)實是怎么樣的,這個震撼的課程都值得我們去學習。人們現(xiàn)在把TensorFlow和類似的庫當作理所當然了。他們把它看作黑盒子并讓他運行起來,但是并沒有多少人知道在這背后的運行原理。這只是一個非凸(Non-convex)的優(yōu)化問題!請停止對代碼無意義的胡搞——僅僅只是為了讓代碼看上去像是正確的。
TensorFlow
在TensorFlow的代碼里,有一個重要的組件,允許你將操作串在一起,形成一個稱為「圖形運算符」(此處英文錯誤?正確英文應為GraphOperator)的東西。這個操作圖是一個有向圖G=(V,E)G=(V,E),在某些節(jié)點處u1,u2,…,un,v∈Vu1,u2,…,un,v∈V,和e1,e2,…,en∈E,ei=(ui,v)e1,e2,…,en∈E,ei=(ui,v)。我們知道,存在某種操作圖從u1,…,unu1,…,un映射到vv.
舉個例子,如果我們有x+y=z,那么(x,z),(y,z)∈E(x,z),(y,z)∈E.
這對于評估算術表達式非常有用,我們能夠在操作圖的匯點下找到結果。匯點是類似v∈V,?e=(v,u)v∈V,?e=(v,u)這樣的頂點。從另一方面來說,這些頂點從自身到其他頂點并沒有定向邊界。同樣的,輸入源是v∈V,?e=(u,v)v∈V,?e=(u,v).
對于我們來說,我們總是把值放在輸入源上,而值也將傳播到匯點上。
反向模式分化如果你覺得我的解釋不正確,可以參考下這些幻燈片的說明。
差異化是Tensorflow中許多模型的核心需求,因為我們需要它梯度下降的運行。每一個從高中畢業(yè)的人都應該知道差異化的意思。如果是基于基礎函數(shù)組成的復雜函數(shù),則只需要求出函數(shù)的導數(shù),然后做鏈式法則。
在5分鐘內倒轉模式
所以現(xiàn)在請記住我們運行操作符時用的有向無環(huán)結構(DAG=DirectedAcyclicGraph=有向無環(huán)圖),還有上一個例子用到的鏈式法則。做出評估,我們能看到像這樣的
x->h->g->f
作為一個圖表,在f它能夠給予我們答案。然而,我們也可以反過來:
dx<-dh<-dg<-df
這樣它看起來就像鏈式法則了!我們需要把導數(shù)相乘到最終結果的路徑上。
這里是一個操作符的例子:
所以這將衰減為一個圖的遍歷問題。有誰感覺到這是個拓撲排序和深度優(yōu)先搜索/寬度優(yōu)先搜索?
是的,所以為了在雙方面都支持拓撲排序,我們需要包含一套父組一套子組,而匯點是另一個方向的來源。反之亦然。
執(zhí)行在學校開學前,MinhLe和我開始設計這個工程。我們決定使用后端的特征庫進行線性代數(shù)的運算。他們有一個叫做MatrixXd的矩陣類。我們在這兒使用那個東西。
classvar{//Forwarddeclarationstructimpl;public://Forinitializationofnewvarsbyptrvar(std::shared_ptr<impl>);var(double);var(constMatrixXd&);var(op_type,conststd::vector<var>&);...//Access/ModifythecurrentnodevalueMatrixXdgetValue()const;voidsetValue(constMatrixXd&);op_typegetOp()const;voidsetOp(op_type);//Accessinternals(nomodify)std::vector<var>&getChildren()const;std::vector<var>getParents()const;...private://PImplidiomrequiresforwarddeclarationoftheclass:std::shared_ptr<impl>pimpl;};structvar::impl{public:impl(constMatrixXd&);impl(op_type,conststd::vector<var>&);MatrixXdval;op_typeop;std::vector<var>children;std::vector<std::weak_ptr<impl>>parents;};
在這兒,我們曾使用過一個叫「pImpl」的習語,意識是「執(zhí)行的指針」。它對很多東西都很好,比如接口的解耦實現(xiàn),以及當我們在堆棧上有一個本地接口時,允許我們實例化堆上的東西。一些「pImpl」的副作用是微弱的減慢運行時間,但是編譯時間縮短了很多。這允許我們通過多個函數(shù)調用/返回來保持數(shù)據(jù)結構的持久性。像這樣的樹形數(shù)據(jù)結構應該是持久的。
我們有一些枚舉來告訴我們目前正在進行哪些操作:
enumclassop_type{plus,minus,multiply,divide,exponent,log,polynomial,dot,...none//nooperators.leaf.};
執(zhí)行此樹的評估的實際類稱為expression:
classexpression{public:expression(var);...//Recursivelyevaluatesthetree.doublepropagate();...//Computesthederivativefortheentiregraph.//Performsatop-downevaluationofthetree.voidbackpropagate(std::unordered_map<var,double>&leaves);...private:varroot;};
在回溯里,我們有一些做成類似這樣的代碼:
backpropagate(node,dprev):
derivative=differentiate(node)*dprev
forchildinnode.children:
backpropagate(child,derivative)
這幾乎是在做一個深度優(yōu)先搜索;你看到了吧?
為什么是C++?
在實際過程中,C++可能不是合適的語言來做這些事兒。我們可以在像「Oaml」這樣的函數(shù)式語言中花費更少的時間來開發(fā)?,F(xiàn)在我明白為什么「Scala」被用于機器學習中,主要就是因為「Spark」
然而,這很明顯有利于C++。
Eigen(庫名)
舉例來說,我們可以直接使用一個叫「Eigen」的TensorFlow的線性代數(shù)庫。這是一個不假思索就被人用爛了的線性代數(shù)庫。有一種類似于我們的表達式樹的味道,我們構建表達式,它只會在我們真正需要的時候進行評估。然而,對于「Eigen」來說,他們在編譯的時間內就決定使用什么模版,這意味著運行的時間減少了。我對寫出「Eigen」的人抱有很大的敬意,因為查看模版的錯誤幾乎讓我眼瞎!
他們的代碼看起來類似這樣的:
MatrixA(...),B(...);autolazy_multiply=A.dot(B);typeid(lazy_multiply).name();//theclassnameissomethinglikeDot_Matrix_Matrix.Matrix(lazy_multiply);//functional-stylecastingforcesevaluationofthismatrix.
這個特征庫非常的強大,這就是為什么它是TensortFlow使用這些代碼作為主要后端之一的原因。這意味著除了這個慢吞吞的評估技術之外還有其他的優(yōu)化。
運算符重載
在Java中開發(fā)這個庫很不錯——因為沒有shared_ptrs,unique_ptrs,weak_ptrs;我們得到了一個真實的,有用的圖形計算器(GC=GraphingCalculator)。這大大節(jié)省了開發(fā)時間,更不必說更快的執(zhí)行速度。然而,Java不允許操作符重載,因此它們不能這樣:
//These3linescodeupanentireneuralnetwork!varsigm1=1/(1+exp(-1*dot(X,w1)));varsigm2=1/(1+exp(-1*dot(sigm1,w2)));varloss=sum(-1*(y*log(sigm2)+(1-y)*log(1-sigm2)));
順便說一下,上面是實際的代碼。是不是非常的漂亮?我想說的是對于TensorFlow里面,這比使用Python封裝來的更優(yōu)美!這只是讓你知道,它們也是矩陣而已。
在Java中,有一連串的add(),divide()等等是非常難看的。更重要的是,這將讓用戶更多的關注在「PEMDAS」上,而C++的操作符則有非常好的表現(xiàn)。
特性,而不是一連串的故障
在這個庫中,有一些東西是可以指定的,它沒有明確的應用程序編程接口(API=ApplicationProgrammingInterface),或者有但我知道。舉例子,實際上,如果我們只想訓練一個特定的權重子集,我們只可以回溯到我們感興趣的特定來源。這對于卷積神經(jīng)網(wǎng)絡的轉移學習非常有用,因為很多時候,像VGG19這樣的大網(wǎng)絡被斬斷,會附加了一些額外的層,根據(jù)新的域名樣本來訓練權重。
基準
在Python的TensorFlow庫中,對虹膜數(shù)據(jù)集上的10000個「Epochs」進行訓練以進行分類,并使用相同的超參數(shù),我們有:
1.TensorFlow的神經(jīng)網(wǎng)絡:23812.5ms
2.「Scikit」的神經(jīng)網(wǎng)絡:22412.2ms
3.「Autodiff」的神經(jīng)網(wǎng)絡,迭代,優(yōu)化:25397.2ms
4.「Autodiff」的神經(jīng)網(wǎng)絡,迭代,無優(yōu)化:29052.4ms
5.「Autodiff」的神經(jīng)網(wǎng)絡,帶有遞歸,無優(yōu)化:28121.5ms
令人驚訝的是,Scikit是所有這些中最快的。這可能是因為我們沒有做龐大的矩陣乘法。也可能是TensorFlow需要額外的編譯步驟,如變量初始化等等?;蛘撸苍S我們不得不在python中運行循環(huán),而不是在C中(Python循環(huán)真的非常糟糕?。┪覍ψ约阂膊皇呛茏孕?。我完全意識到,這絕不是一種全面的基準測試,因為在特定的情況下,它只適用于單個數(shù)據(jù)點。然而,庫的表現(xiàn)并不能代表行為狀態(tài),因為我們不需要回滾我們自己的TensorFlow。
如何用TensorFlow實現(xiàn)GAN
基本使用使用TensorFlow,必須明白TensorFlow:使用圖(graph)表示計算任務.稱(Session)文(context)執(zhí)行圖.使用tensor表示數(shù)據(jù).通變量(Variable)維護狀態(tài).使用feedfetch任意操
tensorflow如何使用GPU來加速訓練
Tensorflow支持GPU,而且默認情況下,在操作同時支持GPU和CPU的情況下,會優(yōu)先使用GPU。所以Tensorflow的GPU加速訓練是開箱即用的,唯一需要注意的是安裝的時候不要裝錯了版本。
如何安裝正確版本首先,確保你的硬件沒問題。一般來說,不是太老或太低端的N卡基本上都沒問題。具體支持的硬件可以查看Nvidia的文檔(https://developer.nvidia.com/cuda-gpus),根據(jù)你的顯卡所屬的系列,查看是否支持(需要支持CUDA3.5以上,CUDA3.0以上,但小于3.5的話,需要通過源碼編譯安裝Tensorflow)。
(Nvidia網(wǎng)站截屏)
其次,確保你的軟件依賴沒問題:
顯卡驅動CUDAToolkit9.0cuDNNSDKv7libcupti-devNVIDIATensorRT3.0(可選)然后,就是安裝TensorFlow了。
注意,通過`pipinstalltensorflow`安裝的是CPU版本!你需要使用`pipinstalltensorflow-gpu`!pip3同理。相應地,如果你選擇通過docker安裝,也別忘了加上-gpu后綴,比如`nvidia-dockerrun-ittensorflow/tensorflow:latest-gpubash`。
現(xiàn)在對TensorFlow很感興趣很想學,想全面初步了解一下,有相關文章嗎
人工智能無疑是當今科技屆的熱點領域,各大公司也在大力的投入。深度學習作為其熱門技術,期間也產生了各種各樣的深度學習智能框架。比如TensorFlow,Caffe,CNTK,Theano等等,其中TensorFlow毋庸置疑的成為了最熱的熱點。那么對于非專業(yè)研究者的開發(fā)人員甚至非開發(fā)人員,我們如何入門呢?接下來小編為大家整理了一些深度學習TensorFlow的入門資源。(主要是一些長期教程)
官網(wǎng)https://www.tensorflow.org/
官網(wǎng)無論什么都是入門必看的重點。官網(wǎng)介紹了,如何安裝使用TensorFlow,已經(jīng)TensorFlow的API文檔。里面還包含TensorFlow主要功能的詳細指南。這里就不過多的介紹了
Kerashttp://keras-cn.readthedocs.io/en/latest/
Keras是一個高層神經(jīng)網(wǎng)絡API,Keras由純Python編寫而成并基Tensorflow、Theano以及CNTK后端。Keras為支持快速實驗而生,能夠把你的idea迅速轉換為結果,如果你有如下需求,請選擇Keras:
簡易和快速的原型設計(keras具有高度模塊化,極簡,和可擴充特性)
支持CNN和RNN,或二者的結合
無縫CPU和GPU切換
為什么我會推薦Keras呢,因為從TensorFlow1.0開始,官方已經(jīng)正式在TF中加入了Keras,同時,他的便捷性和簡單性也值得使用。
谷歌機器學習速成課程https://developers.google.com/machine-learning/crash-course/
這是谷歌推出的機器學習熱愛者的自學指南,包含一系列視頻講座課程、實際案例分析和實踐練習??梢栽诳匆曨l后,進行一些檢驗,也包含一些代碼的訓練。是一套不存的視頻課程,而且全面支持中文(PS:機器學習生成的中文口音,怪怪的)
Udacity優(yōu)達學城https://cn.udacity.com/course/deep-learning--ud730
谷歌在Udacity上的深度學習課程,在這里你將透徹理解深度學習,教授你如何訓練和優(yōu)化基本神經(jīng)網(wǎng)絡、卷積神經(jīng)網(wǎng)絡和長期神經(jīng)網(wǎng)絡。解決學習一系列曾經(jīng)以為非常具有挑戰(zhàn)性的新問題,并在你用深度學習方法輕松解決這些問題的過程中更好地了解人工智能的復雜屬性??傊且惶缀懿诲e教學視頻,包含課后習題。這個教學項目目前是免費的。
莫煩Pythonhttps://morvanzhou.github.io/
我在最早接觸Python和深度學習就是在這里,一個喜歡學到什么就分享什么的人,分享過很多python,機器學習的知識。非常不錯的教學視頻,重點是都是中文的。
廖雪峰https://www.liaoxuefeng.com/
小白的Python新手教程,具有如下特點:中文,免費,零起點,完整示例,基于最新的Python3版本。一個非常棒的Python學習網(wǎng)站,TensorFlow最適合的語言自然是Python了,值得學習。
Stanford的CS20SI課程,專門針對TensorFlow的課程https://web.stanford.edu/class/cs20si/
斯坦福大學的TensorFlow學習課程,英文的所有一定難度。課程將涵蓋Tensorflow的基本原理和用法。旨在幫助學生理解TensorFlow的圖形計算模型,探索其提供的功能,并學習如何構建和構建最適合深度學習項目的模型。通過課程,學生將使用TensorFlow構建不同復雜度的模型,從簡單的線性/邏輯回歸到卷積神經(jīng)網(wǎng)絡和遞歸神經(jīng)網(wǎng)絡,以解決詞嵌入,翻譯,光學字符識別,強化學習等任務。學生還將學習最佳實踐來構建模型并管理研究實驗。
重點!網(wǎng)紅SirajRavalhttps://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A
這是我最喜歡的一個頻道,SirajRaval已經(jīng)成為了一位網(wǎng)紅,天成的程序員表演家,技術達人。他分享了大量的機器學習視頻,風趣而幽默。而且每個視頻下都配了他的Github倉庫,里面有他寫好的代碼。他的視頻風格讓人印象非常深刻。是一個很不錯的學習頻道。
上述只是我列的一些幫助我們入門的教程,是非常入門的。更適合像我們這些沒有太深數(shù)學基礎的程序員和非程序員。以后還會給大家發(fā)一些深度一些的資源,歡迎大家持續(xù)關注。
OK,本文到此結束,希望對大家有所幫助。
本文鏈接:http://xinin56.com/ruanjian/1246.html