def cnvinv_gradfun(self, z, sz, y_gpu, alpha=0., beta=0.):
"""
Computes gradient used for 'lbfgsb' mode of deconv method.
See deconv for details.
"""
if z.__class__ == np.ndarray:
z = np.array(np.reshape(z,sz)).astype(np.float32)
z_gpu = cua.to_gpu(z)
grad_gpu = self.cnvtp(self.res_gpu)
# Thikonov regularization
# alpha > 0: Thikonov on the gradient of z
if alpha > 0:
grad_gpu += alpha * self.lz_gpu
# beta > 0: Thikonov on z
if beta > 0:
grad_gpu += beta * z_gpu
grad = -np.real(grad_gpu.get())
grad = grad.flatten()
return grad.astype(np.float64)
评论列表
文章目录