使用Iterator類

2018-09-20 17:09 更新

tf.contrib.data.Iterator

Iterator 類

定義在:tensorflow/contrib/data/python/ops/dataset_ops.py.

表示通過數(shù)據(jù)集進(jìn)行迭代的狀態(tài).

屬性

initializer

應(yīng)運(yùn)行一個(gè) tf.Operation 來初始化這個(gè)迭代器.

返回:

返回運(yùn)行一個(gè) tf.Operation 來初始化該迭代器

注意:

  • ValueError:如果此迭代器自動(dòng)初始化自身.
output_shapes

返回此迭代器元素的每個(gè)組件的形狀.

返回:

tf.TensorShape 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該迭代器元素的每個(gè)組件.

output_types

返回此迭代器元素的每個(gè)組件的類型.

返回:

tf.DType 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該迭代器元素的每個(gè)組件.

方法

__init__

__init__ ( 
    iterator_resource , 
    initializer , 
    output_types ,
    output_shapes
)

從給定的迭代器資源創(chuàng)建一個(gè)新的迭代器.

注意(mrry):大多數(shù)用戶不會(huì)直接調(diào)用這個(gè)初始化程序,而是使用 Iterator.from_dataset()或Dataset.make_one_shot_iterator().

ARGS:

  • iterator_resource:代表迭代器的 tf.resource 標(biāo)量 tf.Tensor.
  • initializer:應(yīng)運(yùn)行一個(gè) tf.Operation 以初始化這個(gè)迭代器.
  • output_types:tf.DType 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該迭代器元素的每個(gè)組件.
  • output_shapes:tf.TensorShape 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該數(shù)據(jù)集的元素的每個(gè)組件.

dispose_op

dispose_op ( name = None )

返回一個(gè) tf.Operation 銷毀該迭代器.

返回的操作可用于釋放此迭代器消耗的任何資源,而不關(guān)閉會(huì)話.

ARGS:

  • name:(可選)創(chuàng)建操作的名稱.

返回:

返回一個(gè) tf.Operation.

from_dataset

from_dataset ( 
    dataset , 
    shared_name = None
 ) 

從給定的 Dataset 創(chuàng)建一個(gè)新的、未初始化的 Iterator.

要初始化這個(gè)迭代器,你必須運(yùn)行它的 initializer,如下所示:

dataset = ...
iterator = Iterator.from_dataset(dataset)
# ...
sess.run(iterator.initializer)

ARGS:

  • dataset:一個(gè) Dataset 對(duì)象
  • shared_name:(可選)如果非空,則該迭代器將在共享相同設(shè)備的多個(gè)會(huì)話(例如,使用遠(yuǎn)程服務(wù)器)時(shí)在給定名稱下共享.

返回:

返回一個(gè) Iterator.

from_string_handle

from_string_handle ( 
    string_handle , 
    output_types , 
    output_shapes = None
 )

根據(jù)給定的句柄創(chuàng)建一個(gè)新的、未初始化的 Iterator .

該方法允許您定義“可饋送”的迭代器,您可以通過在 tf.Session.run 調(diào)用中提供值來在具體的迭代器之間進(jìn)行選擇.在這種情況下,string_handle 會(huì)是一個(gè) tf.placeholder,你會(huì)在每個(gè)步驟中使用 tf.contrib.data.Iterator.string_handle 的值滿足它.

例如,如果有兩個(gè)迭代器在訓(xùn)練數(shù)據(jù)集和一個(gè)測(cè)試數(shù)據(jù)集中標(biāo)記了當(dāng)前位置,則可以選擇在每個(gè)步驟中使用哪種方法,如下所示:

train_iterator = tf.contrib.data.Dataset(...).make_one_shot_iterator()
train_iterator_handle = sess.run(train_iterator.string_handle())

test_iterator = tf.contrib.data.Dataset(...).make_one_shot_iterator()
test_iterator_handle = sess.run(test_iterator.string_handle())

handle = tf.placeholder(tf.string, shape=[])
iterator = tf.contrib.data.Iterator.from_string_handle(
    handle, train_iterator.output_types)

next_element = iterator.get_next()
loss = f(next_element)

train_loss = sess.run(loss, feed_dict={handle: train_iterator_handle})
test_loss = sess.run(loss, feed_dict={handle: test_iterator_handle})

ARGS:

  • string_handle:一個(gè) tf.string 類型的標(biāo)量 tf.Tensor,用于計(jì)算該 Iterator.string_handle()方法生成的句柄.
  • output_types:tf.DType 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該迭代器元素的每個(gè)組件.
  • output_shapes:(可選)tf.TensorShape 對(duì)象的嵌套結(jié)構(gòu),與該數(shù)據(jù)集的元素的每個(gè)組件對(duì)應(yīng).如果省略,每個(gè)組件將具有無約束的形狀.

返回:

返回一個(gè) Iterator.

from_structure

from_structure(
    output_types,
    output_shapes=None,
    shared_name=None
)

使用給定的結(jié)構(gòu)創(chuàng)建一個(gè)新的、未初始化的 Iterator .

此迭代器構(gòu)造方法可用于創(chuàng)建可重用多個(gè)不同數(shù)據(jù)集的迭代器.

返回的迭代器未綁定到特定的數(shù)據(jù)集,它沒有初始值設(shè)定項(xiàng).要初始化迭代器,請(qǐng)運(yùn)行 Iterator.make_initializer (dataset) 返回的操作.

以下是一個(gè)例子:

iterator = Iterator.from_structure(tf.int64, tf.TensorShape([]))

dataset_range = Dataset.range(10)
range_initializer = iterator.make_initializer(dataset_range)

dataset_evens = dataset_range.filter(lambda x: x % 2 == 0)
evens_initializer = iterator.make_initializer(dataset_evens)

# Define a model based on the iterator; in this example, the model_fn
# is expected to take scalar tf.int64 Tensors as input (see
# the definition of 'iterator' above).
prediction, loss = model_fn(iterator.get_next())

# Train for `num_epochs`, where for each epoch, we first iterate over
# dataset_range, and then iterate over dataset_evens.
for _ in range(num_epochs):
  # Initialize the iterator to `dataset_range`
  sess.run(range_initializer)
  while True:
    try:
      pred, loss_val = sess.run([prediction, loss])
    except tf.errors.OutOfRangeError:
      break

  # Initialize the iterator to `dataset_evens`
  sess.run(evens_initializer)
  while True:
    try:
      pred, loss_val = sess.run([prediction, loss])
    except tf.errors.OutOfRangeError:
      break

ARGS:

  • output_types:tf.DType 對(duì)象的嵌套結(jié)構(gòu),對(duì)應(yīng)于該迭代器元素的每個(gè)組件.
  • output_shapes:(可選)tf.TensorShape 對(duì)象的嵌套結(jié)構(gòu),與該數(shù)據(jù)集的元素的每個(gè)組件對(duì)應(yīng).如果省略,每個(gè)組件將具有無約束的形狀.
  • shared_name:(可選)如果非空,則該迭代器將在共享相同設(shè)備的多個(gè)會(huì)話(例如,使用遠(yuǎn)程服務(wù)器)時(shí)在給定名稱下共享.

返回:

返回一個(gè) Iterator.

注意:

  • TypeError:如果 output_shapes 和 output_types 的結(jié)構(gòu)不相同.

get_next

get_next ( name = None )

返回 tf.Tensor 的嵌套結(jié)構(gòu),包含下一個(gè)元素.

ARGS:

  • name:(可選)創(chuàng)建的操作的名稱.

返回:

返回 tf.Tensor 對(duì)象的嵌套結(jié)構(gòu).

make_initializer

make_initializer (dataset)

返回一個(gè) tf.Operation 初始化此數(shù)據(jù)集的迭代器.

ARGS:

  • dataset:一個(gè) Dataset 與此迭代器具有兼容的結(jié)構(gòu).

返回:

返回可以在給定的數(shù)據(jù)集上運(yùn)行的一個(gè) tf.Operation 以初始化該迭代器.

注意:

  • TypeError:如果數(shù)據(jù)集和這個(gè)迭代器沒有兼容的元素結(jié)構(gòu).

string_handle

string_handle ( name = None )

返回一個(gè)字符串值的 tf.Tensor 來表示此迭代器.

ARGS:

  • name:(可選)創(chuàng)建的操作的名稱.

返回:

一個(gè) tf.string 類型的標(biāo)量 tf.Tensor.


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)