zoukankan      html  css  js  c++  java
  • 利用有限差值计算梯度

    def eval_numerical_gradient(f, x):
      """  
      一个f在x处的数值梯度法的简单实现
      - f是只有一个参数的函数
      - x是计算梯度的点
      """ 
    
      fx = f(x) # 在原点计算函数值
      grad = np.zeros(x.shape)
      h = 0.00001
    
      # 对x中所有的索引进行迭代
      it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
      while not it.finished:
    
        # 计算x+h处的函数值
        ix = it.multi_index
        old_value = x[ix]
        x[ix] = old_value + h # 增加h
        fxh = f(x) # 计算f(x + h)
        x[ix] = old_value # 存到前一个值中 (非常重要)
    
        # 计算偏导数
        grad[ix] = (fxh - fx) / h # 坡度
        it.iternext() # 到下个维度
    
      return grad
    

    其中的np.nditer:是numpy array自带的迭代器
    flags=['multi_index']表示对a进行多重索引,具体解释看下面的代码。
    op_flags=['readwrite']表示不仅可以对a进行read(读取),还可以write(写入),即相当于在创建这个迭代器的时候,我们就规定好了有哪些权限。

  • 相关阅读:
    IOS UITableView 加载图片 卡的问题
    泛型
    正则表达式
    CSS 实现圆角表格
    CSS 横向滚动广告
    WebService
    CSS 弹出层 支持IE/FF/OP
    XML2DT DT2XML
    HttpWebRequest 调用 WebService 返回 xml
    CSS 自由伸展的三栏式版面
  • 原文地址:https://www.cnblogs.com/orangestar/p/12879836.html
Copyright © 2011-2022 走看看