如何解决我能在flux.jl中计算NN输出wrt网络输入的autograd吗?
我有一个 NN,它是一个函数 f:(t,v) -> (x,z)。我可以计算 autograd 偏导数 df/dt 吗?我想在我的损失函数的正则化项中使用 autograd 计算。
yhat = net((t,v))
#calculate current value of df/dt here
penalized_loss(yhat,y) = loss(yhat,y) + penalty(df/dt)
我想做类似的事情
df/dt = gradient(net,t)
但我不知道如何告诉梯度函数输入 (t) 是什么
解决方法
基于 the documentation,您可以这样使用 gradient
:
function my_custom_train!(loss,ps,data,opt)
ps = Params(ps)
for d in data
gs = gradient(ps) do
loss(d...)
end
update!(opt,gs)
end
end
这个 gradient(ps) do ... end
是朱利安习语:
gradient(loss(d...),ps);
gradient
来自 Zygote.jl,您可以阅读有关 here 的更多信息。
如果它是一个前馈神经网络,您可以使用 BetaML 并特别复制 getGradient 函数(“步骤 1”和“步骤 2”)来检索反向堆栈直到输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。