DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略
DL框架之Tensorflow:深度學習框架Tensorflow的簡介、安裝、使用方法之詳細攻略
?
目錄
Tensorflow的簡介
1、描述
2、TensorFlow的六大特征
3、了解Tensorflow
4、TensorBoard:可視化學習
Tensorflow的安裝
TensorFlow基礎知識架構
1、基礎知識架構
2、計算圖與會話
2、相關概念
TensorFlow的使用方法
1、基礎函數
2、輸出tensorflow的版本號
案例應用
1、使用常量和占位符進行計算
2、輸出w、b和計算兩個數值相乘
3、ML之LoR:利用LoR算法(tensorflow)對mnist數據集實現手寫數字識別
?
?
Tensorflow的簡介
? ? ? ?TensorFlow是一個基于數據流編程(dataflow programming)的符號數學系統,被廣泛應用于各類機器學習(machine learning)算法的編程實現,其前身是谷歌的神經網絡算法庫DistBelief??。
? ? ? ?TensorFlow 最初由Google大腦小組(隸屬于Google機器智能研究機構)的研究員和工程師們開發出來,用于機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用于其他計算領域。TensorFlow由谷歌人工智能團隊谷歌大腦(Google Brain)開發和維護,擁有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在內的多個項目以及各類應用程序接口(Application Programming Interface, API)。自2015年11月9日起,TensorFlow依據阿帕奇授權協議(Apache 2.0 open source license)開放源代碼。
? ? ? ?2015年11月9日,Goggle宣布對Tensorflow開源。一時間Tensorflow在CitHub上面的下載量躍升至全站第2位,可見全世界興趣愛好者對這款開源軟件的熱情。作者曾在前言中說過,現如今許多知名的IT企業,Google、Facebook、Microsoft、Apple甚至國內的百度,無不在機器學習研究領域給予非常大的資金和人力的投人;但是,鮮有將內部使用的平臺公之于眾的。
? ? 許多人開始以為Tensorflow只是一個用于深入學習研究的系統,其實不然。應該說,這是一個完整的編碼框架。就如同我們按照Python編程語法設計程序一樣,Tensorflow內部也有自己所定義的常量、變量、數據操作等要素。不同的是,Tensorflow使用圖(Graph)來表示計算任務,并使用會話(Session)來執行圖。
? ? ? ?TensorFlow是一個采用數據流圖(data flow graphs),用于數值計算的開源軟件庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。Tensorflow擁有多層級結構,可部署于各類服務器、PC終端和網頁并支持GPU和TPU高性能數值計算,被廣泛應用于谷歌內部的產品開發和各領域的科學研究。
?
參考文章
Tensorflow英文官網
Tensorflow中文社區
Tensorflow官方教程
Tensorflow新手入門
Tensorflow中文文檔
?
1、描述
? ? ? ?2015年10月05日,谷歌為TensorFlow提交了注冊商標申請(登記編號86778464),并這樣描述它:
- (1)、用以編寫程序的計算機軟件;
- (2)、計算機軟件開發工具;
- (3)、可應用于人工智能、深度學習、高性能計算、分布式計算、虛擬化和機器學習這些領域;
- (4)、軟件庫可應用于通用目的的計算、數據收集的操作、數據變換、輸入輸出、通信、圖像顯示、人工智能等領域的建模和測試;
- (5)、軟件可用作應用于人工智能等領域的應用程序接口(API)。
?
2、TensorFlow的六大特征
- 高度的靈活性:TensorFlow 不是一個嚴格的“神經網絡”庫。只要你可以將你的計算表示為一個數據流圖,你就可以使用Tensorflow。你來構建圖,描寫驅動計算的內部循環。我們提供了有用的工具來幫助你組裝“子圖”(常用于神經網絡),當然用戶也可以自己在Tensorflow基礎上寫自己的“上層庫”。定義順手好用的新復合操作和寫一個python函數一樣容易,而且也不用擔心性能損耗。當然萬一你發現找不到想要的底層數據操作,你也可以自己寫一點c++代碼來豐富底層的操作。
- 真正的可移植性(Portability):Tensorflow 在CPU和GPU上運行,比如說可以運行在臺式機、服務器、手機移動設備等等。想要在沒有特殊硬件的前提下,在你的筆記本上跑一下機器學習的新想法?Tensorflow可以辦到這點。準備將你的訓練模型在多個CPU上規?;\算,又不想修改代碼?Tensorflow可以辦到這點。想要將你的訓練好的模型作為產品的一部分用到手機app里?Tensorflow可以辦到這點。你改變主意了,想要將你的模型作為云端服務運行在自己的服務器上,或者運行在Docker容器里?Tensorfow也能辦到。Tensorflow就是這么拽 :)
- 將科研和產品聯系在一起:過去如果要將科研中的機器學習想法用到產品中,需要大量的代碼重寫工作。那樣的日子一去不復返了!在Google,科學家用Tensorflow嘗試新的算法,產品團隊則用Tensorflow來訓練和使用計算模型,并直接提供給在線用戶。使用Tensorflow可以讓應用型研究者將想法迅速運用到產品中,也可以讓學術性研究者更直接地彼此分享代碼,從而提高科研產出率。
- 自動求微分:基于梯度的機器學習算法會受益于Tensorflow自動求微分的能力。作為Tensorflow用戶,你只需要定義預測模型的結構,將這個結構和目標函數(objective function)結合在一起,并添加數據,Tensorflow將自動為你計算相關的微分導數。計算某個變量相對于其他變量的導數僅僅是通過擴展你的圖來完成的,所以你能一直清楚看到究竟在發生什么。
- 多語言支持:Tensorflow 有一個合理的c++使用界面,也有一個易用的python使用界面來構建和執行你的graphs。你可以直接寫python/c++程序,也可以用交互式的ipython界面來用Tensorflow嘗試些想法,它可以幫你將筆記、代碼、可視化等有條理地歸置好。當然這僅僅是個起點——我們希望能鼓勵你創造自己最喜歡的語言界面,比如Go,Java,Lua,Javascript,或者是R。
- 性能最優化:比如說你又一個32個CPU內核、4個GPU顯卡的工作站,想要將你工作站的計算潛能全發揮出來?由于Tensorflow 給予了線程、隊列、異步操作等以最佳的支持,Tensorflow 讓你可以將你手邊硬件的計算潛能全部發揮出來。你可以自由地將Tensorflow圖中的計算元素分配到不同設備上,Tensorflow可以幫你管理好這些不同副本。
?
3、了解Tensorflow
? ? ?2017年谷歌開發者大會歐洲站上,谷歌研究院工程師Andrew Gasparovic所做演講。他用深入淺出、妙趣橫生的方式,給大家分享了TensorFlow的發展情況與最新成果。
? ? ? TensorFlow能夠讓你直接解決各種機器學習任務。目標就是在一般情況下,無論你遇到什么問題,TensorFlow都可以在一定程度上提供API的支持??偟膩碚fTensorFlow就是為了快而設計的,所以它針對你實際使用的硬件和平臺做了優化。其中在機器學習框架方面,TensorFlow的真正獨特之處在于,能夠在5行或者10行代碼中構建模型。然后應用這個模型,進行擴展做出產品。因此,你能夠在幾十甚至幾百個機器的簇上進行訓練。從而用該模型進行非常低的延遲預測。
參考文章:谷歌大神帶你十分鐘看懂TensorFlow
?
4、TensorBoard:可視化學習
參考文章:TF之Tensorboard:Tensorflow之Tensorboard可視化簡介、入門、使用方法之詳細攻略
?
?
Tensorflow的安裝
Anaconda之tensorflow:深度學習之Anaconda下安裝tensorflow正確運行之史上最強攻略
Py之TF/Cuda/Cudnn:Win10下安裝深度學習框架Tensorflow+Cuda+Cudnn最簡單最快捷最詳細攻略
TF學習——TensorFlow:深度學習框架TensorFlow & TensorFlow-GPU的簡介、安裝詳細攻略
?
TensorFlow基礎知識架構
1、基礎知識架構
2、計算圖與會話
1、計算圖方法
基本上所有的Tensorflow代碼都包含兩個重要部分:
- 構建計算圖(使用tf.Graph)
- 運行會話(使用tf.Session),執行圖中的運算
2、計算圖由兩種類型的對象組成
(1)、操作(簡稱“op”):圖的節點。操作描述了消耗和生成張量的計算。
(2)、張量:圖的邊。它們代表將流經圖的值。大多數TensorFlow 函數會返回tf.Tensors。
重要提示:tf.Tensors 不具有值,它們只是計算圖中元素的手柄。
Edges are N-dimensional arrays:Tensors
with tensors? 保留tensors
with state? 保留狀態
3、圖和會話
- TensorFlow 使用數據流圖將計算表示為獨立的指令之間的依賴關系。
- 這可生成低級別的編程模型,在該模型中,你首先定義數據流圖,然后創建TensorFlow 會話,以便在一組本地和遠程設備上運行圖的各個部分。
- 較高階的API(例如tf.estimator.Estimator 和Keras)會向最終用戶隱去圖和會話的細節內容。
?
2、相關概念
1、張量(tensor)
? ? ?TensorFlow 中的核心數據單位是張量(tensor)。一個張量由一組形成陣列(任意維數)的原始值組成。張量的階(rank)是它的維數,而它的形狀(shape)是一個整數元組,指定了陣列每個維度的長度。以下是張量值的一些示例:
3. # a rank 0 tensor; a scalar with shape [], [1., 2., 3.] # a rank 1 tensor; a vector with shape [3] [[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3] [[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]? ? ? TensorFlow 使用numpy數組來表示張量值。
? ? ??tf.Tensor 具有以下屬性:
- 數據類型(例如float32、int32 或string)
- 形狀
? ? ? 張量中的每個元素都具有相同的數據類型,且該數據類型一定是已知的。形狀,即張量的維數和每個維度的大小,可能只有部分已知。如果其輸入的形狀也完全已知,則大多數操作會生成形狀完全已知的張量,但在某些情況下,只能在執行圖時獲得張量的形狀。
(1)、階(rank)和形狀(shape)
? ? ? tf.Tensor 對象的階是它本身的維數。階的同義詞包括:秩、等級或n 維。請注意,TensorFlow 中的階與數學中矩陣的階并不是同一個概念。如下表所示,TensorFlow 中的每個階都對應一個不同的數學實例:
? ? ?張量的形狀是每個維度中元素的數量。TensorFlow 在圖的構建過程中自動推理形狀。這些推理的形狀可能具有已知或未知的階。如果階已知,則每個維度的大小可能已知或未知。TensorFlow 文件編制中通過三種符號約定來描述張量維度:階,形狀和維數。下表闡述了三者如何相互關聯:
?
?
TensorFlow的使用方法
TF學習:Tensorflow基礎案例、經典案例集合——基于python編程代碼的實現
1、基礎函數
sess.run() ?
#當我們構建完圖后,需要在一個會話中啟動圖,啟動的第一步是創建一個Session對象。 ?為了取回(Fetch)操作的輸出內容, 可以在使用 Session 對象的 run()調用執行圖時,傳入一些 tensor, 這些 tensor 會幫助你取回結果。那么調用sess.run()的時候,ensorflow并沒有計算整個圖,只是計算了與想要fetch 的值相關的部分。
占位符和 feed_dict ?:占位符并沒有初始值,它只會分配必要的內存。在會話中,占位符可以使用 feed_dict 饋送數據。 ?feed_dict 是一個字典,在字典中需要給出每一個用到的占位符的取值。在訓練神經網絡時需要每次提供一個批量的訓練樣本,如果每次迭代選取的數據要通過常量表示,那么 TensorFlow 的計算圖會非常大。因為每增加一個常量,TensorFlow 都會在計算圖中增加一個結點。所以說擁有幾百萬次迭代的神經網絡會擁有極其龐大的計算圖,而占位符卻可以解決這一點,它只會擁有占位符這一個結點。
2、輸出tensorflow的版本號
import tensorflow as tf print('輸出tensorflow的版本:',tf.__version__)?
案例應用
DL框架之Tensorflow:Tensorflow中常用函數的簡介、使用方法之詳細攻略
1、使用常量和占位符進行計算
#使用常量和占位符進行計算:其中 y_1 的計算過程使用占位符,而 y_2 的計算過程使用常量 w1=tf. Variable (tf.random_normal([ 1 , 2 ],stddev= 1 ,seed= 1 )) #因為需要重復輸入x,而每建一個x就會生成一個結點,計算圖的效率會低。所以使用占位符 x=tf.placeholder(tf.float32,shape=( 1 , 2 )) x1=tf.constant([[ 0.7 , 0.9 ]]) a=x+w1 b=x1+w1 sess=tf. Session () sess.run(tf.global_variables_initializer()) #運行y時將占位符填上,feed_dict為字典,變量名不可變 y_1=sess.run(a,feed_dict={x:[[ 0.7 , 0.9 ]]}) y_2=sess.run(b) print (y_1) print (y_2) sess.close?
2、輸出w、b和計算兩個數值相乘
import tensorflow as tf import numpy as npW = tf.Variable(np.arange(6).reshape((2, 3)), dtype=tf.float32, name="weights") b = tf.Variable(np.arange(3).reshape((1, 3)), dtype=tf.float32, name="biases")saver = tf.train.Saver() with tf.Session() as sess: saver.restore(sess, "niu/save_net.ckpt")print("weights:", sess.run(W))print("biases:", sess.run(b)) import tensorflow as tf#構建一個計算圖 a=tf.constant([1.0, 2.0]) b=tf.constant([3.0, 4.0]) c=a*b #T1、傳統的方法,先構建再釋放 sess=tf.Session() #構建一個Session print(sess.run(c)) #把計算圖放到session里,并運行得到結果 sess.close() #關閉session釋放資源#T2、with語句的方法,先構建再釋放 with tf.Session() as sess:print(sess.run(c)) #把計算圖放到session里,并運行得到結果?
3、ML之LoR:利用LoR算法(tensorflow)對mnist數據集實現手寫數字識別
import tensorflow as tf import numpy as np from tensorflow.examples.tutorials.mnist import input_data#1、定義數據集:mnist mnist = input_data.read_data_sets('MNIST_data', one_hot=True)trainimg = mnist.train.images trainimg_label = mnist.train.labels testimg = mnist.test.images testimg_label = mnist.test.labels print(trainimg_label[0]) #輸出第一行label值#2、定義x、y、w、b:tf.placeholder占位符、tf.Variable變量 x = tf.placeholder("float",[None,784]) # [None,784]樣本的個數(無限大),每個樣本的特征(784個像素點) y = tf.placeholder("float",[None,10]) #樣本的類別(10個) W = tf.Variable(tf.zeros([784,10])) #每個特征(784個像素點)對應輸出10個分類值 b = tf.Variable(tf.zeros([10]))#3、模型預測:LoR(softmax多分類) #3.1、定義計算損失:actv、cost actv = tf.nn.softmax(tf.matmul(x,W)+b) #計算屬于正確類別的概率值 cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(actv),reduction_indices=1)) #計算損失值(預測值與真實值間的均方差)#3.2、定義模型訓練:learning_rate、optm: #(1)、采用GD優化參數w、b,最小化損失值 learning_rate=0.01 optm = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #學習率為0.01 # optimizer = tf.train.GradientDescentOptimizer(0.01) #學習率為0.01 # optm = optimizer.minimize(cost) #最小化損失值#3.3、定義模型的pred、accr pred = tf.equal(tf.argmax(actv,1),tf.argmax(y,1)) #預測值:equal返回的值是布爾類型,argmax返回矩陣中最大元素的索引,0,代表列方向;1代表行方向 accr = tf.reduce_mean(tf.cast(pred,"float")) #準確率,cast進行類型轉化 (true為1,false為0) #3.4、定義模型訓練參數init_op、train_epochs、batch_size、display_step init_op = tf.global_variables_initializer() #初始化所有variables 的op train_epochs = 50 #將所有樣本迭代50次 batch_size = 100 #每次迭代選擇樣本的個數 display_step =5 #每進行5個epoch進行一次展示 #3.5、運行模型tf.Session() with tf.Session() as sess: #在session中啟動graphsess.run(init_op) #啟動運行使用variables的opfor epoch in range(train_epochs):#(1)、定義avg_cost、num_batchavg_cost =0.0 #初始化損失值num_batch = int(mnist.train.num_examples/batch_size) #(2)、for循環實現num_batch批量訓練for i in range(num_batch):batch_xs, batch_ys = mnist.train.next_batch(batch_size) #以batch為單位逐次進行sess.run(optm,feed_dict={x: batch_xs,y: batch_ys}) #給x,y賦值feeds={x: batch_xs,y: batch_ys} avg_cost +=sess.run(cost,feed_dict= feeds)/num_batch#(3)、if判斷實現每輪結果輸出:輸出每輪(5個epoch)的cost、trian_acc、test_accif epoch % display_step == 0:feeds_train = {x: batch_xs,y: batch_ys} feeds_test = {x:mnist.test.images,y: mnist.test.labels}train_acc = sess.run(accr,feed_dict= feeds_train)test_acc = sess.run(accr,feed_dict= feeds_test) print("Epoch: %03d/%03d cost:%.9f trian_acc: %.3f test_acc: %.3f"% (epoch,train_epochs,avg_cost,train_acc,test_acc)) print("Done")?
?
?
?
相關文章
TF:Tensorflow定義變量+常量,實現輸出計數功能
TF:Tensorflor之session會話的使用,定義兩個矩陣,兩種方法輸出2個矩陣相乘的結果
?
?
?
總結
以上是生活随笔為你收集整理的DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ML之SVM:SVM算法的简介、应用、经
- 下一篇: DL之ANN/DNN: 人工神经网络AN