【问题标题】:Loop in tensorflow张量流中的循环
【发布时间】:2018-07-03 04:17:45
【问题描述】:

我更改了我的问题以更好地解释我的问题:

我有一个函数:output_image = my_dunc(x) x 应该是 (1, 4, 4, 1)

请帮我修复这部分的错误:

out = tf.Variable(tf.zeros([1, 4, 4, 3]))
index = tf.constant(0)
def condition(index):
    return tf.less(index, tf.subtract(tf.shape(x)[3], 1))
def body(index):
    out[:, :, :, index].assign(my_func(x[:, :, :, index]))
    return tf.add(index, 1), out
out = tf.while_loop(condition, body, [index])

ValueError:这两个结构没有相同的嵌套结构。 第一个结构:type=list str=[] 第二种结构:type=list str=[<tf.Tensor 'while_10/Add_3:0' shape=() dtype=int32>, <tf.Variable 'Variable_2:0' shape=(1, 4, 4, 3) dtype=float32_ref>] 更具体地说:这两个结构没有相同数量的元素。第一个结构:type=list str=[<tf.Tensor 'while_10/Identity:0' shape=() dtype=int32>]。第二种结构:type=list str=[<tf.Tensor 'while_10/Add_3:0' shape=() dtype=int32>, <tf.Variable 'Variable_2:0' shape=(1, 4, 4, 3) dtype=float32_ref>]

我测试了我的代码,我可以从 out = my_func(x[:, :, :, i]) 获得不同的 i 值的结果,当我评论 out[:, :, :, index].assign(my_func(x[:, :, :, index])) 行时,while_loop 也可以工作。那行有问题。

【问题讨论】:

  • 请澄清。你想如何组合 x 的通道?
  • 对于组合,我想将它们连接起来。我的意思是我将拥有 3 个 (1, 4, 4, 1),我需要拥有一个 (1, 4, 4, 3)。我不确定,但我认为在 keras 中使用连接运算符是可能的。
  • 你能回答我编辑的问题吗

标签: tensorflow tensorflow-serving tensorflow-estimator


【解决方案1】:

我知道没有for循环之类的只是while,为什么?

控制结构很难正确且难以优化。在您的情况下,如果同一批次中的下一个示例有 5 个通道怎么办。对于只有 3 个通道的第一个示例,您需要运行 5 次循环迭代,要么搞砸要么浪费计算资源。

你需要思考你到底想要达到什么目标。通常每个通道都有不同的权重,因此系统不能凭空创建它们,它们需要经过适当的训练。

如果您只想应用相同的逻辑 3 次,只需将您的张量重新排列为 (3, 4, 4, 1)。您会得到 3 个结果,然后对它们做您想做的事情。

通常当您实际需要 for 循环时(处理序列时),您填充示例以使它们都具有相同的长度并生成一个模型,其中循环展开(您将有 3 个不同的操作,一个用于环形)。寻找 dynamic_rnn 或 static_rnn(第一个可以为每批处理不同的长度)。

【讨论】:

  • 正如您所说,我希望为图像的每个通道应用一个运算符。例如 (1, 4, 4, 32)。我从 3 个频道开始。我该怎么做?
【解决方案2】:

我知道没有for循环之类的只是while,为什么?

根据Implementation of Control Flow in TensorFlow

它们应该非常适合 TensorFlow 的数据流模型,并且应该适合并行和分布式执行以及自动微分。

我认为分布式数据流图和跨设备自动区分可能是导致很少引入此类循环原语的限制因素。

此文档中有几个图表。分布式计算专家可以更好地理解。更彻底的解释超出了我的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多