我尝试在python中使用
纽比。我的成本函数(CF)似乎工作正常。但是有一个
梯度计算有问题。它返回3x100数组,而
应该返回3x1。我认为(hypo-y)
部分有问题。在
def sigmoid(a):
return 1/(1+np.exp(-a))
def CF(theta,X,y):
m=len(y)
hypo=sigmoid(np.matmul(X,theta))
J=(-1./m)*((np.matmul(y.T,np.log(hypo)))+(np.matmul((1-y).T,np.log(1-hypo))))
return(J)
def gr(theta,X,y):
m=len(y)
hypo=sigmoid(np.matmul(X,theta))
grad=(1/m)*(np.matmul(X.T,(hypo-y)))
return(grad)
X
是100x3数组,y
是100x1,而{
The error: "ValueError: shapes (3,100) and (3,100) not aligned: 100 (dim 1) != 3 (dim 0)"
立正!在
hypo
的形状是(100,)
,而{-
操作中,hypo
根据numpy的broadcasting rules广播到形状(1, 100)
。这将产生一个(100, 100)
数组,这将导致矩阵乘法得到(3, 100)
数组。在通过使
hypo
与y
相同的形状来修复此问题:还有一个问题:
^{pr2}$scipy.optimize.minimize
(我假设您正在使用)期望渐变是一个形状(k,)
的数组,但是函数gr
返回形状(k, 1)
的向量。这很容易修复:最后的功能变成
用toy data works运行它(我没有检查结果的数学或合理性):
相关问题 更多 >
编程相关推荐