提交 ddf60d9c authored 作者: David Warde-Farley's avatar David Warde-Farley

Handle the upper-triangular case in CholeskyGrad.

Duplicates the same code except with axes swapped.
上级 c2d2d5a7
...@@ -407,8 +407,17 @@ class CholeskyGrad(Op): ...@@ -407,8 +407,17 @@ class CholeskyGrad(Op):
F[k, k] -= L[j, k] * F[j, k] F[k, k] -= L[j, k] * F[j, k]
F[k, k] /= (2 * L[k, k]) F[k, k] /= (2 * L[k, k])
else: else:
raise NotImplementedError("gradient only implemented for " F = numpy.triu(dz)
"lower-triangular Cholesky op") M = N - 1
for k in xrange(N - 1, -1, -1):
for j in xrange(k + 1, N):
for i in xrange(j, N):
F[k, i] -= F[j, i] * L[k, j]
F[k, j] -= F[j, i] * L[k, i]
for j in xrange(k + 1, N):
F[k, j] /= L[k, k]
F[k, k] -= L[k, j] * F[k, j]
F[k, k] /= (2 * L[k, k])
dx[0] = F dx[0] = F
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论