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