Рассмотрим следующий пример:
import tensorflow as tf
import numpy as np
X = np.arange(4).reshape(4, 1) + (np.arange(3) / 10).reshape(1, 3)
batch = tf.data.Dataset.from_tensor_slices(X) \
.batch(2).make_one_shot_iterator().get_next()
def foo(x):
return x + 1
tensor = foo(batch)
Теперь я ищу способ, с помощью которого можно сэмплировать tensor
несколько раз за один session.run()
вызов, т. Е .:
def bar(x):
return x - 1
result1 = bar(tensor)
with tf.control_dependencies([result1]):
op = <create operation to sample from dataset into `tensor` again>
with tf.control_dependencies([op]):
result2 = bar(tensor)
sess = tf.Session()
print(*sess.run([result1, result2]), sep='\n\n')
который должен вывести:
[[0. 0.1 0.2]
[1. 1.1 1.2]]
[[2. 2.1 2.2]
[3. 3.1 3.2]]
Это вообще возможно? Я знаю, что можно вызвать get_next()
несколько раз, чтобы получить несколько выборок набора данных в различных тензорных объектах, но можно ли сделать один выборку в один и тот же тензорный объект?
Для меня сценарий использования таков, что части этого кода foo
и bar
разделены, а часть foo
не знает, сколько раз потребуется сэмплов за цикл.
P.S.
Я использую тф 1.12. 1.13 тоже вариант, но не тф 2, хотя.