No gradients provided for any variable в SGD
Я занимаюсь изучением машинного обучения и столкнулся с проблемой при написании алгоритма для полиноминальной регрессии
Используя код ниже я получал ошибку отсутствия градиентов
w = tf.Variable([0.] * num_coeffs, name='weights')
opt = tf.keras.optimizers.SGD(learning_rate=_learning_rate)
def model(x, w):
terms = []
for i in range(num_coeffs):
terms.append(w[i].numpy() * tf.math.pow(x, i))
return tf.add_n(terms)
for (x,y) in zip(trX, trY): #trX, trY - массивы numpy с данными для обучения, исходные данные и ожидаемые на выходе данные
cost = lambda: (y - model(x,w))**2 #квадрат ошибки
opt.minimize(cost, w)
После чего я заменил вызов метода model в лямбде на прямой расчет с использованием минимизируемой переменной:
cost = lambda: tf.add_n([(y - (w[i].numpy() * tf.math.pow(x, i)))**2 for i in range(len(w.numpy()))])
но и это не помогло.
При этом, изменяя значения в массиве w вручную, я вижу, что ошибка изменяется:

То есть, если я верно понимаю, зависимость ошибки от переменной w все же есть, но SGD ее не видит Пробовал изменить начальные веса с нулевых на случайные, но это также не помогло
Заранее благодарю за помощь!
Ответы (1 шт):
Решение проблемы оказалось до боли простым:
terms.append(w[i].numpy() * tf.math.pow(x, i))
Заменил на
terms.append(w[i] * tf.math.pow(x, i))
Таким образом собственно переменная, а не результат вызова ее метода, влияет на значение потерь