十分钟内追踪南斯

2024-03-28 20:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相当复杂的网络,我试图通过它来跟踪只有几十万次迭代后才会出现的nan。在this post的基础上,我使用tf.add_check_numerics_ops添加了一个检查操作,并捕获了{},但它似乎崩溃的操作是一个变量读取(特别是批处理规范层的beta读取)。在

我不知道如何从这里开始。我在想其他的操作会导致变量被设置为NaN,但是为什么在那个时候它没有被check_数字捕获呢?读取是引起NaN的第一个地方似乎不太可能,但这是系统似乎告诉我的!在

如果有人对我如何进一步跟踪这个bug有任何建议,将不胜感激!在

一些可能相关的更多信息:

1)如果我打破了except块,只运行read操作(执行类似sess.run([err.op.inputs[0]]))的操作,它总是给我一个NaN。在

2)如果我重新运行整个网络,我的check_-op会在同一个读操作中持续运行,但步骤不同。在

3)Here是其中一次运行的网络损耗。它在一次迭代中达到峰值。在

4)这里是read op的nodedf转储

name: "base_networks/bn/beta/read"
op: "Identity"
input: "base_networks/bn/beta"
device: "/device:GPU:0"
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "_class" 
  value {
    list {
      s: "loc:@base_networks/bn/beta"
    }
  }
}

以及其输入的nodedf:

^{pr2}$

Tags: key网络readbasevaluedevicechecknan