关于实例变量的方法的导数

时间:2018-03-08 10:31:11

标签: python lambda

这是我在反向传播(神经网络)中遇到的问题。 我有一个评估成本的方法,权重是同一个类的实例变量。我想计算这些权重的导数(它们可以很多)。 我该如何以“优雅”的方式做到这一点?权重在字典中。 我可以在功能之外执行此操作,还是需要更改它?

一个例子:

class T(object):

    def __init__(self):
        self.coff = {'a':2, 'b':3}

    def dfuna(self, x, y , a):
        self.coff['a'] = a   #one problem is here
        return self.fun(x,y)

    def dfunb(self, x, y , b):
        self.coff['b'] = b   #same here
        return self.fun(x,y)

    def fun(self, x, y):
        a, b = self.coff['a'], self.coff['b']
        return a*x**2 + b*y**2

T = T()
print(T.fun(1,1))

def derivative(f, x, h = 1e-6):
    return (f(x + h) - f(x - h)) / (2 * h)

x,y = 1,2
f = lambda dx : T.fun(dx,y)
print(derivative(f,x))

a = 2
g = lambda da : T.dfuna(x,y,da)
print(derivative(g,a))

b = 3
g = lambda db : T.dfunb(x,y,db)
print(derivative(g,b))

在这个例子中,我如何根据'a'和'b'来计算T.fun()的导数? 我在此示例中添加了“额外”功能dfuna()dfunb()。 问题是可能存在许多实例变量。

0 个答案:

没有答案