!2358 Fix computation of sparse_apply_proximal_adagrad

Merge pull request !2358 from YuJianfeng/proximal
This commit is contained in:
mindspore-ci-bot 2020-06-20 10:10:36 +08:00 committed by Gitee
commit 27a0aa406b
1 changed files with 3 additions and 2 deletions

View File

@ -98,10 +98,11 @@ bool SparseApplyProximalAdagradCPUKernel::Launch(const std::vector<kernel::Addre
size_t start_index = var_outer_dim_size_ * index;
size_t end_index = start_index + var_outer_dim_size_;
for (size_t j = start_index, k = var_outer_dim_size_ * i; j < end_index; ++j, ++k) {
accum[j] += grad[k] * grad[k];
auto summed_grad = unique_sparse_grad.value_[k];
accum[j] += summed_grad * summed_grad;
auto learning_rate = lr * (1 / std::sqrt(accum[j]));
auto prox_v = var[j];
prox_v -= grad[k] * learning_rate;
prox_v -= summed_grad * learning_rate;
if (l1 > 0) {
var[j] = Sign(prox_v) * std::fmax(std::fabs(prox_v) - learning_rate * l1, static_cast<float>(0.0)) /
(1 + l2 * learning_rate);