mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-11 21:12:38 +02:00
minor corrections :)
This commit is contained in:
parent
79127d146b
commit
6068369979
2 changed files with 2314 additions and 3890 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -80,12 +80,12 @@ def backprop_gradient_par(double[:,:] dL, double[:,:] L):
|
||||||
dL_dK[k, k] /= (2. * L[k, k])
|
dL_dK[k, k] /= (2. * L[k, k])
|
||||||
return dL_dK
|
return dL_dK
|
||||||
|
|
||||||
cdef void chol_backprop(int N, double[:, ::1] dL, double[:, ::1] L) nogil:
|
cdef void chol_backprop(int N, double[:, ::1] dL, double[:, ::1] L):# nogil:
|
||||||
cdef int i, k, n
|
cdef int i, k, n
|
||||||
|
|
||||||
# DSYMV required constant arguments
|
# DSYMV required constant arguments
|
||||||
cdef double alpha=-1, beta=1
|
cdef double alpha=-1, beta=1
|
||||||
cdef int incx=1
|
cdef int incx=N
|
||||||
|
|
||||||
# DSCAL required arguments
|
# DSCAL required arguments
|
||||||
cdef double scale
|
cdef double scale
|
||||||
|
|
@ -93,22 +93,22 @@ cdef void chol_backprop(int N, double[:, ::1] dL, double[:, ::1] L) nogil:
|
||||||
dL[N - 1, N - 1] /= (2. * L[N - 1, N - 1])
|
dL[N - 1, N - 1] /= (2. * L[N - 1, N - 1])
|
||||||
for k in range(N-2, -1, -1):
|
for k in range(N-2, -1, -1):
|
||||||
n = N-k-1
|
n = N-k-1
|
||||||
cblas.dsymv(uplo='l', n=&n, alpha=&alpha, a=&dL[k + 1, k + 1], lda=&N, x=&L[k, k + 1], incx=&incx,
|
cblas.dsymv(uplo='u', n=&n, alpha=&alpha, a=&dL[k + 1, k + 1], lda=&N, x=&L[k + 1, k], incx=&incx,
|
||||||
beta=&beta, y=&dL[k + 1, k], incy=&N)
|
beta=&beta, y=&dL[k + 1, k], incy=&N)
|
||||||
|
|
||||||
for i in xrange(0, N - k - 1):
|
for i in xrange(0, N - k - 1):
|
||||||
dL[k + 1 + i, k] -= dL[k + i+ 1, k + i + 1] * L[k, k + 1 + i]
|
dL[k + 1 + i, k] -= dL[k + i+ 1, k + i + 1] * L[k + 1 + i, k]
|
||||||
|
|
||||||
scale = 1.0 / L[k, k]
|
scale = 1.0 / L[k, k]
|
||||||
cblas.dscal(&n, &scale , &dL[k + 1, k], &N)
|
cblas.dscal(&n, &scale , &dL[k + 1, k], &N)
|
||||||
|
#
|
||||||
dL[k, k] -= cblas.ddot(&n, &dL[k + 1, k], &N, &L[k, k], &incx)
|
dL[k, k] -= cblas.ddot(&n, &dL[k + 1, k], &N, &L[k+1, k], &incx)
|
||||||
dL[k, k] /= (2.0 * L[k, k])
|
dL[k, k] /= (2.0 * L[k, k])
|
||||||
|
|
||||||
def backprop_gradient_par_c(double[:, :] dL, double[:, :] L):
|
def backprop_gradient_par_c(double[:, :] dL, double[:, :] L):
|
||||||
cdef double[:, ::1] dL_dK = np.tril(dL) # makes a copy, c-contig
|
cdef double[:, ::1] dL_dK = np.tril(dL) # makes a copy, c-contig
|
||||||
cdef double[:, ::1] L_cont = np.ascontiguousarray(L)
|
cdef double[:, ::1] L_cont = np.ascontiguousarray(L)
|
||||||
cdef int N = L.shape[0]
|
cdef int N = L.shape[0]
|
||||||
with nogil:
|
if True:#with nogil:
|
||||||
chol_backprop(N, dL_dK, L_cont)
|
chol_backprop(N, dL_dK, L_cont)
|
||||||
return np.asarray(dL_dK)
|
return np.asarray(dL_dK)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue