Python scipy.optimize.minimize IndexError 使用 [0,0]

我发现当我使用 .item() 从目标函数中的 numpy 数组中检索值时 scipy.optimize.minimize 有效,但是当我通过索引 [0,0] 检索时它失败了:


def sigmoid(Z):

    return 1 / (1 + np.exp(-Z))


def hyp_log(X, theta):

    return sigmoid(X @ theta)


def cost_log(theta, X, Y, reg_const=0):

    hyp = hyp_log(X, theta)

    return  (Y.T @ -np.log(hyp) + (1-Y).T @ -np.log(1-hyp)).item() / len(X) + reg_const * (theta[1:].T @ theta[1:]).item() / (2 * len(X))


result = minimize(cost_log, theta, args=(X,Y,reg_const), method='TNC')

如果我使用[0,0]索引而不是.item()在cost_log函数中使用索引,函数本身的工作方式与以前完全相同,但将IndexError: too many indices for array. 我想了解为什么会发生这种情况以及在使用最小化时在目标函数中应注意的事项。


四季花海
浏览 132回答 1
1回答

12345678_0001

由于您没有提供Xor Y,我不会看:(Y.T @ -np.log(hyp) + (1-Y).T @ -np.log(1-hyp))但与:(theta[1:].T @ theta[1:]).item()如果theta是(n,1):In [15]: theta = np.arange(5)[:,None]                                                   In [16]: theta.shape                                                                    Out[16]: (5, 1)In [17]: (theta[1:].T @ theta[1:])                                                      Out[17]: array([[30]])In [18]: (theta[1:].T @ theta[1:])[0,0]                                                 Out[18]: 30In [19]: (theta[1:].T @ theta[1:]).item()                                               Out[19]: 30但是如果你把它theta给minimize,它会把它分解成 (n,) 形状:In [20]: theta=theta.ravel()                                                            In [21]: (theta[1:].T @ theta[1:])                                                      Out[21]: 30In [22]: (theta[1:].T @ theta[1:]).shape                                                Out[22]: ()In [23]: (theta[1:].T @ theta[1:]).item()                                               Out[23]: 30In [24]: (theta[1:].T @ theta[1:])[0,0]                                                 ...IndexError: invalid index to scalar variable.I 正如最初所写的那样,item可以与单个项目数组一起使用,而不管尺寸如何。 [0,0]仅适用于二维(或更高)数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python