En tant qu'étude de l'apprentissage automatique, je lis "* Apprendre des bases: manuel d'intelligence artificielle *".
La particularité de ce livre est que le problème de fin de chapitre contient un simple programme de Python
.
Ici, il est copié avec Ruby
.
neuralnet.rb
INPUTNO = 2
HIDDENNO = 2
def forward(wh, wo, hi, e)
HIDDENNO.times do |i|
u = 0.0
INPUTNO.times do |j|
u += e[j] * wh[i][j]
end
u -= wh[i][INPUTNO]
hi[i] = f(u)
end
o = 0.0
HIDDENNO.times do |i|
o += hi[i] * wo[i]
end
o -= wo[HIDDENNO]
f(o)
end
def f(u)
return 1.0 if u >= 0
0.0
end
wh = [[-2, 3, -1], [-2, 1, 0.5]]
wo = [-60, 94, -1]
e = [[0, 0], [0, 1], [1, 0], [1, 1]]
hi = [0] * (HIDDENNO + 1)
e.each do |i|
puts "#{i}->#{forward(wh, wo, hi, i)}"
end
Il n'y a pas d'apprentissage en calculant un simple réseau neuronal hiérarchique, mais soyez prudent car il y a une erreur dans le retrait sur la 26e ligne ** (25 septembre 2019, 1ère édition, 1ère impression) **
error.py
for i in range(HIDDENNO): #Faux
for i in range(HIDDENNO): #Positif
Comme vous le savez, les erreurs d'indentation dans Python
semblent fatales, mais heureusement, vous pouvez télécharger l'exemple de code depuis la page du livre d'Ohm.
step.rb
def f(u)
return 1.0 if u >= 0
0.0
end
#Exemple de sortie
[0, 0]->0.0
[0, 1]->1.0
[1, 0]->1.0
[1, 1]->0.0
La fonction de transfert f
est une fonction d'étape
Sigmoid.rb
def f(u)
1 / (1 + Math::E ** -u)
end
#Exemple de sortie
[0, 0]->0.0006265270712940932
[0, 1]->0.6434453861326787
[1, 0]->0.0003334059232134918
[1, 1]->8.512503196901111e-16
La fonction de transfert f
est une fonction sigmoïde
ramp.rb
def f(u)
return u if u >= 0
0.0
end
#Exemple de sortie
[0, 0]->0.0
[0, 1]->1.0
[1, 0]->0.0
[1, 1]->0.0
La fonction de transfert f
est une fonction de rampe
Recommended Posts