tensorflow筆記(一)之基礎知識


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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM