所以在我的课堂上,我想选择一个函数作为我的激活函数作为参数。目前我通过
执行此操作class NeuralNetworks:
def __init(self, n_inputs, layer_vector, func='sig'):
(...)
self.func = func
def sigmoid(self, x):
(...)
def reLu(self, x):
(...)
def propagate(...):
(...)
if self.func == 'sig':
(...)
else:
(...)
(...)
if self.func == 'sig':
(...)
else:
(...)
(and so on...)
所有if / else语句最终都会使代码变得非常冗长,是否有更简洁的方法来选择函数?
答案 0 :(得分:1)
这是你的目标吗?
class NeuralNetworks:
def __init__(self, func='sigmoid'):
self.func = getattr(self, func)
def sigmoid(self, x):
print('sigmoid()', x)
def reLu(self, x):
print('reLu()', x)
def propagate(self, x):
self.func(x)
NeuralNetworks().propagate(123)
NeuralNetworks(func = 'reLu').propagate(456)
答案 1 :(得分:1)
如果有问题的函数在类的外部,您只需传入函数
即可def somefunc(parm1, parm2):
pass
nn = NeuralNetworks(inputs, vector, somefunc)
如果"功能"是类中的方法,然后您可以将所有替代项存储在dict
中并从那里访问它们:
class NeuralNetworks:
def __init__(self, n_inputs, layer_vector, func='sig'):
(...)
self.funcdict = {'sig' : self.sigmoid,
'relu' : self.reLu,
'other': self.otherfunc}
self.func = func
def sigmoid(self, x):
(...)
def reLu(self, x):
(...)
def propagate(...):
(...)
# if self.func == 'sig':
# (...)
# else:
# (...)
self.funcdict[self.func](x)
如果方法采用不同的参数,那么它会变得更复杂一些。