pythonloop循环结构_python - tensorflow,tf.while_loop:这两个结构没有相同的嵌套结构 - SO中文参考 - www.soinside.com...

我试图构建一个嵌套循环,用于创建一个2-dim零矩阵来解决LCS问题(动态编程)。这稍后用于计算Rouge-L得分(输入是张量,而不是字符串),但总是出错提高ValueError: The two structures don't have the same nested structure.

我检查了一些类似的问题,我修改了一些代码,但它仍然无法工作(我在这里提出的代码是最终代码):

我改变了shape_invariants。我现在使用len(内部)来动态获取内部的形状。

还是shape_invariants,我现在将1改为0(shape_invariants中的第一个参数)。我认为标量的形状是1,但我在github上检查了一些源代码,我发现它全部使用0。

# the origin code is below, in which sub and string are both string(type), len_sub and len_string are both int:

lengths = [[0 for i in range(0,len_sub+1)] for j in range(0,len_string+1)]

# but in the new code that I need, the sub and string are both tensor, so I code like this:

len_string = tf.shape(string)[0]

len_sub = tf.shape(sub)[0]

def _add_zeros(i,inner):

inner.append(0)

return i+1, inner

def _add_inners(j, lengths):

i=0

inner = []

_, inner = tf.while_loop(

cond=lambda i,*_: i<=len_sub,

body=_add_zeros,

loop_vars=[i,inner],

shape_invariants=[0,len(inner)])

lengths.append(inner)

return j+1, lengths

lengths = []

j = 0

_, lengths = tf.while_loop(

cond=lambda j,*_: j<=len_string,

body=_add_inners,

loop_vars=[j,lengths],

shape_invariants=[0,len(lengths)])

ValueError: The two structures don't have the same nested structure.

First structure: type=list str=[0, []]

Second structure: type=list str=[0, 0]

More specifically: Substructure "type=list str=[]" is a sequence, while substructure "type=int str=0" is not

Entire first structure:

[., []]

Entire second structure:

[., .]

我不知道为什么会出错。如果你能提供帮助,我会很感激的。