gpt4 book ai didi

python - np.dot 和 np.multiply 与 np.sum 在二进制交叉熵损失计算中的区别

转载 作者:IT老高 更新时间:2023-10-28 20:43:02 33 4
gpt4 key购买 nike

我尝试了以下代码,但没有发现 np.dotnp.multiply 与 np.sum 之间的区别

这里是 np.dot 代码

logprobs = np.dot(Y, (np.log(A2)).T) + np.dot((1.0-Y),(np.log(1 - A2)).T)
print(logprobs.shape)
print(logprobs)
cost = (-1/m) * logprobs
print(cost.shape)
print(type(cost))
print(cost)

它的输出是

(1, 1)
[[-2.07917628]]
(1, 1)
<class 'numpy.ndarray'>
[[ 0.693058761039 ]]

这是 np.multiply 与 np.sum 的代码

logprobs = np.sum(np.multiply(np.log(A2), Y) + np.multiply((1 - Y), np.log(1 - A2)))
print(logprobs.shape)
print(logprobs)
cost = - logprobs / m
print(cost.shape)
print(type(cost))
print(cost)

它的输出是

()
-2.07917628312
()
<class 'numpy.float64'>
0.693058761039

我无法理解类型和形状的差异,而两种情况下的结果值相同

即使在压缩前代码的情况下成本值与后相同但类型保持相同

cost = np.squeeze(cost)
print(type(cost))
print(cost)

输出是

<class 'numpy.ndarray'>
0.6930587610394646

最佳答案

np.dotdot product两个矩阵。

|A B| . |E F| = |A*E+B*G A*F+B*H|
|C D| |G H| |C*E+D*G C*F+D*H|

np.multiply 执行 element-wise multiplication两个矩阵。

|A B| ⊙ |E F| = |A*E B*F|
|C D| |G H| |C*G D*H|

np.sum 一起使用时,结果相等只是巧合。

>>> np.dot([[1,2], [3,4]], [[1,2], [2,3]])
array([[ 5, 8],
[11, 18]])
>>> np.multiply([[1,2], [3,4]], [[1,2], [2,3]])
array([[ 1, 4],
[ 6, 12]])

>>> np.sum(np.dot([[1,2], [3,4]], [[1,2], [2,3]]))
42
>>> np.sum(np.multiply([[1,2], [3,4]], [[1,2], [2,3]]))
23

关于python - np.dot 和 np.multiply 与 np.sum 在二进制交叉熵损失计算中的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201729/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com