tensorflow筆記(一)之基礎知識
版權聲明:本文為博主原創文章,轉載請指明轉載地址
http://www.cnblogs.com/fydeblog/p/7399701.html
前言
這篇notebook將一步步構建一個tensorflow的線性回歸的例子,並講述其中的一些基礎知識。我會把notebook文件放在結尾的百度雲鏈接。
首先第一步,要安裝tensorflow,這個網上的教程很多,我安裝的版本是ubuntu下1.2.1的tensorflow,推薦用pip(一步就好)這里附上一個安裝教程的鏈接https://www.leiphone.com/news/201606/ORlQ7uK3TIW8xVGF.html ,安裝ubuntu系統的直接看必不可少的python-pip和python-dev的那部分,這篇博客的博主安裝的是0.8版本的,所以你需要改一下版本,由於我的電腦不支持gpu加速,所以安裝的是cpu,這兩個還是很有區別的,建議有gpu的還是裝gpu版本的,后面跑程序快一些,舉個例子,我在跑cnn卷積神經網絡的手寫識別的程序,沒有gpu加速,跑了40分鍾,有估計會很快,上面鏈接是cpu版本的,gpu版本應該也差不錯,只有自己去安裝了。
1. tensorflow的基本結構
我們先從python中導入tensorflow
import tensorflow as tf
這樣命名比較簡單明了,如果運行這行出現錯誤,說明你沒有安裝成功
matrix1 = tf.constant([[3., 3.]]) #1 row by 2 column matrix2 = tf.constant([[2.],[2.]]) # 2 row by 1 column
這里用tf.constant創建了兩個矩陣matrix1和matrix2,想知道如何去使用tf的函數,請點擊https://www.tensorflow.org/api_docs/python/這個網址,里面是tf的api文檔,可以直接在上面的搜索框內搜任何一個函數,可以看函數功能,參數,返回值等等。
這里的tf.constant函數是創建一個常量,返回值等於函數的輸入參數,之所以要用tf.constant,這是因為tensorflow有一個特別的地方,那就是用tensorflow的函數創建或返回一個數據,相當於一個源op,源op相當於tensorflow中最小的單元,每一個數據都是一個源op
創建完前面的兩個常量后,我們開始矩陣相乘
product = tf.matmul(matrix1, matrix2)
tf.matmul函數是tensorflow里面的矩陣相乘函數。product也是一個源op,現在我們講講圖(graph)的概念,tensorflow中圖表示計算任務,上面幾行代碼似乎看不到圖的生成過程哈,這是因為tensorflow有一個默認圖,它已經能滿足大部分需求,所以不需要構建圖,目前筆記都會是默認圖,多圖操作我現在還不會,看以后有沒有機會寫吧。在這個默認圖中,已經有三個源op了,分別是product,matrix1和matrix2,我們可以將三個源op看作默認圖中的三個節點,但這三個節點是有關系的,product節點連接這matrix1和matrix2節點,有點像樹的分叉,product相當於主干,matrix1和matrix2相當於兩個分支。
然后我們要創建一個會話
sess = tf.Session()
tensorflow要求所有的任務必須在會話中運行,上面這個語句就是創建一個會話
然后我們在會話中運行product
sess.run(product)
返回結果1X1的矩陣,數據類型是float32(tensorflow的默認類型)
我們來自頂向下看,最頂的是會話(Session),然后會話中包括了各種任務,也是graph,任務又是由不同的源op組成。我用tensorboard畫了圖(tensorboard是tensorflow可視化的一個非常好的工具,這個后面會說),如圖
2. tensorflow下的回歸實例
好了,現在我們開始舉一個回歸例子來實踐一下吧
import tensorflow as tf import numpy as np ## prepare the original data x_data = np.random.rand(100).astype(np.float32) y_data = 0.3*x_data+0.1 ##creat parameters weight = tf.Variable(tf.random_uniform([1],-1.0,1.0)) bias = tf.Variable(tf.zeros([1])) ##get y_prediction y_prediction = weight*x_data+bias ##compute the loss loss = tf.reduce_mean(tf.square(y_data-y_prediction)) ##creat optimizer optimizer = tf.train.GradientDescentOptimizer(0.5) #creat train ,minimize the loss train = optimizer.minimize(loss) #creat init init = tf.global_variables_initializer() ##creat a Session sess = tf.Session() ##initialize sess.run(init) ## Loop for step in range(101): sess.run(train) if step %10==0 : print step ,'weight:',sess.run(weight),'bias:',sess.run(bias)
第一項是准備數據,使用了numpy的函數,隨機生成100個float32型的數據,並生成相應的觀測值y
第二項是生成訓練參數,權重weight和偏差bias,這個是tf.Variable函數生成了,這個函數非常常用,變量都是用它來生成的
第三項是得到預測值,通過上面的參數與x_data運算得到
第四項計算損失,觀測值與預測值相差平方取平均
第五項生成一個優化器,使用的是梯度下降優化器
第六項則是用優化器去最小化損失
第七項是生成初始化op,相當於所有變量初始化的開關,在sess里運行則所有變量進行初始化
第八項是生成會話session
第九項是初始化所有變量,只有用tf.Variable函數,都要用這個sess.run(init)初始化,不然參數沒有進行初始化,無法迭代更新
第十項是循環訓練,執行train,它會最小化損失,在這個過程中,參數也在不停地更新,我們用print打印出了步數和參數值
這個說一句,使用tf函數生成的源op,必須在會話中運行,上面一小節我們講了自頂向下看,這里的頂是train,最下面是參數,sess.run(train)會帶動它各個分支和分支下面的分支運行
上述程序輸出結果如下
為了方便理解,我用tensorboard畫了流動圖,如圖
結尾
基礎知識到一段落了,希望這篇文章能對你學習tensorflow有幫助,由於博主能力有限,若有錯誤之處,還請不吝指教!謝謝!
百度雲鏈接:https://pan.baidu.com/s/1eBDs0ey4K9-3rVnsJOorag