首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python :函数调用低级函数的可选参数

Python :函数调用低级函数的可选参数
EN

Stack Overflow用户
提问于 2016-04-28 11:27:40
回答 2查看 232关注 0票数 1

我有个功能

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和容忍度的情况下为裁剪提供一个特定的值,则不起作用。

你知道如何用一种和弦优美的方法来解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-28 11:38:45

代码语言:javascript
运行
复制
def weights(vector, loss_function, clipping=None, 
            max_iterations=100, tolerance=1e-5)

kwargs = {}
if clipping:
    kwargs['clipping'] = clipping

huber_loss(vector, **kwargs)
票数 1
EN

Stack Overflow用户

发布于 2016-04-28 11:38:36

您可以使用max_iterations、容限和裁剪作为**kwargs,并检查参数中是否存在键。

代码语言:javascript
运行
复制
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。如果你找到了一个答案,那就是你需要的-接受它:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36913256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档