Python, глубокое обучение, пример метода градиентного спуска - PullRequest
0 голосов
/ 03 октября 2018

Я изучаю gradient descent метод с Глубокое обучение с нуля .В примере с книгой есть некоторый код, который трудно понять.это код.

def gradient_descent(f, init_x, lr = 0.01, step_num = 100):
    x = init_x
    x_hist = []
    for i in range(step_num):
        x_hist.append(x) # plot with x_hist
        grad = numerical_gradient(f, x)
        x -= lr * grad
    return x, x_hist

def function_2(x):
    return x[0]**2 + x[1]**2

init_x = np.array([-3.0, 4.0])
x, x_hist = gradient_descent(function_2, init_x, lr = 0.1, step_num = 100)

Я пытаюсь построить x_hist, чтобы увидеть уменьшение «х».Но когда я печатаю x_hist, это происходит следующим образом.

x_hist
[array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10]),
array([-6.11110793e-10,  8.14814391e-10])]

Я могу решить эту проблему, если поменяю x_hist.append(x) на x_hist.append(x.copy()).К сожалению, я не знаю, почему это не так.Кто-нибудь может сказать мне, что между ними? (Извините за английский)

1 Ответ

0 голосов
/ 03 октября 2018

Ваш список x_hist содержит ссылку на x, а не на значение.Поэтому исправление этого с помощью x_hist.append (x.copy ()) - хороший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...