Индивидуальные производные для Keras, когда обратное распространение? - PullRequest
3 голосов
/ 26 сентября 2019

Это связано с Как создать пользовательскую функцию активации с помощью Keras?

Я реализовал свою собственную функцию стоимости

import numpy as np
import math
import keras
from keras.models import Model, Sequential
from keras.layers import Input, Dense, Activation
from keras import regularizers
from keras import backend as K

def custom_activation(x):
    return (K.sigmoid(x) *2-1 ) 

x_train=np.random.uniform(low=-1,high=1,size=(200,2))

model=Sequential([
     Dense(20,input_shape=(2,)),
     Activation(custom_activation),
     Dense(2,),
     Activation('linear')
])

model.compile(optimizer='adam',loss='mean_squared_error')
model.fit(x_train,x_train,epochs=20,validation_split=0.1)

Вместо того, чтобы позволить Kerasавтоматически взять производную от моей функции приближения, могу ли я дать ей производную?

Обратите внимание, что это только пример.Моя настоящая кастомная активация намного сложнее.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Используйте декоратор @tf.custom_gradient в своей функции и определите функцию grad(dy) внутри нее, которую необходимо вернуть:

#works only with tensorflow
from keras.backend import tf

@tf.custom_gradient
def custom_activation(x):
    #... do things ...

    def grad(dy):
        #... do things ...
        return dy * the_derivative(x)

    #... do things ...

    return result, grad #return the result and the gradient function

Адаптировано из: https://www.tensorflow.org/api_docs/python/tf/custom_gradient


Iникогда не использовал это в Keras, но если он не работает мгновенно, вы можете попробовать взломать эту функцию внутри стандартной функции Keras:

layer = Lambda(lambda x: custom_activation(x))
0 голосов
/ 26 сентября 2019

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

Чтобы быть кратким, вы можете проверить TF Добавить новый оп. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...