我试图建立一个嵌套循环,该循环用于创建2维零矩阵来解决LCS问题(动态编程)。稍后将其用于计算Rouge-L得分(输入是张量,而不是字符串),但是提高ValueError: The two structures don't have the same nested structure.
我检查了一些类似的问题,并修改了一些代码,但仍然无法正常工作(我在此处输入的代码是最终代码):
# 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:
[., .]
我不知道为什么会出错。如果您能提供帮助,我将不胜感激。
答案 0 :(得分:0)
嗨,基本上,错误消息的意思是您的返回值是一个列表,而它期望它是一个数字,这很有意义,因为您已将shape_invariant定义为[0, len(lengths)]
,它们都是整数,因此第二个结构定义为[.,.]
,但是第一个结构是一个数字和一个列表[., []]
,当您传递长度时,列表shape_invariants=[0,len(lengths)])
再次有意义。
TLDR:将shape_invariants=[0,lengths])
更改为loop_vars=[j,lengths]
或将loop_vars=[j,len(lengths)],
更改为SELECT c.symbol, c.number, c.sectionNumber FROM
courseoffering_of c
INNER JOIN
location l
ON
l.building = c.building
AND
l.room = c.room
INNER JOIN
enrolled e
ON
e.number = c.number
AND
e.sectionNumber = c.sectionNumber
GROUP BY c.symbol, c.number, c.sectionNumber, l.capacity
HAVING count(*) >= l.capacity