Tensorflow操作在单个会话feed_dict中组合Iterator字符串句柄

时间:2018-04-03 18:02:31

标签: tensorflow tensorflow-datasets

我想以一种使用数据api的方式生成具有多个数据集的不同组合的小批量,并且不会导致张量泄漏(即,随着时间的推移增加图形操作的数量)。例如,minibatch 1可能是<script> function showStuff(){ // no argument needed document.getElementById("Button").style.display = "inline"; } </script> <body onload="javascript:setTimeout(function(){ showStuff(); }, 5000)"> ,其次是带有a1, a2, b1, b2的minibatch 2。

是否可以通过&#34;字符串句柄feed_dict方法&#34;在多个初始化数据集迭代器上运行单个会话。 (请参阅TF处的可供稿)。是否有一个op来组合两个Iterator.string_handle对象?我在下面有一个最小的工作示例,它在sys.exit之后显示我的问题。

a3, a4, c1, c2

1 个答案:

答案 0 :(得分:0)

我知道它已经很老了,但是对于其他像我一样想解决这个问题并且不想自己弄清楚的人:这是一个最小的示例,该示例使用一个数据集从其中一个动态选择或“ get_next()”其他两个数据集:

import numpy as np
import tensorflow as tf

x = np.full(100, 1)
y = np.full(100, 2)

x_i = tf.data.Dataset.from_tensor_slices(x).make_one_shot_iterator()
y_i = tf.data.Dataset.from_tensor_slices(y).make_one_shot_iterator()

with tf.Session() as sesh:
  [x_h, y_h] = sesh.run([x_i.string_handle(), y_i.string_handle()])

  z_d = tf.data.Dataset.from_tensor_slices(np.random.sample(100))
  z_d = z_d.map(lambda x: tf.gather([x_h, y_h], tf.cast(tf.round(x), tf.int32)))
  z_i = z_d.make_one_shot_iterator()

  picker_i = tf.data.Iterator.from_string_handle(z_i.get_next(), tf.int64).get_next()

  for i in range(100):
    print(sesh.run([picker_i]))