';int';在python中,当获取两个列表的交叉熵时,对象是不可调用的错误

';int';在python中,当获取两个列表的交叉熵时,对象是不可调用的错误,python,numpy,machine-learning,Python,Numpy,Machine Learning,因此,当我运行此代码时,我得到一个名为“TypeError:“int”对象不可调用的错误“。我做了一些研究,我认为这可能是因为交叉熵变量被声明为错误的类型。如果能帮我弄清楚为什么会出现这个错误,我将不胜感激。基本上,我所做的是把两个列表,并试图通过代码计算出两个列表的交叉熵 import numpy as np # Write a function that takes as input two lists Y, P, # and returns the float corresponding

因此,当我运行此代码时,我得到一个名为“TypeError:“int”对象不可调用的错误“。我做了一些研究,我认为这可能是因为交叉熵变量被声明为错误的类型。如果能帮我弄清楚为什么会出现这个错误,我将不胜感激。基本上,我所做的是把两个列表,并试图通过代码计算出两个列表的交叉熵

import numpy as np

# Write a function that takes as input two lists Y, P,
# and returns the float corresponding to their cross-entropy.
def cross_entropy(Y, P):
    Y = np.float_(Y)
    P = np.float_(P)
    crossentropy = 0.0
    for i in range(len(Y)):
        crossentropy+=-1(Y[i]*np.log(P[i]) + (1-Y[i])*np.log(1-P[i]))
    return crossentropy

您的代码和计算有几个问题超出了您要问的问题,但主要问题是:

x = 10
-1(x)
这不起作用,您需要指定乘法,因为Python中的
-1(x)
表示“使用参数
x
调用
-1
(作为函数)”

即:


请注意,之后,根据函数的输入,您可能会收到关于除法为零的警告。

您的代码和计算有几个问题超出了您所问的问题,但主要问题是:

x = 10
-1(x)
这不起作用,您需要指定乘法,因为Python中的
-1(x)
表示“使用参数
x
调用
-1
(作为函数)”

即:

请注意,之后,根据函数的输入,您可能会收到关于除法为零的警告。

crossentropy+=-1(Y[i]*np.log(P[i])+(1-Y[i])*np.log(1-P[i]))
具有被视为函数的
1
(即“被调用”)。尝试删除这个整数,求和应该有效。

crossentropy+=-1(Y[i]*np.log(P[i])+(1-Y[i])*np.log(1-P[i]))
具有被视为函数的
1
(即“被调用”)。尝试删除这个整数,求和应该有效。

使用
交叉熵+=-(…)
而不使用
1
或者甚至使用
-=
交叉熵-=(…)
使用
交叉熵+=-(…)
而不使用
1
或者甚至使用
-=
交叉熵-=(…)