"_"代表什么?在lambda函数中是什么意思,为什么要使用它? [英] What does "_" mean in lambda function and why is it used?

查看:258
本文介绍了"_"代表什么?在lambda函数中是什么意思,为什么要使用它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个匿名函数,以"_"作为参数,我不知道它的含义以及为什么在这里使用它.

I have an anonymous function with "_" as parameters, I don't know what it means and why it is used here.

和功能是:

f = lambda _: model.loss(X, y)[0]

grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)

model.loss:

model.loss:

def loss(self, X, y=None):


    # Unpack variables from the params dictionary
    W1, b1 = self.params['W1'], self.params['b1']
    W2, b2 = self.params['W2'], self.params['b2']

    h1, h1_cache = affine_relu_forward(X, W1, b1)
    scores, h2_cache = affine_forward(h1, W2, b2)


    # If y is None then we are in test mode so just return scores
    if y is None:
        return scores

    loss, grads = 0, {}


    loss, dscores = softmax_loss(scores, y)
    loss = loss + 0.5*self.reg*(np.sum(W2**2) + np.sum(W1**2))
    dh1, grads['W2'], grads['b2'] = affine_backward(dscores,h2_cache)
    dX, grads['W1'], grads['b1'] = affine_relu_backward(dh1,h1_cache)
    grads['W1'] += self.reg*W1
    grads['W2'] += self.reg*W2

    return loss, grads

和功能 eval_numerical_gradient:

and the function eval_numerical_gradient:

def eval_numerical_gradient(f, x, verbose=True, h=0.00001):

    fx = f(x) # evaluate function value at original point
    grad = np.zeros_like(x)
    # iterate over all indexes in x
    it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
    while not it.finished:

        # evaluate function at x+h
        ix = it.multi_index
        oldval = x[ix]
        x[ix] = oldval + h # increment by h
        fxph = f(x) # evalute f(x + h)
        x[ix] = oldval - h
        fxmh = f(x) # evaluate f(x - h)
        x[ix] = oldval # restore

        # compute the partial derivative with centered formula
        grad[ix] = (fxph - fxmh) / (2 * h) # the slope
        if verbose:
            print(ix, grad[ix])
        it.iternext() # step to next dimension

    return grad

丢失函数并不复杂,我想知道"_"代表什么并在其中起作用.

Loss function isn't complex, I want to know what the "_" represented and function in there.

推荐答案

Python中的惯例是将_用于以后将不使用的变量.没有涉及任何黑魔法,它是一个普通变量名,其行为完全符合您的期望.

It's a convention in Python to use _ for variables that are not going to be used later. There is no black magic involved and it is an ordinary variable name that behaves exactly as you'd expect.

在这种情况下使用它是因为f作为回调传递,在被调用(fxph = f(x))时将传递参数.

In this case it is used because f is passed as a callback which will be passed an argument when it is called (fxph = f(x)).

如果将f实施为

f = lambda: model.loss(X, y)[0]

然后将出现TypeError: <lambda>() takes 0 positional arguments but 1 was given错误.

这篇关于"_"代表什么?在lambda函数中是什么意思,为什么要使用它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆