def logloss(y_true,y_pred): # compute log-loss
log_loss = (-y_true * math.log(y_pred, 10) - (1 - y_true) * math.log(1 - y_pred,10)).mean()
return log_loss
def grader_logloss(true,pred): # comparing log-loss using assert
loss = logloss(true,pred)
assert(loss == 0.07644900402910389)
return True
true = [1,1,0,1,0]
pred = [0.9,0.8,0.1,0.8,0.2]
grader_logloss(true,pred)
我犯了一个错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-110-edd7da954047> in <module>
5 true = [1,1,0,1,0]
6 pred = [0.9,0.8,0.1,0.8,0.2]
----> 7 grader_logloss(true,pred)
<ipython-input-110-edd7da954047> in grader_logloss(true, pred)
1 def grader_logloss(true,pred):
----> 2 loss = logloss(true,pred)
3 assert(loss == 0.07644900402910389)
4 return True
5 true = [1,1,0,1,0]
<ipython-input-109-b96b3bba92ed> in logloss(y_true, y_pred)
2 '''In this function, we will compute log loss '''
3 n = len(y_true)
----> 4 log_loss = (-y_true * math.log(y_pred, 10) - (1 - y_true) * math.log(1 - y_pred,10)).mean()
5 return log_loss
TypeError: bad operand type for unary -: 'list'
我无法获得什么是操作数类型。我已经找过了,但没有弄清楚
预期结果是
True
计算梯度
def gradient_dw(x,y,w,b,alpha,N):
'''In this function, we will compute the gardient w.r.to w '''
dw = x*(y - sigmoid(np.dot(w.T,x) + b)) - ((alpha*x)/N)
return dw
梯度的计算与比较
def grader_dw(x,y,w,b,alpha,N):
grad_dw=gradient_dw(x,y,w,b,alpha,N)
assert(grad_dw==2.613689585)
return True
grad_x=np.array([-2.07864835, 3.31604252, -0.79104357, -3.87045546, -1.14783286,
-2.81434437, -0.86771071, -0.04073287, 0.84827878, 1.99451725,
3.67152472, 0.01451875, 2.01062888, 0.07373904, -5.54586092])
grad_y=0
grad_w,grad_b = initialize_weights(grad_x)
alpha=0.0001
N=len(X_train)
grader_dw(grad_x,grad_y,grad_w,grad_b,alpha,N)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-152-b22fd39ec68a> in <module>
10 alpha=0.0001
11 N=len(X_train)
---> 12 grader_dw(grad_x,grad_y,grad_w,grad_b,alpha,N)
<ipython-input-152-b22fd39ec68a> in grader_dw(x, y, w, b, alpha, N)
1 def grader_dw(x,y,w,b,alpha,N):
2 grad_dw=gradient_dw(x,y,w,b,alpha,N)
----> 3 assert(grad_dw==2.613689585)
4 return True
5 grad_x=np.array([-2.07864835, 3.31604252, -0.79104357, -3.87045546, -1.14783286,
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不知道我的梯度求值哪里不正确,也不知道为什么即使我尝试了a.any()或a.all(),断言函数仍然失败
使用中定义的操作。由于python中的普通
numpy.array
存储true
和pred
,并稍微调整代码 使用^{list
不支持-
和*
和+
等元素操作,因此它没有mean
方法新问题的更新: 我假设你的
dw
是一个标量,因为你有grad_dw==2.613689585
。然后,在gradient_dw
函数中,更改此行:这条线
此外,您应该使用
assert grad_dw==2.613689585
而不是assert (grad_dw==2.613689585)
相关问题 更多 >
编程相关推荐