tensorflow筆記(一)之基礎知識

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

1. tensorflow的基本結構

咱們先從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可視化的一個很是好的工具,這個後面會說),如圖

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

相關文章
相關標籤/搜索