Skip to content
Problemi, algoritmi e coding

Problemi, algoritmi e coding

Le magie dell'informatica

  • Home
  • Capitoli
    • Uno
    • Due
    • Tre
    • Quattro
    • Cinque
  • Errata corrige
  • Oltre il libro
    • Uno
      • Il metodo algoritmico
      • Colora la mappa
      • Colorazione di una mappa: il codice
      • Ordinamento per selezione: il codice
      • Indovina il numero
      • L’algoritmo T3: il codice
      • Ordinamento per fusione: il codice
      • Ricerca esaustiva: il codice
    • Due
      • Le domande a Google
      • Shmoogle
    • Quattro
      • Il metodo dei fattori nascosti: visualizzazione
    • Cinque
      • La macchina di Turing
      • Il gioco dell’imitazione
      • L’algoritmo del percettrone: il codice
      • Lost in translation
      • A proposito di traduttori
    • Video
      • Domande e risposte
      • Errare coding est
  • Il metodo PAC
    • Il rompicapo di Guarini
    • Come funziona il time-lapse
    • Fellini e la crittografia
    • Il problema delle donazioni di reni
  • Lucidi
    • Due
    • Tre
    • Quattro
    • Cinque
  • Parlano di noi
  • Chi siamo
  • Toggle search form

L’algoritmo del percettrone: il codice

L’algoritmo del percettrone: il codice

Questo è il codice Julia che realizza l’algoritmo di apprendimento di un percettrone (ovvero di quella che nel libro chiamiamo “rete neurale input/output”). Nel codice si usa un insieme di apprendimento con 40000 punti, un numero di epoche pari a 10 e un tasso di apprendimento pari a 0.01, ma è facile modificare questi valori per vedere gli effetti sul risultato ottenuto.

# Questa funzione genera un insieme di esempi di 
# classificazione corretta, restituendo, per ciascun
# esempio, le coordinate del punto e la risposta corretta
# corrispondente al punto (1 se il punto è sotto la 
# bisettrice, 0 altrimenti).
function inputset(nt)
	x = zeros(nt)
	y = zeros(nt)
	g = zeros(nt)
	for i in 1:nt
		x[i] = rand()
		y[i] = rand()
		if (x[i] >= y[i])
			g[i] = 1
		else
			g[i] = 0
		end
	end
	return x,y,g
end

# Questa funzione esegue il processo di apprendimento
# descritto nella figura 42 del libro (ne indica il
# numero di epoche ed eta il tasso di correzione).
function learn(x,y,g,ne,eta)
	w = zeros(3)
	w[1] = rand()
	w[2] = rand()
	w[3] = rand()
	for i in 1:ne
		for j in 1:length(x)
			eo = w[2]*x[j] + w[3]*y[j];
			if (eo > w[1] && g[j] == 0)
				w[1] = w[1]+eta
				w[2] = w[2]-eta*x[j]
				w[3] = w[3]-eta*y[j]
			elseif (eo < w[1] && g[j] == 1)
				w[1] = w[1]-eta
				w[2] = w[2]+eta*x[j]
				w[3] = w[3]+eta*y[j]
			end
		end
	end
	return w
end

# Creiamo 40000 esempi
x,y,g = inputset(40000)
# Educhiamo la rete per mille epoche e con tasso di correzione
# piuttosto elevato
w = learn(x,y,g,1000,0.01)
# Se la rete ha appreso la bisettrice, allora w[1] è circa
# uguale a 0 e w[2] è circa uguale a -w[3]
println(w)

Copyright © 2026 Problemi, algoritmi e coding.

Powered by PressBook WordPress theme