gpt4 book ai didi

python - 每个 session.run() 调用多次从 tensorflow 数据集采样到相同的张量

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:43 31 4
gpt4 key购买 nike

考虑以下示例:

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)

现在,我正在寻找一种能够在每次 session.run() 调用中多次采样 tensor 的方法,即:

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() 来获取不同张量对象中的多个数据集样本,但可以将一个样本放入相同张量对象中?

对我来说,用例是这样的:此代码的 foobar 部分是分开的,而 foo 部分则没有了解每次运行需要多少次样本。

附注我正在使用 tf 1.12。 1.13 也是一个选项,但不是 tf 2。

最佳答案

是的,这是可能的。

关于您迄今为止所尝试的一些见解:

  1. 每次需要数据集中的新值时,您都可以使用从 make_one_shot_iterator() 返回的数据集迭代器
  2. 您可以创建自己的函数作为 tf 图的一部分,通过 foo() 传递结果

这样的东西可以给出你想要的输出(据我所知)

import tensorflow as tf
import numpy as np

X = np.arange(4).reshape(4, 1) + (np.arange(3) / 10).reshape(1, 3)

iterator = tf.data.Dataset.from_tensor_slices(X) \
.batch(2).make_one_shot_iterator()

def foo(x):
return x + 1

def get_tensor():
return foo(iterator.get_next())

tensor = get_tensor()

def bar(x):
return x - 1

result1 = bar(tensor)
with tf.control_dependencies([result1]):
op = get_tensor()
with tf.control_dependencies([op]):
result2 = bar(op)

sess = tf.Session()
print(*sess.run([result1, result2]), sep='\n\n')

关于python - 每个 session.run() 调用多次从 tensorflow 数据集采样到相同的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56464739/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com