2 . tensorflow - 張量和會話

tensorflow中很重要的概念Tensorops

2.1 Tensor和ops

  • Tensor, 類似numpy中的array,但是區別是tensor中不存儲任何數據,tensor只是數據的引用.
  • ops是tensorflow中計算圖中的節點,ops接收若干個tensor,並且返回若干個tensor
a = tf.constant([1, 2], name='a', dtype=tf.int32)
b = tf.constant([2, 3], name='b')
result = a + b 
print(result) # Tensor("add:0", shape=(2,), dtype=int32)

    從上面的程序可以看出result是個tensor,但是並不存儲任何數據,只是數據的引用,從上面可以看出tensor有三個屬性

  • name: “add:0”, 表明result這個tensor是add這個ops的第一個輸出
  • shape: tensor的shape
  • dtype : tensor的數據格式

注意事項: 儘量把dtype寫上,因爲如果不寫tensorflow會自動寫默認值。不帶小數點的默認爲tf.int32,帶小數點的默認爲tf.float32

2.2 Session

    會話擁有並管理tensorflow程序運行的時候的所有資源,所有計算完成後,需要關閉會話來幫助系統回收資源,否則就可能出現資源泄露。

  • 可以使用with tf.Session() as sess:進行創建
with tf.Session() as sess:
	sess.run(tf.global_variable_initializer())
	sess.run(result) # [3, 5]

     當然還可以通過對Session進行配置類似,並行的線程數量,GPU分配策略,常用的參數有兩個

		 - allow_soft_placement=True
		 		-  該參數如果爲True,則下面三種情況出現,GPU上的運算都會放到CPU上運行
		 			-1. 運算無法在GPU上運行
		 			-2.沒有GPU資源
		 			-3.運算輸入包含CPU計算結果的引用	 
		 - log_device_placement=True

     爲了代碼的可移植性更強,在有GPU的環境下,allow_soft_placement設爲True, 而log_device_placement的作用是記錄每個節點被安排在哪個設備上以便調試,而在生產環境中將這個參數設置爲False.

config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)
with tf.Session(config=config) as sess:
	sess.run(....)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章