跟踪张量流中的NaN

时间:2016-11-15 19:03:33

标签: python tensorflow nan

我有一个相当复杂的网络,通过它我试图跟踪仅在数十万次迭代后才出现的NaN。基于this post,我使用tf.add_check_numerics_ops添加了一个check_op并捕获了tf.errors.InvalidArgumentError,但看起来崩溃的操作是变量读取(特别是batch_norm图层的beta读取)。

如果从这里开始,我有点不知所措。我正在考虑其他操作事先导致变量设置为NaN,但那么为什么它在那时没有被check_numerics捕获呢?读取是NaN引起的第一个地方似乎不太可能,但这就是系统似乎告诉我的内容!

如果有人对我如何进一步追踪这个错误有任何建议,我将不胜感激!

可能相关的更多信息:

1)如果我打破我的except块并只运行read op(做sess.run([err.op.inputs[0]])之类的东西)它会一直给我NaN。

2)如果我重新运行整个网络,我的check_op会一直跳到同一个读取,但步骤不同。

3)Here是其中一次运行的网络丢失。它在一次迭代中飙升。

4)这是read op的NodeDef

的转储
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"
    }
  }
}

以及它的输入NodeDef:

name: "base_networks/bn/beta"
op: "Variable"
device: "/device:GPU:0"
attr {
  key: "container"
  value {
    s: ""
  }
}
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 4
      }
    }
  }
}
attr {
  key: "shared_name"
  value {
    s: ""
  }
}

0 个答案:

没有答案