我有个功能
def weights(vector, loss_function, clipping, max_iterations=100, tolerance=1e-5)
它需要调用一个较低级别的损失函数,该函数可以是其中的任意一个,其中的向量和裁剪在参数中传递:
huber_loss(vector, clipping=2.38) cauchy_loss(vector, clipping=3.27) bisquare_loss(vector, clipping=1.04)
每个损失函数都有一个特殊的缺省裁剪值,因此我们可以称之为huber_loss(向量)或huber_loss(向量,2)。
我希望在权重()中使裁剪参数是可选的,而不会在权重级别上给出默认值,因为这会给所有丢失函数提供相同的缺省值,这是错误的。
如何使裁剪参数在权重中是可选的,这样如果我们不给出一个值,它就会使用特定损失函数的默认值?(我知道我们可以设置默认的clipping=None,并测试损失函数,如果clipping=None然后设置剪裁= 2.38等等)。但我认为还有一种更优雅的方法)。
我试着用这种方式解决问题:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
但是,如果我们想在不指定max_iterations和容忍度的情况下为裁剪提供一个特定的值,则不起作用。
你知道如何用一种和弦优美的方法来解决这个问题吗?
发布于 2016-04-28 11:38:45
def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs['clipping'] = clipping
huber_loss(vector, **kwargs)发布于 2016-04-28 11:38:36
您可以使用max_iterations、容限和裁剪作为**kwargs,并检查参数中是否存在键。
def weights(vector, loss_function, **kwargs):
if kwargs['max_iterations']:
max_iterations = kwargs['max_iterations']
else:
max_iterations = 100
... # and so go on for clipping and tolerance
weights(vect, lf, maxa_iterations=5, clipping=2) 你不需要通过所有你检查的kwargs
PS。如果你找到了一个答案,那就是你需要的-接受它:)
https://stackoverflow.com/questions/36913256
复制相似问题