Tensorflow之張量和會話

2021-08-21 06:52:26 字數 3077 閱讀 3785

tensorflow的名字表明了張量的含義。在tensorflow中,所有資料通過張量形式表示。張量可以理解為多維陣列。零階張量表示標量,也就是乙個數;一階張量為向量,一維陣列;n階張量可以理解為n維陣列。

tensorflow中,張量並沒有儲存數字,只是表示數字的計算過程,是對tensorflow中運算結果的引用。

import tensorflow as tf

a = tf.constant([1, 2], name="a", dtype=tf.float32)

b = tf.constant([2.0, 3.0], name="b")

result = tf.add(a, b, name='add')

print(result) # tensor("add:0", shape=(2,), dtype=float32)

上面**中,並不會得到加法的結果,只能得到引用,儲存在result中。

引用的型別表示為: tensor("add:0", shape=(2,), dtype=float32)

張量結構儲存了三個屬性:名字(name)、維度(shape)、型別(type)

張量的第乙個屬性除了是該張量的唯一識別符號外,還表示了張量的計算方式。上面**表明是通過加法計算得到。張量的名字通過"node:src_output"的形式給出,其中node為節點的名稱,src_output表示當前張量來自該節點的第幾個輸出。如a

dd:0說明該張量節點名稱為add,第乙個輸出。

張量的第二個屬性shape表明了他的維度。shape=(2,)說明該張量是乙個一維陣列,長度為2.

張量的第三個屬性表明了該張量的資料型別。執行時,tensorflow會對所有張量進行資料型別檢查,發現型別不匹配時會報錯。如下面這段**會報錯:

import tensorflow as tf

a = tf.constant([1, 2], name="a")

b = tf.constant([2.0, 3.0], name="b")

result = tf.add(a, b, name='add')

print(result) # tensor("add:0", shape=(2,), dtype=float32)

去掉張量a後面的小數點後型別不一致,則報錯,可以在a後顯示新增資料型別:

import tensorflow as tf

a = tf.constant([1, 2], name="a", dtype=tf.float32)

b = tf.constant([2.0, 3.0], name="b")

result = tf.add(a, b, name='add')

print(result) # tensor("add:0", shape=(2,), dtype=float32)

2.張量的使用張量的使用主要分為兩大類:

第一類用途時對中間結果的引用,提高**的可讀性。如下**:

# 使用張量記錄中間結果

a = tf.constant([1.0, 2.0], name="a")

b = tf.constant([2.0, 3.0], name="b")

result = a + b

# 直接計算向量的和,可讀性差

result=tf.constant([1.0, 2.0], name="a")+tf.constant([2.0, 3.0], name="b")

第二類情況是計算圖構造玩完成後,張量可以用來獲取計算結果,得到真實的數字。雖然張量本身沒有儲存具體的數字,但是通過會話(session)就可以得到這些具體的數字。如下**:

# 使用張量記錄中間結果

a = tf.constant([1.0, 2.0], name="a")

b = tf.constant([2.0, 3.0], name="b")

result = a + b

with tf.session() as sess:

tf.initialize_all_variables().run()

print(sess.run(result))

3.會話

tensorflow使用會話(session)來執行定義好的計算,其擁有並管理程式執行時的所有資源。當計算完成時,我們需要關閉會話來幫助系統**資源,否則就可能資源洩漏。在tensorflow中使用會話的方式有兩種:

第一種需要自己生成會話和關閉會話,**如下:

sess = tf.session()  # 建立乙個會話

print(sess.run(result)) # 使用會話獲得結果

sess.close() # 關閉會話,釋放資源

使用這種方式需要最後呼叫sess.close()函式關閉會話,否則可能存在記憶體洩漏的問題。

第二種是通過python的上下文管理器來使用會話,**如下:

with tf.session() as sess:

tf.initialize_all_variables().run()

print(sess.run(result))

此種方式不需要呼叫session.close()函式來關閉會話,當上下文退出時會自動關閉會話和釋放資源。

此外,tensorflow不會自動生成預設的會話,需要手動指定。當預設的會話被指定後可以通過eval()函式獲取張量的值,**如下:

sess = tf.session()

with sess.as_default():

print(result.eval())

使用tf.interactivesession()也可以自動生成預設的會話:

sess = tf.interactivesession()

print(result.eval())

sess.close()

Tensorflow實戰 張量

import tensorflow as tf tf.constant 是乙個計算,這個計算的結果為乙個張量,儲存在變數a中。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 pr...

tensorflow 張量生成

coding utf 8 import tensorflow as tf import numpy as np 建立張量 a tf.constant 1 5 dtype tf.int64 print a a print a.dtype a.dtype print a.shape a.shape a ...

Tensorflow張量(tensor)解析

tensor是tensorflow基礎的乙個概念 張量。定義在 framework ops.py tensorflow用到了資料流圖,資料流圖包括資料 data 流 flow 圖 graph tensorflow裡的資料用到的都是tensor,所以谷歌起名為tensorflow。下面介紹張量幾個比較...