Автоградная дробь np.empty_like - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь взять градиент функции, в которой я назначаю отдельные элементы массива по отдельности (назначая локальные силы для вектора глобальной силы в ВЭД), но это, кажется, нарушает Autograd - если я использую np.zerosдля глобального массива я получаю ValueError: setting an array element with a sequence, а если я использую np.empty, я получаю NotImplementedError: VJP of empty_like wrt argnums (0,) not defined.

Пример:

import autograd.numpy as np
from autograd import jacobian, grad

def test(input):
    a = np.empty_like(input)
    a[:] = input[:]

grad(test)(np.array([0.]))

Дает ошибку:

C:\Miniconda3\python.exe C:/Users/JoshuaF/Desktop/gripper/softDrone/bug_test.py
Traceback (most recent call last):
  File "C:\Miniconda3\lib\site-packages\autograd\core.py", line 31, in __init__
    vjpmaker = primitive_vjps[fun]
KeyError: <function primitive.<locals>.f_wrapped at 0x000001AB1D0AA8C8>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/JoshuaF/Desktop/gripper/softDrone/bug_test.py", line 8, in <module>
    grad(test)(np.array([0.]))
  File "C:\Miniconda3\lib\site-packages\autograd\wrap_util.py", line 20, in nary_f
    return unary_operator(unary_f, x, *nary_op_args, **nary_op_kwargs)
  File "C:\Miniconda3\lib\site-packages\autograd\differential_operators.py", line 25, in grad
    vjp, ans = _make_vjp(fun, x)
  File "C:\Miniconda3\lib\site-packages\autograd\core.py", line 10, in make_vjp
    end_value, end_node =  trace(start_node, fun, x)
  File "C:\Miniconda3\lib\site-packages\autograd\tracer.py", line 10, in trace
    end_box = fun(start_box)
  File "C:\Miniconda3\lib\site-packages\autograd\wrap_util.py", line 15, in unary_f
    return fun(*subargs, **kwargs)
  File "C:/Users/JoshuaF/Desktop/gripper/softDrone/bug_test.py", line 5, in test
    a = np.empty_like(input)
  File "C:\Miniconda3\lib\site-packages\autograd\tracer.py", line 45, in f_wrapped
    node = node_constructor(ans, f_wrapped, argvals, kwargs, argnums, parents)
  File "C:\Miniconda3\lib\site-packages\autograd\core.py", line 35, in __init__
    .format(fun_name, parent_argnums))
NotImplementedError: VJP of empty_like wrt argnums (0,) not defined

Есть ли способ использовать Autograd на массиве, который собран поэлементно?

1 Ответ

0 голосов
/ 07 ноября 2019

На основе учебника https://github.com/HIPS/autograd/blob/master/docs/tutorial.md, похоже, что присвоение массива, к сожалению, не поддерживается в функциях автоградации.

...