Заменить элемент в массиве python 1D, если условие выполнено с использованием значения элемента - PullRequest
0 голосов
/ 08 марта 2020

Итак, я пытаюсь написать функцию активации ELU, и вход в функцию будет представлять собой одномерный массив формы (20,1), а на выходе должен быть аналогичный массив с активацией, применяемой для каждого элемента в массиве. , Проблема в том, что, хотя я сделал это с сигмоидом или tanh и т. Д., Для ELU у нас есть условная проверка значения по данному индексу.

def elu(x): 
    d=np.zeros_like(x, dtype=float)  
    d[x<=0]=alpha * (np.exp(x) - 1)
    d[x>0]=x
    return d

Это то, что у меня пока есть, но это не работает, так как я вызываю функцию np.exp для самого массива, так что выводом будет массив, но я Я пытаюсь присвоить это значение массива в один элемент. Вопрос в том, как мне получить доступ к элементу, который выполнил такое условие, и заменить его значением этого выражения, а именно alpha*(np.exp(x)-1).

В качестве альтернативы было бы сделать для l oop циклическое переключение каждого элемента по одному для обновления массива или заставить метод работать в одном скаляре, а затем при вызове активации циклически переключаться между входами и каждый раз вызывать активацию отдельно для каждого элемента (а затем делать то же самое при вызове его производной).

1 Ответ

1 голос
/ 08 марта 2020

Вы получаете несоответствие измерения, потому что вы пытаетесь назначить массивы другого измерения. Вам необходимо также отфильтровать x, а именно:

def elu(x): 
    d=np.zeros_like(x, dtype=float)  
    d[x<=0]=alpha * (np.exp(x[x<=0]) - 1)
    d[x>0]=x[x>0]
    return d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...