Reportez-vous au code du chapitre 4 du livre "Deep Learning from Zero: Theory and Implementation of Deep Learning Learned from Python" en tant que fonction de perte: erreur quadratique moyenne et erreur d'entropie croisée. ) Est implémenté en Python et Ruby.
Une bibliothèque externe est utilisée dans le processus de calcul. Utilisez NumPy pour Python et Numo :: NArray pour Ruby.
Si vous avez besoin de créer un environnement, cliquez ici. → Python vs Ruby "Deep Learning from scratch" Chapitre 1 Graphique de la fonction sin et de la fonction cos \ -Qiita
Python
import numpy as np
#Erreur de somme des carrés
def mean_squared_error(y, t):
#Somme du carré de la différence entre la sortie du réseau neuronal et chaque élément des données de l'enseignant.
return 0.5 * np.sum((y-t)**2)
#Erreur d'entropie croisée
def cross_entropy_error(y, t):
delta = 1e-7 #Ajoutez une petite valeur pour ne pas générer moins l'infini
return -np.sum(t * np.log(y + delta))
#tester
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] #La bonne réponse est 1,Tout le reste vaut 0
y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] #Lorsque la probabilité de 2 est la plus élevée(0.6)
y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] #Si la probabilité de 7 est la plus élevée(0.6)
print(mean_squared_error(np.array(y1), np.array(t)))
print(mean_squared_error(np.array(y2), np.array(t)))
print(cross_entropy_error(np.array(y1), np.array(t)))
print(cross_entropy_error(np.array(y2), np.array(t)))
Ruby
require 'numo/narray'
#Erreur de somme des carrés
def mean_squared_error(y, t)
#Somme du carré de la différence entre la sortie du réseau neuronal et chaque élément des données de l'enseignant.
return 0.5 * ((y-t)**2).sum
end
#Erreur d'entropie croisée
def cross_entropy_error(y, t)
delta = 1e-7 #Ajoutez une petite valeur pour ne pas générer moins l'infini
return -(t * Numo::NMath.log(y + delta)).sum
end
#tester
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] #La bonne réponse est 1,Tout le reste vaut 0
y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] #Lorsque la probabilité de 2 est la plus élevée(0.6)
y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] #Si la probabilité de 7 est la plus élevée(0.6)
puts mean_squared_error(Numo::DFloat.asarray(y1), Numo::DFloat.asarray(t))
puts mean_squared_error(Numo::DFloat.asarray(y2), Numo::DFloat.asarray(t))
puts cross_entropy_error(Numo::DFloat.asarray(y1), Numo::DFloat.asarray(t))
puts cross_entropy_error(Numo::DFloat.asarray(y2), Numo::DFloat.asarray(t))
Python
0.0975
0.5975
0.510825457099
2.30258409299
Ruby
0.09750000000000003
0.5974999999999999
0.510825457099338
2.302584092994546
--Python vs Ruby "Deep Learning from scratch" Résumé --Qiita http://qiita.com/niwasawa/items/b8191f13d6dafbc2fede
Recommended Posts