首页 > 解决方案 > 如何在 TensorFlow 中正确定义包含形状操作的模型/层?

问题描述

当我的图层需要形状操作(如重塑、获取输入的形状)时,我遇到了一些不同的布局失败问题。我小心翼翼地用 tensorflow 操作包裹了这些操作,tf.shape(x)并使用tf.gather_nd(). 但仍然以某种方式得到一些像这样的错误:

layout failed: Invalid argument: MutableGraphView::SortTopologically error: detected edge(s) creating cycle(s)...

通常有很多我不知道什么图层信息:

...
dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/
while/dormand_prince/while/body/_140529/dormand_princeGradients_13/while/dormand_prince/while/advance_to_solution_time/while/exit/_254210' -> 'dorman
d_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prince/while/body/_140529/dormand_princeGradients_13/while/dormand_pr
ince/while/advance_to_solution_time/while/LoopExecuted/_254425', 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dorma
nd_prince/while/next_iteration/_141777-0-0-TransposeNCHWToNHWC-LayoutOptimizer' -> 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradie
nts_13/while/dormand_prince/while/merge/_140901', 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prince/while
/exit/_141485' -> 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/IdentityN', 'dormand_princeGradients_13/while/body/_
39932/dormand_princeGradients_13/while/dormand_prince/while/exit/_141485' -> 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13
/while/dormand_prince/while/LoopExecuted/_141734', 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prince/whil
e/body/_140529/dormand_princeGradients_13/while/dormand_prince/while/advance_to_solution_time/while/exit/_254227' -> 'dormand_princeGradients_13/whil
e/body/_39932/dormand_princeGradients_13/while/dormand_prince/while/body/_140529/dormand_princeGradients_13/while/dormand_prince/while/advance_to_sol
ution_time/while/LoopExecuted/_254425', 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prince/while/next_iter
ation/_141794-0-0-TransposeNCHWToNHWC-LayoutOptimizer' -> 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prin
ce/while/merge/_140918', 'dormand_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/dormand_prince/while/exit/_141502' -> 'dorman
d_princeGradients_13/while/body/_39932/dormand_princeGradients_13/while/IdentityN',
...

将 NHWC 转换为 NCHW 时似乎遇到了一些麻烦。它可以通过设置来解决, tf.config.optimizer.set_experimental_options({'layout_optimizer': False})但是当层需要修改张量的形状时,是否还有其他解决方案layout failed或者是否有一些规则可以遵循?

标签: tensorflow

解决方案


推荐阅读