Learning Tensorflow(1)--- 入門

Tensor 是TensorFlow的數據結構,Flow是TensorFlow的計算模型,它直觀地表達了張量之間通過計算相互轉化的過程。TensorFlow 是一個通過計算圖的形式表述計算的編程系統。

 

張量結構

張量:

一:對中間計算結果的引用,這樣方便獲取中間計算結果同時提高了代碼的閱讀性。

二:可以用來獲得計算結果,這需要配合session.

從功能的角度,張量可以被簡單的理解爲多維數組,但從實際的角度來講,張量中並沒有保存數字,而保存的是如何得到這些數字的計算過程。

Tensor("add_10:0", shape=(2,), dtype=float32)

Name屬性:

name是一個Tensor的唯一標識符,同時name也給出了該Tensor是如何計算出來的。計算圖上的node和計算是相對應的。

計算的結果保存在Tensor中,Tensor的name屬性可以通過”node:src_output”形式給出。

  1. node爲節點的名稱-
  2. src_output表示Tensor來自當前節點的第幾個輸出。

Shape屬性:

shape屬性描述了一個Tensor的維度信息

Type屬性:

每一個Tensor都有一個唯一的類型,TensorFlow會對所有參與計算的Tensor進行類型檢查,當發現類型不匹配時會報錯。

 

計算圖

TensorFlow程序一般可以分爲兩個階段。

第一階段:定義計算圖中所有的計算。

第二階段:執行計算。

 

定義計算圖中所有的計算

import tensorflow as tf
a = tf.constant([1.0,2.0],name='a')
b = tf.constant([2.0,3.0],name='b')
result = tf.add(a,b,name='add')
print(result)
>>  Tensor("add_10:0", shape=(2,), dtype=float32)

 

執行計算

a,b,result都是張量,tf.constant  tf.add代表了張量之間的計算關係。

會話

用於執行定義好的運算

import tensorflow as tf
a = tf.constant([1.0,2.0],name='a')
b = tf.constant([2.0,3.0],name='b')
result = tf.add(a,b,name='add')

 

//執行運算

sess = tf.Session()

//在計算張量取值的時候,需要指定會話
 

print(sess.run(result))  // print(result.eval(session=sess))
sess.close()
或者,使用with可以異常退出時資源釋放的問題。
With tf.session() as sess:
Print(srss.run(result))
或者,指定默認會話,指定默認會話後纔可以計算張量的取值
sess = tf.Session()
with sess.as_default():
print(result.eval());

 

在交互式環境下,tf.InteractiveSession函數可以省去將產生的會話註冊爲默認會話的過程。

Sess = tf.InteractiveSession()
Print(result.eval())
Sess.close()

神經網絡

在使用tensorflow構建神經網絡時,tensorflow提供了特定的數據結構(變量,佔位符等)用於存儲特定的網絡數據(權重,偏置等等)。

變量

變量(tf.Variable)的作用是保存和更新神經網絡中的參數。

變量需要制定初始值,在神經網絡中一般使用隨機數給變量進行初始化,設定初始化方式。

Weights = tf.Variable(tf.random_normal([2,3], stddev=2))

Bias = tf.variable(tf.zeros([3]))

該語句會產生一個2*3的矩陣,矩陣中的元素爲均值爲0,標準差爲2的隨機數;

雖然在變量定義時給出了初始化的方法,但這個芳芳並沒有被執行。

所以在神經網絡運行之前,需要使用session來運行變量初始化

Sess.run(weights.initrilizer)

TensorFlow提供了一種更加便捷的方式來完成變量初始化過程,通過tf.initialize_all_variables函數實現初始化所有變量的過程。

Init_op = tf.initailize_all_variables()

Sess.run(ini_op)

佔位符

TensorFlow提供了placeholder機制用於提供輸入數據,placeholder相當於定義了一個位置,這個位置中的數據在程序運行時再指定。這樣在程序中就不需要生成大量常量來提供輸入數據。

使用佔位符時,需要通過feed_dict來指定x的初始取值。

使用佔位符實現前向傳播

OP

OP表示某種抽象計算,它擁有0個或多個「輸入/輸出」,及其0個或多個「屬性」。其中,輸入/輸出以Tensor的形式存在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章