Добавить вместе массив 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))
Другие вопросы по тегам