TensorFlow:tf.Session函數(shù)

2018-01-22 10:37 更新

tf.Session 函數(shù)

Session 類

定義在:tensorflow/python/client/session.py.

請參閱指南:運行圖>會話管理

用于運行TensorFlow操作的類.

一個Session對象封裝了Operation執(zhí)行對象的環(huán)境,并對Tensor對象進行計算.例如:

# Build a graph.
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

# Launch the graph in a session.
sess = tf.Session()

# Evaluate the tensor `c`.
print(sess.run(c))

session可能擁有的資源,如:tf.Variable,tf.QueueBase和tf.ReaderBase.不再需要時釋放這些資源是非常重要的.為此,請在session中調(diào)用tf.Session.close方法,或使用session作為上下文管理器.以下兩個例子是等價的:

# Using the `close()` method.
sess = tf.Session()
sess.run(...)
sess.close()

# Using the context manager.
with tf.Session() as sess:
  sess.run(...)

ConfigProto協(xié)議緩存公開了用于session的各種配置選項.例如,要創(chuàng)建為設備放置使用軟約束的session,并記錄生成的放置決策,請按如下方式創(chuàng)建session:

# Launch the graph in a session that allows soft device placement and
# logs the placement decisions.
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                        log_device_placement=True))

Session屬性

  • graph
    本次session上發(fā)布的圖表.
  • graph_def
    底層TensorFlow圖形的可序列化版本.
    • 函數(shù)返回:
      • 包含底層TensorFlow圖表中所有操作的節(jié)點的graph_pb2.GraphDef原型.
  • sess_str

Session 方法

__init__

__init__(
    target='',
    graph=None,
    config=None
)

創(chuàng)建一個新的TensorFlow session.

如果在構建session時沒有指定graph參數(shù),則將在session中啟動默認關系圖.如果使用多個圖(在同一個過程中使用tf.Graph()創(chuàng)建,則必須為每個圖使用不同的sessio,但是每個圖都可以用于多個sessio中,在這種情況下,將圖形顯式地傳遞給sessio構造函數(shù)通常更清晰.

方法參數(shù)

  • target:(可選)要連接到的執(zhí)行引擎.默認使用進程內(nèi)引擎.有關更多示例,請參閱“Distributed TensorFlow”.
  • graph:(可選)將被啟動的Graph(如上所述).
  • config:(可選)具有session配置選項的ConfigProto協(xié)議緩沖區(qū).

__enter__

__enter__()

__exit__

__exit__(
    exec_type,
    exec_value,
    exec_tb
)

as_default

as_default()

返回使該對象成為默認session的上下文管理器.

與with關鍵字一起使用來指定在此session中調(diào)用tf.Operation.run或tf.Tensor.eval應執(zhí)行的操作.

c = tf.constant(..)
sess = tf.Session()

with sess.as_default():
  assert tf.get_default_session() is sess
  print(c.eval())

要獲取當前的默認session,請使用tf.get_default_session.

注意:退出上下文時,as_default上下文管理器不會關閉session,并且必須顯式關閉session.

c = tf.constant(...)
sess = tf.Session()
with sess.as_default():
  print(c.eval())
# ...
with sess.as_default():
  print(c.eval())

sess.close()

或者,您可以使用tf.Session():創(chuàng)建會在退出上下文時自動關閉的session,包括未捕獲的異常發(fā)生時.

注意,默認session是當前線程的一個屬性.如果你創(chuàng)建一個新的線程,并希望在該線程中使用默認的session,則必須明確地添加一個sess.as_default():到該線程的函數(shù).

注意,輸入一個sess.as_default():塊不會影響當前的默認圖形.如果您正在使用多個圖表,并且與其sess.graph值不同,則tf.get_default_graph必須明確地輸入一個帶有sess.graph.as_default():塊來創(chuàng)建sess.graph默認圖形.

as_default()方法返回:

使用此session作為默認session的上下文管理器.

close

close()

關閉這個session.

調(diào)用此方法可釋放與session關聯(lián)的所有資源.

可能引發(fā)的異常

  • tf.errors.OpError:如果在關閉TensorFlow session時發(fā)生錯誤,則會有一個子類.

list_devices

list_devices()

列出此session中的可用設備.

devices = sess.list_devices()
for d in devices:
  print(d.name)

列表中的每個元素都具有以下屬性:

  • name:具有設備全名的字符串.例如:/job:worker/replica:0/task:3/device:CPU:0
  • device_type:設備的類型(例如CPU,GPU,TPU) 
  • memory_limit:存儲設備上可用的最大內(nèi)存量.注意:取決于設備,可用內(nèi)存可能會大大減少.

可能引發(fā)的異常

  • tf.errors.OpError:如果遇到錯誤(例如session處于無效狀態(tài),或發(fā)生網(wǎng)絡錯誤).

list_devices()方法返回:

list_devices()方法將返回session中的設備列表.

make_callable

make_callable(
    fetches,
    feed_list=None,
    accept_options=False
)

返回運行特定步驟的Python可調(diào)用對象.

返回的可調(diào)用將采取 len (feed_list) 參數(shù),其類型必須是feed_list各自元素的兼容feed值.例如,如果feed_list的元素i是一個tf.Tensor,則返回的可調(diào)用的第 i 參數(shù)必須是一個 numpy 的 ndarray(或可轉化成ndarray的東西)具有匹配元素類型和形狀.請參閱tf.Session.run允許的Feed鍵和值類型的詳細信息.

返回的可調(diào)用將具有與tf.Session.run(fetches, ...).例如,如果fetches是tf.Tensor ,則可調(diào)用將返回一個numpy的ndarray; 如果fetches是一個tf.Operation,它會返回None.

方法參數(shù)

  • fetches:要獲取的值或值列表.請參閱tf.Session.run允許的獲取類型的詳細信息.
  • feed_list:(可選)一個feed_dict鍵列表.請參閱tf.Session.run允許的Feed鍵類型的詳細信息.
  • accept_options:(可選)如果為True,則返回的Callable將是能夠接受tf.RunOptions和tf.RunMetadata可選關鍵字參數(shù)options,并且run_metadata分別使用與tf.Session.run相同的語法和語義,這對于某些使用情況很有用(分析和調(diào)試),但會導致可測量放緩的Callable的表現(xiàn).默認為False.

方法返回

一個函數(shù)調(diào)用將執(zhí)行由feed_list定義的步驟時,并在此會話中讀取的函數(shù).

可能引發(fā)的異常

  • TypeError:如果fetches或feed_list不能被解釋為tf.Session.run的參數(shù).

partial_run

partial_run(
    handle,
    fetches,
    feed_dict=None
)

通過更多的feed和fetche繼續(xù)執(zhí)行.

這是實驗性的,可能會有變化.

要使用部分執(zhí)行,用戶首先調(diào)用partial_run_setup(),然后是一個序列partial_run().partial_run_setup指定將在隨后的partial_run調(diào)用中使用的提要和提取列表.

可選feed_dict參數(shù)允許調(diào)用者覆蓋圖中張量的值.請參閱run()以獲取更多信息.

下面是一個簡單的例子:

a = array_ops.placeholder(dtypes.float32, shape=[])
b = array_ops.placeholder(dtypes.float32, shape=[])
c = array_ops.placeholder(dtypes.float32, shape=[])
r1 = math_ops.add(a, b)
r2 = math_ops.multiply(r1, c)

h = sess.partial_run_setup([r1, r2], [a, b, c])
res = sess.partial_run(h, r1, feed_dict={a: 1, b: 2})
res = sess.partial_run(h, r2, feed_dict={c: res})

方法參數(shù)

  • handle:部分運行序列的處理器.
  • fetches:單個圖形元素,圖形元素列表或其值為圖形元素或圖形元素列表的字典(請參閱“run文檔”).
  • feed_dict:將圖表元素映射到值的字典(如上所述).

方法返回:

可以是單個值,如果fetches是單個圖元素,或者列表值,如果fetches是列表,或者是具有與字典相同的鍵fetches的字典(請參閱“run文檔”).

方法可能引發(fā)的異常

  • tf.errors.OpError:其中一個子類出錯.

partial_run_setup

partial_run_setup(
    fetches,
    feeds=None
)

為部分運行設置一個帶有feed和fetche的圖形.

這是實驗性的,可能會有變化.

請注意,與運行相反,feeds只能指定圖形元素.張量將由隨后的partial_run調(diào)用提供.

方法參數(shù)

  • fetches:一個圖形元素,或者一個圖元素列表.
  • feeds:一個圖形元素,或者一個圖元素列表.

方法返回:

局部運行的處理器.

可能引發(fā)的異常

  • RuntimeError:如果這Session是無效狀態(tài)(例如已經(jīng)關閉).
  • TypeError:如果fetches或者feed_dict鍵的類型不合適.
  • tf.errors.OpError:如果發(fā)生TensorFlow錯誤,或者它的一個子類.

reset

@staticmethod
reset(
    target,
    containers=None,
    config=None
)

在target上重置資源容器,并關閉所有連接的會話.

資源容器分布在同一個群集target中的所有工作人員.target重置資源容器時,與該容器關聯(lián)的資源將被清除.尤其是,容器中的所有變量都將變得不確定:它們將失去其值和形狀.

注意:(i)reset()目前僅用于分布式會話.(ii)任何名為target的主的session將被關閉.

如果沒有提供資源容器,則所有的容器都被重置.

方法參數(shù)

  • target:連接到的執(zhí)行引擎.
  • containers:資源容器名稱字符串的列表,如果所有容器都將被重置,則為None.
  • config:(可選)具有配置選項的協(xié)議緩沖區(qū).

可能引發(fā)的異常

  • tf.errors.OpError:或者如果在重置容器時發(fā)生錯誤,它的一個子類.

run

run(
    fetches,
    feed_dict=None,
    options=None,
    run_metadata=None
)

在fetches中運行操作和計算張量.

此方法運行一個TensorFlow計算的一個“步驟”,通過運行所需的圖形片段來執(zhí)行每個Operation和計算fetches中的每個Tensor,用 feed_dict 中的值替換相應的輸入值.

所述fetches參數(shù)可以是一個單一的圖形元素,或任意嵌套列表、元組、namedtuple、字典、或含有它的葉子圖表元素OrderedDict.圖形元素可以是以下類型之一:

  • 一個tf.Operation.相應的取值將會是None.
  • 一個tf.Tensor.相應的取值將是一個包含該張量值的numpy ndarray.
  • 一個tf.SparseTensor.相應的取值將是一個tf.SparseTensorValue包含稀疏張量的值.
  • 一個get_tensor_handle操作.相應的取值將是包含該張量句柄的numpy ndarray.
  • A string是圖中張量或操作的名稱.

run()返回的值具有與fetches參數(shù)相同的形狀,葉子由TensorFlow返回的相應值替換.

示例:

a = tf.constant([10, 20])
b = tf.constant([1.0, 2.0])
# 'fetches' can be a singleton
v = session.run(a)
# v is the numpy array [10, 20]
# 'fetches' can be a list.
v = session.run([a, b])
# v is a Python list with 2 numpy arrays: the 1-D array [10, 20] and the
# 1-D array [1.0, 2.0]
# 'fetches' can be arbitrary lists, tuples, namedtuple, dicts:
MyData = collections.namedtuple('MyData', ['a', 'b'])
v = session.run({'k1': MyData(a, b), 'k2': [b, a]})
# v is a dict with
# v['k1'] is a MyData namedtuple with 'a' (the numpy array [10, 20]) and
# 'b' (the numpy array [1.0, 2.0])
# v['k2'] is a list with the numpy array [1.0, 2.0] and the numpy array
# [10, 20]

可選的feed_dict參數(shù)允許調(diào)用者在關系圖中覆蓋張量的值.feed_dict 中的每個鍵都可以是以下類型之一:

  • 如果鍵是a tf.Tensor,則值可以是可以轉換為與dtype張量相同的Python標量,字符串,列表或numpy ndarray .此外,如果鍵是a tf.placeholder,則將檢查值的形狀是否與占位符兼容.
  • 如果鍵是a tf.SparseTensor,則值應該是a tf.SparseTensorValue.
  • 如果鍵是Tensors或SparseTensors 的嵌套元組,則該值應該是一個嵌套元組,其結構與映射到上面相應的值相同.

feed_dict 中的每個值必須可轉換為相應鍵的 dtype 的 numpy 數(shù)組.

可選options參數(shù)需要一個[ RunOptions] 原型.這些選項允許控制此特定步驟的行為(例如,啟用跟蹤).

可選run_metadata參數(shù)需要一個[ RunMetadata] 原型.在適當?shù)臅r候,這個步驟的非張量輸出將被收集在那里.例如,當用戶在options打開跟蹤時,配置文件信息將被收集到該參數(shù)中并傳回.

方法參數(shù)

  • fetches:單個圖形元素,圖形元素列表或其值為圖元素或圖元素列表(如上所述)的字典.
  • feed_dict:將圖表元素映射到值的字典(如上所述).
  • options:一個[ RunOptions]協(xié)議緩沖區(qū)
  • run_metadata:一個[ RunMetadata]協(xié)議緩沖區(qū)

方法返回:

單個值如果fetches是單個圖元素,或者值列表if fetches是列表,或者具有與fetches字典(如上所述)相同的關鍵字的字典.

可能發(fā)生的異常

  • RuntimeError:如果該Session是無效狀態(tài)(例如已經(jīng)關閉).
  • TypeError:如果fetches或者feed_dict鍵的類型不合適.
  • ValueError:如果fetches或者feed_dict鍵無效或者引用Tensor不存在的鍵.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號