- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定下面的函数 f!
:
function f!(s::Vector, a::Vector, b::Vector)
s .= a .+ b
return nothing
end # f!
如何根据
为 Zygote定义伴随物Enzyme.autodiff(f!, Const, Duplicated(s, dz_ds)。Duplicated(a, zero(a)), Duplicated(b, zero(b)))
?
Zygote.@adjoint f!(s, a, b) = f!(s, a, b), # What would come here ?
最佳答案
想出了一个办法,在这里分享。
对于给定函数 foo
,Zygote.pullback(foo, args...)
返回 foo(args...)
并且向后传递(允许梯度计算)。
我的目标是告诉 Zygote
使用 Enzyme
进行反向传递。
这可以通过 Zygote.@adjoint
完成(参见更多 here )。
在数组值函数的情况下,Enzyme
需要一个返回nothing
并且其结果在args
中的变异版本(查看更多here ).
问题帖中的函数 f!
是两个数组之和的 Enzyme
兼容版本。
因为 f!
返回 nothing
,Zygote
只会返回 nothing
当对传递给我们的某些梯度调用反向传递时。
一个解决方案是将 f!
放在返回数组 s
的包装器(比如 f
)中
并为 f
定义 Zygote.@adjoint
,而不是 f!
。
因此,
function f(a::Vector, b::Vector)
s = zero(a)
f!(s, a, b)
return s
end
function enzyme_back(dzds, a, b)
s = zero(a)
dzda = zero(dzds)
dzdb = zero(dzds)
Enzyme.autodiff(
f!,
Const,
Duplicated(s, dzds),
Duplicated(a, dzda),
Duplicated(b, dzdb)
)
return (dzda, dzdb)
end
和
Zygote.@adjoint f(a, b) = f(a, b), dzds -> enzyme_back(dzds, a, b)
通知 Zygote
在反向传递中使用 Enzyme
。
最后,您可以检查调用 Zygote.gradient
或者在
g1(a::Vector, b::Vector) = sum(abs2, a + b)
或
g2(a::Vector, b::Vector) = sum(abs2, f(a, b))
产生相同的结果。
关于 Julia :Zygote.@adjoint 来自 Enzyme.autodiff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71114131/
当我在运行时启动我的应用程序时,出现两个错误。我不明白问题是什么以及如何删除它。 06-17 18:10:59.213 22163-22163/? E/Zygote: v2 06-17 18:10:5
zygote 如何处理 android 中的共享库?Zygote 是 Android 中的一个特殊进程,负责处理每个新应用程序进程的 fork 。这些进程只是普通的 Linux 进程。我们可以将 Zy
我正在尝试了解 Android 如何启动应用程序。问题是 Zygote 如何(以及为什么) fork 一个新的 Dalvik VM?我不明白为什么不能在同一个 Dalvik VM 中运行多个应用程序。
给定下面的函数 f!: function f!(s::Vector, a::Vector, b::Vector) s .= a .+ b return nothing end # f! 如
我需要两个 zygote 进程来 fork 系统两次,以便应用程序处理不同级别的输入。 我在 ZygoteInit.java 文件中看到,创建辅助受精卵取决于 --abi-list。如果有任何不受支持
是否可以在zygote之外启动原生android可执行文件? 最佳答案 我发现在我的 native 应用程序中使用以下代码对您的应用程序进行守护进程会使其与 zygote 分离。 /* Daemoni
在 Dalvik VM 中,Zygote 的角色是(是)充当新应用程序的启动台和实时核心库的存储库,所有应用程序都可以在其生命周期中引用这些库。随着 ART 的推出,Zygote 有什么变化吗? Zy
当我尝试执行我的 helloworld 应用程序时出现 Zygot 错误。 05-02 15:32:49.067: ERROR/Zygote(32): setreuid() failed. errno
我正在研究在 Java Android 应用程序和/或其自身的 JNI 中获取 super 用户权限的可能方法。众所周知的答案似乎是只能从那里运行“su”子 shell 和命令行命令,这既不简洁也不实
我可以使用 GitHub stdchpie/android-openssl 为 android(libcrypto.so 和 libssl.so)成功构建 openssl-1.0.2j| : 环境:L
启动镜像加载(boot.oat、boot.art) 当 Android 启动时,它会加载一些 boot images,其中包含一些常用的类。特别是 boot.oat 包含类的代码,以及 boot.ar
在 的帮助下,我在 Android Studio 中做了一个 Simple Android OCR 的变体Tesseract OCR。使用相机后,应用程序停止并出现以下错误.. 如何解决? E/Zyg
12-15 01:08:43.226 30125-30125/? E/Zygote: MountEmulatedStorage() 12-15 01:08:43.226 30125-30125/? E
我正在使用 Google API 构建 map 应用程序。我收到此错误: E/zygote:Android 版本 >= 6.0 上不存在 String#value 字段 我不知道如何摆脱它。我搜索了所
我正在通过提供的 getting started guide 基于 CameraX Jetpack 支持库开发一个简单的应用程序和一个 GitHub repo .获取错误 I/zygote: Reje
我在 PID 上使用 showmap 命令,但我无法理解报告中的这一部分: 16384 3752 689 0 3132 0 620
我是一名优秀的程序员,十分优秀!