計(jì)算模型
例子:
import tensorflow as tf
# tf.constant是一個(gè)計(jì)算征唬,這個(gè)計(jì)算的結(jié)果為一個(gè)張量,保存在變量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")
print(result)
輸出結(jié)果:
Tensor("add:0", shape=(2,), dtype=float32)
從結(jié)果可以看出,一個(gè)張量中主要保存的了三個(gè)屬性:名字(name)、維度(shape)和類型(type)
name
張量的命名形式:node:src_output
其中node為節(jié)點(diǎn)的名稱鄙漏,src_output表示當(dāng)前張量來自節(jié)點(diǎn)的第幾個(gè)輸出。比如上面打印出來的“add:0"就說明result這個(gè)張量是計(jì)算節(jié)點(diǎn)”add“輸出的第一個(gè)結(jié)果
shape
該屬性描述了一個(gè)張量的維度信息棺蛛,比如上面樣例中shape=(2,)說明張量result是一個(gè)長度為2的一維數(shù)組泥张。
type
每一個(gè)張量會(huì)有一個(gè)唯一的類型,運(yùn)行時(shí)Tensorflow會(huì)對參與運(yùn)算的所有張量進(jìn)行類型的檢查鞠值,當(dāng)發(fā)現(xiàn)類型不匹配時(shí)會(huì)報(bào)錯(cuò)媚创,比如下面這段程序:
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")
報(bào)錯(cuò):
ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("b:0", shape=(2,), dtype=float32)'
如果將一個(gè)加數(shù)指定成實(shí)數(shù)類型就不會(huì)出錯(cuò)了
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")
為了避免導(dǎo)致類型不匹配的問題,建議通過dtype來明確指定變量或常量的類型
數(shù)據(jù)模型
張量使用主要可以歸結(jié)為兩大類
對中間結(jié)果的引用
# 使用張量記錄中間的結(jié)果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b
# 直接計(jì)算向量的和彤恶,這樣可讀性性會(huì)變差
result = tf.constant([1.0, 2.0], name="a") + tf.constant([2.0, 3.0], name="b")
獲取計(jì)算圖的結(jié)果
當(dāng)計(jì)算圖構(gòu)造完成之后钞钙,張量可以用來獲的計(jì)算結(jié)果,可以通過會(huì)話(Session)得到真實(shí)數(shù)字声离,代碼如下
tf.Session().run(result)