У меня есть нейронная сеть, которая принимает входные данные 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) равен нулю, что приводит к проблеме.
Итак, я хочу использовать некоторую альтернативную функцию сглаживания, градиент которой не равен нулю, чтобы вместо нее подписать функцию, чтобы мои потери могли продолжать уменьшаться. Есть ли соответствующие функции? и есть ли эффективный способ самоопределения градиента в Керасе или тензорного потока.
Заранее спасибо.