Browse Source

Fix computation of sparse_apply_proximal_adagrad

tags/v0.5.0-beta
yujianfeng 5 years ago
parent
commit
53f0a1a5ea
1 changed files with 3 additions and 2 deletions
  1. +3
    -2
      mindspore/ccsrc/kernel/cpu/sparse_apply_proximal_adagrad_cpu_kernel.cc

+ 3
- 2
mindspore/ccsrc/kernel/cpu/sparse_apply_proximal_adagrad_cpu_kernel.cc 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 start_index = var_outer_dim_size_ * index;
size_t end_index = start_index + var_outer_dim_size_; 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) { 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 learning_rate = lr * (1 / std::sqrt(accum[j]));
auto prox_v = var[j]; auto prox_v = var[j];
prox_v -= grad[k] * learning_rate;
prox_v -= summed_grad * learning_rate;
if (l1 > 0) { if (l1 > 0) {
var[j] = Sign(prox_v) * std::fmax(std::fabs(prox_v) - learning_rate * l1, static_cast<float>(0.0)) / var[j] = Sign(prox_v) * std::fmax(std::fabs(prox_v) - learning_rate * l1, static_cast<float>(0.0)) /
(1 + l2 * learning_rate); (1 + l2 * learning_rate);


Loading…
Cancel
Save