【问题标题】:How to limit the weights of gradient descent?如何限制梯度下降的权重?
【发布时间】:2022-01-02 22:15:39
【问题描述】:

这是计算权重的代码。我想将权重限制在一个范围内,例如 (-1, 1) 怎么做?写一堂课?

def coefficients_sgd(train, l_rate, n_epoch):
  coef = [0.0 for i in range(len(train[0]))]
  for epoch in range(n_epoch):
    sum_error = 0
    for row in train:
      yhat = predict(row, coef)
      error = yhat - row[-1]
      sum_error += error**2
      coef[0] = coef[0] - l_rate * error
      for i in range(len(row)-1):
        coef[i + 1] = coef[i + 1] - l_rate * error * row[i]
    print('>epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error))
  return coef

【问题讨论】:

  • 如果w是一个权重,用max(min(w, 1), -1)处理它

标签: python machine-learning gradient-descent


【解决方案1】:

您可以通过执行以下操作来执行简单的最小-最大标准化:

import numpy as np

coef = np.array(coef)
coef = (coef - min(coef)) / (max(coef) - min(coef))

这将确保coef 内的所有元素都在(0, 1) 区间内

【讨论】:

    【解决方案2】:

    这可以看作是将数字 x 映射到区间 (1,-1) 的问题。有很多函数可以做到这一点。

    f(x) -> [-1, 1]

    也许使用以原点为中心的缩放 sigmoid 曲线:f(x) = 2*sigmoid(x) -1

    import math
    
    def sigmoid(x):
      return 1 / (1 + math.exp(-x))
    
    def normalise(x):
      return 2*sigmoid(x)-1
    
    

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2022-06-21
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2020-10-17
      • 2016-06-13
      • 2016-09-25
      • 2019-01-17
      相关资源
      最近更新 更多