Как самостоятельно определить градиент функции знака в Keras или Tensorflow? - PullRequest
0 голосов
/ 03 января 2019

У меня есть нейронная сеть, которая принимает входные данные I и выводит реальный вектор W. Для некоторой конкретной ситуации мне нужно добавить функцию знака в W и затем поместить ее в функцию потерь, чтобы вычислить мою потерю. А именно:

W = NN(I);   #the output of the neural network
W = sign(W); #can be realized by the Lambda layer in keras
loss = loss_func(W) #compute the loss with the result after sign function

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

Итак, я хочу использовать некоторую альтернативную функцию сглаживания, градиент которой не равен нулю, чтобы вместо нее подписать функцию, чтобы мои потери могли продолжать уменьшаться. Есть ли соответствующие функции? и есть ли эффективный способ самоопределения градиента в Керасе или тензорного потока.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 января 2019

tanh(ax) функция будет приблизительной, плавной и дифференцируемой функцией, вы можете контролировать крутизну, управляя a, чем выше a, тем больше крутой

...