1. 程式人生 > >Tensorflow初入門

Tensorflow初入門

想要使用Tensorflow必須先要安裝上這個,我用的是win10系統,之前也裝了python環境

所以我就直接使用pip install tensorflow命令安裝上就可以使用了。

 

想要使用tensorflow,就必須明白tensorflow:

1、使用圖(graph)來表示計算任務。

2、在被稱之為為會話(session)的上下文(context)中執行圖。

3、使用tensor表示資料。

4、通過變數(Variable)維護狀態。

5、使用feed和fetch可以為任意的操作賦值或者從其中獲取資料。

 

tensorflow是一個程式設計系統,使用圖來表示計算任務。途中的節點被稱為op。一個op獲得0個或多個tensor,執行計算,產生0個或多個tensor。每個tensor是一個型別化的多為陣列。一個tensorflow圖描述了計算的過程,為了進行計算,圖必須在會話裡被啟動。會話將圖的op分發到諸如cpu或gpu之類的裝置上,同時提供執行op的方法。這些方法執行後,將產生的tensor返回。在Python中,返回的是numpy ndarray物件。

 

tensorflow程式通常被組織成一個構建和一個執行階段。在構建階段,op的執行步驟被描述成一個圖。在執行階段,使用會話執行執行圖中的op。例如,通常在構建階段建立一個圖來表示和訓練神經網路,然後在執行階段反覆執行圖中的訓練op。

構建圖

tensorflow python庫有一個預設圖,op構造器可以為其增加節點。

下面我們來構建一個圖,並執行它

import tensorflow as tf

#建立computational graph
node1=tf.constant(3.,tf.float32)
node2=tf.constant(4.5)
tensor
=tf.add(node1,node2) print(node1) print(node2) #執行computational graph session=tf.Session() print(session.run(node1)) print(session.run(node2)) print(session.run(tensor))

session.close()

執行結果是這樣的

由此可見我們建立node1與node2其實是建立了兩個tensor結點,Session物件在使用完之後需要關閉以釋放資源。除了顯式的條用close外,也可以使用“with”程式碼塊來自動完成關閉工作。

with tf.Session() as session:
    result=session.run(node1)
    print(redult)

在實現上,tensorflow將圖形定義轉換成分散式執行的操作,以充分利用可用的計算機資源。

 

互動式使用

文件中的Python示例使用一個會話Session來啟動圖,並呼叫Session.run()方法執行操作。為了便於使用注入IPython之類的Python互動環節,可以使用InteractiveSession代替Session類,使用Tensor.eval()和Operation.run()方法代替Session.run()。這樣可以避免使用一個變數來持有會話。

#進入一個互動式Tensorflow會話
import tensorflow as tf
 
sess=tf.InteractiveSession()

x=tf.Variable([1.0,2.0])
a=tf.constant([3.0,3.0])

#使用Operation.run()方法初始化x
x.initializer.run()

#增加一個剪髮op,從x減去a,執行減法結果,減去輸出結果
sub=tf.sub(x,a)
print(sub.eval())

 

Tensor

tensorflow程式使用tensor資料結構來代表所有的資料,計算圖中,操作間傳遞的資料都是tensor。你可以把tensorflow tensor看作是一個n維的陣列或者列表。一個tensor包含一個靜態型別rank,和一個shape。

變數

Variables變數維護圖執行過程中的狀態資訊。下面的例子演示瞭如何使用變數實現一個簡單的計數器。

import tensorflow as tf
 
#建立一個變數,初始化維標量0
state=tf.Variable(0,name="counter")

#建立一個op,其作用是使state增加1
one=tf.constant(1)
new_value=tf.add(state,one)
update=tf.assign(state,new_value)

#啟動圖後變數不需經過初始化

#首先必須增加一個初始化‘op’到圖中
init_op=tf.initialize_all_variables()

啟動圖,執行op
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(state))
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))

執行結果如下

程式碼中的assign()操作是圖所描繪的表示式的一部分,正如add()操作一樣,所以在呼叫run()執行表示式之前,不會進行真正執行的賦值操作。

我們通常會將一個統計模型中的引數表示為一組變數。例如,你可以將一個神經網路的權重作為某個變數儲存在一個tensor中。在訓練過程中,通過重複執行訓練圖,更新這個tensor。

 

Fetch

為了取回操作的輸出內容,可以在使用Session物件的run()呼叫執行圖時,傳入一些tensor,這些tensor會幫助你取回結果。在之前我們只取回了單個節點state,但是你也可以取回多個tensor:

import tensorflow as tf

input1=tf.constant(3.0)
input2=tf.constant(2.0)
input3=tf.constant(5.0)
intermed=tf.add(input2,input3)
mul=tf.multiply(input1,intermed)#multiply(),兩個數相乘

with tf.Session() as sess:
    result=sess.run([mul,intermed])
    print(result)

輸出結果如下

需要獲取多個tensor值,在op的依次執行中一起獲得(而不是之歌去獲取tensor)。也就是我們可以將兩個節點和在一塊輸出。

 

feed

上述示例在計算圖中引入了tensor,以常量或者變數的形式儲存。Tensorflow還提供了feed機制,該機制可以臨時替代圖中的任意操作中的tensor可以對圖中任何操作提交補丁,直接插入一個tensor。

feed使用一個tensor值臨時,替換一個操作的輸出結果。你可以提供feed資料作為run()呼叫的引數。feed旨在呼叫它的方法內有效,方法結束,feed就會小時。最常見的用例是將某些特殊的操作指定為“feed”操作,標記的方法是使用tf.placeholder()為這些操作建立佔位符。

import tensorflow as tf

input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)
output=tf.multiply(input1,input2)

with tf.Session() as sess:
    print(sess.run([output],feed_dict={input1:[7.],input2:[2.]}))

輸出的結果是這樣的