julia - 如何取消引用 GlobalRef?
问题描述
存在一个变量p
,它是由一个外部包创建的。我认为它是一个指向 的指针W1
,它是由我在全局范围内创建的。
typeof(p) # output: GlobalRef
p # output: :(Main.W1)
p.name # output: :W1
p.mod # output: Main
如何检索 W1,它是背后的值p
?换句话说,是否有f
针对 which的功能W1 === f(p)
?
loss
感兴趣的一些上下文:我正在尝试使用 vanilla Zygote优化神经网络和损失(一起由 function 表示):
for s in 1:100
l = 0.
gs = gradient(Zygote.Params(optimizable_params)) do
l = loss(X[s, :], y[s])
end
push!(losses, l)
for (p, g) in pairs(gs.grads)
p += η * g # Here the p is coming from
end
end
解决方案
这个特定的用例似乎是一个错误。但是,通常您可以像这样获得被引用的对象:
julia> module X
x = 5
end
Main.X
julia> g = GlobalRef(X, :x)
:(Main.X.x)
julia> getfield(g.mod, g.name)
5
推荐阅读
- python - 如何在 pandas 中标准化到位
- mysql - 组递归 1:M 关系
- python - 如何在 DataFrame 中用 null 替换重复值?
- mysql - 出于某种原因,即使我不使用组功能,输出也会一直告诉我无效使用组功能
- java - 将下载的文件移动到 Eclipse 中的项目
- java - 尝试通过读取文件打印二维数组时,我的输出收到 Null
- java - 为什么 java.util.Stream 的 AbstractTask 使用 LEAF_TARGET = ForkJoinPool.getCommonPoolParallelism() << 2?
- java - 如何将方法中的值存储到数组中?
- python - 如何检查两个单独数组中任意两个元素之间的最小间距?
- c# - 在抽象基类的静态方法中实例化多个派生类中的任何一个(取决于参数)