"_"代表什么?在lambda函数中是什么意思,为什么要使用它? [英] What does "_" mean in lambda function and why is it used?
问题描述
我有一个匿名函数,以"_"作为参数,我不知道它的含义以及为什么在这里使用它.
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屋!