tensorflow筆記(一)之基礎知識
html
版權聲明:本文爲博主原創文章,轉載請指明轉載地址python
http://www.cnblogs.com/fydeblog/p/7399701.htmlubuntu
前言api
這篇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版本應該也差不錯,只有本身去安裝了。session
咱們先從python中導入tensorflowdom
import tensorflow as tf
這樣命名比較簡單明瞭,若是運行這行出現錯誤,說明你沒有安裝成功iphone
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可視化的一個很是好的工具,這個後面會說),如圖
好了,如今咱們開始舉一個迴歸例子來實踐一下吧
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