首页>Program>source

似乎numpy数组会自动忽略delta_x.以下梯度向量的输出是巨大的.对于渐变,以下代码应进行哪些更改?

import copy
import numpy as np
def numerical_gradient(f, x):
    delta_x = 1e-7    # 0.0000001
    gradient = np.zeros_like(x)    # Return an array of zeros with the same shape
    for i in range(x.size): 
        # constructs a new compound object and then, recursively, 
        # inserts copies into it of the objects found in the original
        _x1 = copy.deepcopy(x)    
        _x1[i] = x[i] + delta_x
        _y1 = f(_x1)    # f(x + delta_x)
        _x2 = copy.deepcopy(x)
        _x2[i] = x[i] - delta_x
        _y2 = f(_x2)    # f(x - delta_x)
        gradient[i] = (_y1 - _y2) / (delta_x*2)
    return gradient
def f(x):
    y = x[0]**2 + x[1]**2
    return y
numerical_gradient(f,np.array([3,3]))
最新回答
  • 10天前
    1 #

    问题在此行:

    numerical_gradient(f,np.array([3,3]))
    

    这将初始化一个整数数组; 与 deepcopyzeros_like 您创建更多的整数数组.您尝试为_x2中的整数数组元素分配2.999999,该元素将舍入为2。

    如果您这样做:

    numerical_gradient(f,np.array([3.0, 3.0]))
    

    输出符合预期。

  • python:是否有pandas函数可以使用自定义函数将数据框与自身"交叉应用"?
  • javascript:jQuery代码中的问题在哪里? 它执行两次警报