tf API 研讀3:Building Graphs

tensorflow是通過計算圖的方式建立網(wǎng)絡(luò)。
比喻說明:
結(jié)構(gòu):計算圖建立的只是一個網(wǎng)絡(luò)框架鉴嗤。編程時框架中不會出現(xiàn)任何的實際值,所有權(quán)重(weight)和偏移是框架中的一部分亥贸,初始時要給定初始值才能形成框架躬窜,因此需要初始化。
比喻:計算圖就是一個管道炕置,編寫網(wǎng)絡(luò)就是搭建一個管道結(jié)構(gòu)荣挨。在使用前,不會有任何的液體進(jìn)入管道朴摊。我們可以將神將網(wǎng)絡(luò)的權(quán)重和偏移當(dāng)成管道中的閥門默垄,可以控制液體的流動強(qiáng)弱和方向,在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中甚纲,閥門會根據(jù)數(shù)據(jù)進(jìn)行自我調(diào)節(jié)口锭、更新,但是使用之前至少給所有的閥門一個初始的狀態(tài)才能形成結(jié)構(gòu)介杆,并且計算圖允許我們可以從任意一個節(jié)點(diǎn)處取出液體鹃操。

下面是Graph的詳細(xì)介紹:
tf計算都是通過數(shù)據(jù)流圖(Graph)來展現(xiàn)的,一個數(shù)據(jù)流圖包含一系列節(jié)點(diǎn)(op)操作以及在節(jié)點(diǎn)之間流動的數(shù)據(jù)春哨,這些節(jié)點(diǎn)和數(shù)據(jù)流分別稱之為計算單元和Tensor對象荆隘。當(dāng)進(jìn)入tf時(例如import tensorflow as tf),tf內(nèi)部會注冊一個默認(rèn)的Graph赴背,可通過 tf.get_default_graph() 來獲得這個默認(rèn)的Default_Graph椰拒,只要簡單地調(diào)用某個函數(shù)晶渠,就可以向這個默認(rèn)的圖里面添加操作(節(jié)點(diǎn))。
(1)tf.Graph()

[python] view plain copy

g = tf.Graph()
with g.as_default():
# Define operations and tensors in g.
c = tf.constant(30.0)
assert c.graph is g

重要提示:Graph類在構(gòu)建圖時非線程安全燃观。所有的節(jié)點(diǎn)(操作)必須在單線程內(nèi)創(chuàng)建或者必須提供或外部同步褒脯。除非另有規(guī)定,不然所有的方法都不是線程安全的。(2)tf.Graph.as_default()
該方法返回一個上下文管理器缆毁,并將Graph當(dāng)做默認(rèn)圖番川。若想在同一進(jìn)程中創(chuàng)建多個圖,可調(diào)用此方法积锅。為了方便,tf-開始就提供了一個全局缺省圖,所有節(jié)點(diǎn)將被添加到這個缺省圖(開始時候提到了)爽彤,如果沒有顯式地創(chuàng)建一個新的圖的話。
默認(rèn)圖是當(dāng)前線程的屬性缚陷。如果您想創(chuàng)建一個新的線程适篙,并希望在新線程使用默認(rèn)的圖,就必須明確使用g.as_default()搭配with關(guān)鍵字來創(chuàng)建一個新作用域箫爷,并在該新作用域內(nèi)執(zhí)行一系列節(jié)點(diǎn)嚷节。

[python] view plain copy

1. Using Graph.as_default():

g = tf.Graph()
with g.as_default():
c = tf.constant(5.0)
assert c.graph is g

2. Constructing and making default:

with tf.Graph().as_default() as g:
c = tf.constant(5.0)
assert c.graph is g

(3)tf.Graph.as_graph_def(from_version=None, add_shapes=False)
該方法返回一個序列化的GraphDef』⒚可在另一個圖中調(diào)用該序列化的GraphDef(通過 import_graph_def()
)或者C++ Session API.)
該方法是線程安全的硫痰。
(4)tf.Graph.finalize()
使用該方法后,后續(xù)節(jié)點(diǎn)(操作)不能再添加到改圖(圖結(jié)構(gòu)被鎖定了)窜护。該方法可以確保此圖在不同線程之間計算時效斑,不會再被添加額外的節(jié)點(diǎn)。使用場景有QueueRunner(多線程讀取隊列文件)

(5)tf.Graph.finalized
若圖鎖定柱徙,就返回True
缓屠。。护侮。敌完。。直接看圖吧羊初,更直接滨溉。

tf.Graph
操作
描述

class tf.Graph
tensorflow中的計算以圖數(shù)據(jù)流的方式表示一個圖包含一系列表示計算單元的操作對象以及在圖中流動的數(shù)據(jù)單元以tensor對象表現(xiàn)

tf.Graph.init()
建立一個空圖

tf.Graph.as_default()
一個將某圖設(shè)置為默認(rèn)圖,并返回一個上下文管理器如果不顯式添加一個默認(rèn)圖长赞,系統(tǒng)會自動設(shè)置一個全局的默認(rèn)圖晦攒。所設(shè)置的默認(rèn)圖,在模塊范圍內(nèi)所定義的節(jié)點(diǎn)都將默認(rèn)加入默認(rèn)圖中

tf.Graph.as_graph_def(from_version=None, add_shapes=False)
返回一個圖的序列化的GraphDef表示序列化的GraphDef可以導(dǎo)入至另一個圖中(使用 import_graph_def())或者使用C++ Session API

tf.Graph.finalize()
完成圖的構(gòu)建得哆,即將其設(shè)置為只讀模式

tf.Graph.finalized
返回True勤家,如果圖被完成

tf.Graph.control_dependencies(control_inputs)
定義一個控制依賴,并返回一個上下文管理器with g.control_dependencies([a, b, c]):# de 將在 a, b, 和c執(zhí)行完之后運(yùn)行.d = …e = …

tf.Graph.device(device_name_or_function)
定義運(yùn)行圖所使用的設(shè)備柳恐,并返回一個上下文管理器with g.device('/gpu:0'): ...
with g.device('/cpu:0'): ...

tf.Graph.name_scope(name)
為節(jié)點(diǎn)創(chuàng)建層次化的名稱伐脖,并返回一個上下文管理器

tf.Graph.add_to_collection(name, value)
將value以name的名稱存儲在收集器(collection)中

tf.Graph.get_collection(name, scope=None)
根據(jù)name返回一個收集器中所收集的值的列表

tf.Graph.as_graph_element(obj, allow_tensor=True, allow_operation=True)
返回一個圖中與obj相關(guān)聯(lián)的對象,為一個操作節(jié)點(diǎn)或者tensor數(shù)據(jù)

tf.Graph.get_operation_by_name(name)
根據(jù)名稱返回操作節(jié)點(diǎn)

tf.Graph.get_tensor_by_name(name)
根據(jù)名稱返回tensor數(shù)據(jù)

tf.Graph.get_operations()
返回圖中的操作節(jié)點(diǎn)列表

tf.Graph.gradient_override_map(op_type_map)
用于覆蓋梯度函數(shù)的上下文管理器


tf.Operation(節(jié)點(diǎn)op:開始時候提到過乐设,節(jié)點(diǎn)就是計算單元)
操作
描述

class tf.Operation
代表圖中的一個節(jié)點(diǎn)讼庇,用于計算tensors數(shù)據(jù)該類型將由python節(jié)點(diǎn)構(gòu)造器產(chǎn)生(比如tf.matmul())或者Graph.create_op()例如c = tf.matmul(a, b)創(chuàng)建一個Operation類為類型為”MatMul”,輸入為’a’,’b’,輸出為’c’的操作類

tf.Operation.name
操作節(jié)點(diǎn)(op)的名稱

tf.Operation.type
操作節(jié)點(diǎn)(op)的類型近尚,比如”MatMul”

tf.Operation.inputstf.Operation.outputs
操作節(jié)點(diǎn)的輸入與輸出

tf.Operation.control_inputs
操作節(jié)點(diǎn)的依賴

tf.Operation.run(feed_dict=None, session=None)
在會話(Session)中運(yùn)行該操作

tf.Operation.get_attr(name)
獲取op的屬性值

tf.Tensor(節(jié)點(diǎn)間流動的數(shù)據(jù)蠕啄,上面也有所提到)
操作
描述

class tf.Tensor
表示一個由操作節(jié)點(diǎn)op產(chǎn)生的值,TensorFlow程序使用tensor數(shù)據(jù)結(jié)構(gòu)來代表所有的數(shù)據(jù), 計算圖中, 操作間傳遞的數(shù)據(jù)都是 tensor戈锻,一個tensor是一個符號handle,里面并沒有表示實際數(shù)據(jù)歼跟,而相當(dāng)于數(shù)據(jù)流的載體

tf.Tensor.dtype
tensor中數(shù)據(jù)類型

tf.Tensor.name
該tensor名稱

tf.Tensor.value_index
該tensor輸出外op的index

tf.Tensor.graph
該tensor所處在的圖

tf.Tensor.op
產(chǎn)生該tensor的op

tf.Tensor.consumers()
返回使用該tensor的op列表

tf.Tensor.eval(feed_dict=None, session=None)
在會話中求tensor的值需要使用with sess.as_default()
或者 eval(session=sess)

tf.Tensor.get_shape()
返回用于表示tensor的shape的類TensorShape

tf.Tensor.set_shape(shape)
更新tensor的shape

tf.Tensor.device
設(shè)置計算該tensor的設(shè)備


tf.DType
操作
描述

class tf.DType
數(shù)據(jù)類型主要包含tf.float16,tf.float16,tf.float32,tf.float64,tf.bfloat16,tf.complex64,tf.complex128,tf.int8,tf.uint8,tf.uint16,tf.int16,tf.int32,tf.int64,tf.bool,tf.string

tf.DType.is_compatible_with(other)
判斷other的數(shù)據(jù)類型是否將轉(zhuǎn)變?yōu)樵揇Type

tf.DType.name
數(shù)據(jù)類型名稱

tf.DType.base_dtype
返回該DType的基礎(chǔ)DType格遭,而非參考的數(shù)據(jù)類型(non-reference)

tf.DType.as_ref
返回一個基于DType的參考數(shù)據(jù)類型

tf.DType.is_floating
判斷是否為浮點(diǎn)類型

tf.DType.is_complex
判斷是否為復(fù)數(shù)

tf.DType.is_integer
判斷是否為整數(shù)

tf.DType.is_unsigned
判斷是否為無符號型數(shù)據(jù)

tf.DType.as_numpy_dtype
返回一個基于DType的numpy.dtype類型

tf.DType.maxtf.DType.min
返回這種數(shù)據(jù)類型能表示的最大值及其最小值

tf.as_dtype(type_value)
返回由type_value轉(zhuǎn)變得的相應(yīng)tf數(shù)據(jù)類型

  • 通用函數(shù)(Utility functions)
    操作
    描述

tf.device(device_name_or_function)
基于默認(rèn)的圖哈街,其功能便為Graph.device()

tf.container(container_name)
基于默認(rèn)的圖,其功能便為Graph.container()

tf.name_scope(name)
基于默認(rèn)的圖拒迅,其功能便為 Graph.name_scope()

tf.control_dependencies(control_inputs)
基于默認(rèn)的圖骚秦,其功能便為Graph.control_dependencies()

tf.convert_to_tensor(value, dtype=None, name=None, as_ref=False)
將value轉(zhuǎn)變?yōu)閠ensor數(shù)據(jù)類型

tf.get_default_graph()
返回返回當(dāng)前線程的默認(rèn)圖

tf.reset_default_graph()
清除默認(rèn)圖的堆棧,并設(shè)置全局圖為默認(rèn)圖

tf.import_graph_def(graph_def, input_map=None,return_elements=None, name=None, op_dict=None,producer_op_list=None)
將graph_def的圖導(dǎo)入到python中

  • 圖收集(Graph collections)
    操作
    描述

tf.add_to_collection(name, value)
基于默認(rèn)的圖璧微,其功能便為Graph.add_to_collection()

tf.get_collection(key, scope=None)
基于默認(rèn)的圖作箍,其功能便為Graph.get_collection()

  • 定義新操作節(jié)點(diǎn)(Defining new operations)
    tf.RegisterGradient
    操作
    描述

class tf.RegisterGradient
返回一個用于寄存op類型的梯度函數(shù)的裝飾器

tf.NoGradient(op_type)
設(shè)置操作節(jié)點(diǎn)類型op_type的節(jié)點(diǎn)沒有指定的梯度

class tf.RegisterShape
返回一個用于寄存op類型的shape函數(shù)的裝飾器

class tf.TensorShape
表示tensor的shape

tf.TensorShape.merge_with(other)
與other合并shape信息,返回一個TensorShape類

tf.TensorShape.concatenate(other)
與other的維度相連結(jié)

tf.TensorShape.ndims
返回tensor的rank

tf.TensorShape.dims
返回tensor的維度

tf.TensorShape.as_list()
以list的形式返回tensor的shape

tf.TensorShape.is_compatible_with(other)
判斷shape是否為兼容TensorShape(None)與其他任何shape值兼容

class tf.Dimension

tf.Dimension.is_compatible_with(other)
判斷dims是否為兼容

tf.Dimension.merge_with(other)
與other合并dims信息

tf.op_scope(values, name, default_name=None)
在python定義op時前硫,返回一個上下文管理器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胞得,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屹电,更是在濱河造成了極大的恐慌阶剑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗤详,死亡現(xiàn)場離奇詭異个扰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)葱色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門递宅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苍狰,你說我怎么就攤上這事办龄。” “怎么了淋昭?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵俐填,是天一觀的道長。 經(jīng)常有香客問我翔忽,道長英融,這世上最難降的妖魔是什么盏檐? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮驶悟,結(jié)果婚禮上胡野,老公的妹妹穿的比我還像新娘。我一直安慰自己痕鳍,他們只是感情好硫豆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笼呆,像睡著了一般熊响。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诗赌,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天汗茄,我揣著相機(jī)與錄音,去河邊找鬼境肾。 笑死剔难,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奥喻。 我是一名探鬼主播偶宫,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼环鲤!你這毒婦竟也來了纯趋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冷离,失蹤者是張志新(化名)和其女友劉穎吵冒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西剥,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痹栖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞭空。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揪阿。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖咆畏,靈堂內(nèi)的尸體忽然破棺而出南捂,到底是詐尸還是另有隱情,我是刑警寧澤旧找,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布溺健,位于F島的核電站,受9級特大地震影響钮蛛,放射性物質(zhì)發(fā)生泄漏鞭缭。R本人自食惡果不足惜剖膳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岭辣。 院中可真熱鬧潮秘,春花似錦、人聲如沸易结。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搞动。三九已至,卻和暖如春渣刷,著一層夾襖步出監(jiān)牢的瞬間鹦肿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工辅柴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箩溃,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓碌嘀,卻偏偏與公主長得像涣旨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子股冗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容