La différence entre la np.dot et np.multipliez par np.somme binaire d'entropie croisée calcul de la perte de

J'ai essayé le code suivant, mais n'ai pas trouvé la différence entre np.dot et np.multipliez par np.somme

Ici est np.dot code

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)

Sa sortie est

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

Voici le code pour np.multipliez par np.somme

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)

Sa sortie est

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

Je suis incapable de comprendre le type et la forme de la différence alors que la valeur du résultat est le même dans les deux cas

Même dans le cas de compression de l'ancien code valeur de coût devient que plus tard, mais le type reste la même

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

de sortie est

<class 'numpy.ndarray'>
0.6930587610394646
np.sum retourne un scalaire, np.dot n'est pas...
Pour obtenir une réponse concrète, vous devriez probablement vous offrir les formes de la saisie des tableaux. En général, ce que vous voyez, c'est que np.sum toujours par défaut sommes sur l'ensemble de l'entrée et retourne un scalaire. np.dot seulement sommes sur un axe (ce qui, dans votre cas semble être le seul), et conserve les dimensions.
Ce que vous faites est le calcul de la binary cross-entropy loss et les deux approches que vous avez essayé de l'équivalent, qui est pourquoi vous obtenez le même résultat. Il n'est pas clair ce que votre question réelle est d'environ.
En fait, je cherchais une valeur scalaire en réponse de np.dot
Pour obtenir une valeur scalaire, vous devez utiliser des tableaux 1d, pas de la 2d.

OriginalL'auteur Asad Shakeel | 2018-01-11