内置 Flux.jl 方法来获取 NaN

Built in Flux.jl method to fetch NaN's

我经常 运行 关注的一个常见问题是我的模型将包含具有 NaN 值的矩阵。是否有一种通用的 Flux 方法可以将我的矩阵传递到其中并检测这些 NaN?我知道 Julia 有一个内置的 isnan() 函数,可以在某些情况下使用,但我不确定是否有特定于 Flux 的版本?

不,没有特定于 Flux 的函数。在大多数情况下,您可能希望使用 any(isnan, A)。一项与 Flux 相关的“增强”是在检测到 NaN 时使用训练循环回调来停止训练。

# assumes (x, y) is your training data
#  and loss(x, y, mode) will compute the loss of model on (x, y)
cb = () -> isnan(loss(x, y, model)) && Flux.stop()

# basic train loop
# assuming opt is your optimizer
Flux.train!((x, y) -> loss(x, y, model), params(model), [(x, y)], opt; cb = cb)

上面的例子是基本思路,你可以扩展到检查不同的数组是否为 NaN。例如,你可以做

cb = () -> any(params(m)) do p
    any(isnan, p)
end && Flux.stop()

检查是否有任何参数为 NaN。