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]):# d
和 e
將在 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時前硫,返回一個上下文管理器