Добавить вместе массив NumPy и ArrayBox
Я пытаюсь использовать автоматическое дифференцирование в Python для функции стоимости. У меня возникли некоторые трудности, так как я не могу принять разницу между массивом NumPy и autograd
ArrayBox; ошибка
ValueError: setting an array element with a sequence.
Код, который я использую:
import autograd.numpy as np
from autograd import grad
n = 11 # Number of rows from original dataset
data = np.transpose(mcn_observed[:n+1, :])
# mcn_observed is simply a dataset imported with Pandas and
# converted to a NumPy array. 5000 rows and 10 columns
def cost(w):
# Cost function for autograd
output = np.empty((10,n))
output[:, 0] = 0.1 * np.ones((10))
W = w[:, :10] # Matrix of weights
k = w[:, 10] # Vector of bias
for i in range(1, n):
# Euler's method for ODE
lhs = np.dot(W, output[:, i-1]) - k*output[:, i-1]
lhs = 0.1 * lhs
output[:,i] = output[:, i-1] + lhs.reshape(output[:, i-1].shape)
# Take difference between simulated and observed data
r = np.asarray(output - data)
return sum(sum(r))
# Initialize matrix of weights and bias
W = np.random.rand(10,11) + 1.0
for j in range(10):
print("Iteration: {}".format(j))
g = grad(cost)(W)
W = W - 0.01 * g # Gradient descent
Ошибка, кажется, в output[:,i] = output[:, i-1] + lhs.reshape(output[:, i-1].shape)
,
0 ответов
Я испытываю ту же проблему. Кажется, это происходит при попытке назначить автоградный ArrayBox массиву numpy. Не имеет большого смысла для меня на данный момент...
Вот очень простой код, который вызывает эту проблему:
import autograd.numpy as np
from autograd import grad
def fun(x):
a = np.zeros((1,))
a[0] = x**2
return a
if __name__ == '__main__':
print(fun(1.0))
gradfun = grad(fun)
print(gradfun(1.0))