为了账号安全,请及时绑定邮箱和手机立即绑定

反向传播时为 Keras 定制导数?

反向传播时为 Keras 定制导数?

慕莱坞森 2022-06-07 19:59:04
我已经实现了自己的成本函数import numpy as npimport mathimport kerasfrom keras.models import Model, Sequentialfrom keras.layers import Input, Dense, Activationfrom keras import regularizersfrom keras import backend as Kdef 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 自动取我的逼近函数的导数吗?请注意,这只是一个示例。我真正的 custom_activation 要复杂得多。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

在您的函数上使用@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


我从未在 Keras 中使用过它,但如果它不能立即工作,你可以尝试将这个函数放入标准 Keras 函数中:


from keras.layers import Lambda


layer = Lambda(lambda x: custom_activation(x))


查看完整回答
反对 回复 2022-06-07
?
慕村225694

TA贡献1880条经验 获得超4个赞

我想你的问题与这个问题非常相似how-to-define-the-derivative-of-a-custom-activation-function-in-keras。该链接中接受的答案是不言自明且有用的信息。

简而言之,您可以检查TF Add New Op。.


查看完整回答
反对 回复 2022-06-07
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信