我正在研究一个使用tensorflow实现的模型。一切顺利,直到我必须实现嵌套功能(类似于)。
使用嵌套的FOR循环。例如下面的内容:
for k in range(n):
Gk = tf.convert_to_tensor(G[k], dtype=self.dtype)
Gk = tf.tile(tf.expand_dims(Gk,0),[tf.shape(trueX)[0],1])
for j in range(m):
pre_Y = self.build_nn( Gk, 200, '{}phi2'.format(j), tf.AUTO_REUSE )
log_pred_Y = tf.layers.dense( pre_Y, 2, name='{}phi2y'.format(j), reuse=tf.AUTO_REUSE )
pred_Y = tf.exp( log_pred_Y )
...........
pre_cost += tf.multiply( ll, pred_Y )
_cost += tf.reduce_sum(tf.multiply( pre_cost, pre_G), -1)
显然是一个非常糟糕的主意,因为它不仅需要时间,而且会占用大量内存。几天来我一直试图使用tf.while_loop重新实现,因为我理解应该比使用本机python循环更好。我一直在尝试实现一个嵌套的tf.while_loop,但都无济于事。我有两个问题:
pre_Y = self.build_nn( Gk, 200, '{}phi2'.format(j), tf.AUTO_REUSE )
log_pred_Y = tf.layers.dense( pre_Y, 2, name='{}phi2y'.format(j), reuse=tf.AUTO_REUSE )
使用名称中的索引来标识每个循环中使用的层。使用python FOR循环,我使用索引为要重用的层指定名称但是使用tf.while_loop,我找不到任何方法为密集层分配唯一的名称,因为我无法传递python正如我所理解的那样,在“name”选项中使用tf.while_loop的字符串或整数。
答案 0 :(得分:0)
Re(1)个嵌套的tf.while_loop
很好用。
关于(2),tf.while_loop无法完成这种事情,您需要使用python展开循环。