我想以一种使用数据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
答案 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]))