我是 Julia 的新手,无法确定Flux模型中层的类型。举例来说,假设我的模型只有一个神经元:
using Flux
m = Chain(Dense(1, 1, sigmoid))
Run Code Online (Sandbox Code Playgroud)
我想迭代我的,Chain并根据层的类型,进行不同的操作(具体来说,我想为Dense层添加正则化)。
我从 Python 来到 Julia,我的第一个猜测是将层的类型与Dense. 与我的直觉相反,这给了我false:
for layer in m
println(typeof(layer) == typeof(Dense))
end
Run Code Online (Sandbox Code Playgroud)
struct(in/ out/sigmoid在以下情况下Dense)存在给定层,但就没有保证,这不是一些其他层为类似的领域。使用替代layers属性m并检查值是否属于给定类型使用isa。总之,这应该有效:
for layer in m.layers
if layer isa Dense
# do something with dense layer
else
# do something else
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:确实m支持迭代和索引,我不知道,所以@darsnack建议这已经足够了:
for layer in m
if layer isa Dense
# do something with dense layer
else
# do something else
end
end
Run Code Online (Sandbox Code Playgroud)
现在澄清类型检查:
isa就像我上面那样<:,那么你可以写typeof(layer) <: Dense; 对于==不建议进行类型检查,请参阅Julia 手册中的此警告您可以查看Julia 手册的这一部分以了解更多信息