环路tensorflow(Loop in tensorflow)

2019-11-04 23:31发布

我改变了我的问题来解释我的问题更好:

我有一个函数: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异常:这两个结构不具有相同的嵌套结构。 第一结构:类型=列表STR = []第二结构:类型=列表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])与我不同的值,并且还当我的评论行while_loop工作out[:, :, :, index].assign(my_func(x[:, :, :, index])) 什么是错的那一行。

Answer 1:

据我所知,没有for循环等等,只是一段时间,为什么呢?

控制结构是很难得到正确,而且很难优化。 在你的情况,如果在同一批次的下一个例子有什么5个频道。 您将需要运行5次循环迭代,要么陷入困境或浪费计算资源,对于只有3个通道的第一个例子。

你需要考虑究竟你要实现的目标。 通常你会为每个通道不同的权重,因此系统不能只是创建它们凭空,他们需要进行适当的培训。

如果你只是想套用同样的逻辑3倍只是重新安排你的张量为(3,4,4,1)。 你得到3个结果和你做你想要与他们的东西。

通常,当你真正需要的循环(处理时序列)你垫的例子,使它们都具有相同的长度,并生成一个模型,其中在循环展开了(你有3个不同的操作,一个用于循环的每个迭代)。 寻找dynamic_rnn或static_rnn(第一个可以处理每个批次不同的长度)。



Answer 2:

据我所知,没有for循环等等,只是一段时间,为什么呢?

据在TensorFlow控制流的实现

他们应该TensorFlow的数据流模型吻合,并应服从并行和分布式执行和自动分化。

我认为,分布式数据流图和各种设备自动分化可能已经导致引入很少有这样的循环原语的约束。

有这几个文档图。 分布式计算专家可以更好地理解。 更详尽的解释是超越我。



文章来源: Loop in tensorflow