tensorflow中很重要的概念Tensor和ops
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(....)