π
<-
Chat plein-écran
[^]

Réseaux de "neurones"

Pour TI-Nspire OS 3.0 ou ultérieur.

Réseaux de "neurones"

Message non lude technolapin » 27 Aoû 2014, 16:39

Bonjour bande de gens,
j'ouvre un topic (un peu inutile) sur un sujet de programmation que je trouve génial: les réseaux neuronaux artificiels >:] (enfin du moins moi j'appelle ça comme ça et si c'est pas le nom é ben jé m'an fout) .

Bon, je le dit tout de suite, pas question de faire quoi que ce soit d'intelligent avec une calculatrice (ou alors je veux bien voir :troll: ), mais on peut faire déjà des chose assez fun avec des neurones artificiels.

Un exemple assez inutile mais fun: le calcul (ici un programme pouvant faire des addition binnaires avec des neurones quaternaires(quatre états possibles, et des neurones d'entrées-sortie):
Code: Tout sélectionner
function on.resize (ww, hh)
w, h = ww, hh
n = 32
wi = ww/n
display = true
color = {
  [0] = 12632256
, [2] = 12632256
, [1] = 0
, [3] = 0
}
mat = {}
for a = 1, n do
  mat[a] = neuron (0)
  mat[a+n] = neuron (0)
  mat[a+n*2] = neuron (1, {a, a+n})
  if a > 1 then mat[a+n*2].connect[3] = a+n*2-1 end
  mat[a+n*3] = neuron(2, {a+n*2})
end
on.enterKey()
end

neuron = class ()

function neuron: init (t, connect)
self.t = t
if t == 0 then
  self.value = math.random (0, 1)
  self.connect = {}
end
if t == 1 then
  self.value = 0
  self.connect = connect
end
if t == 2 then
  self.value = 0
  self.connect = connect
end
end
function neuron: routine ()
if self.t == 0 then
  self.value = math.random (0, 1)
elseif self.t == 1 then
  local n = 0
  if self.connect[3] then
   n = mat[self.connect[3]].value
  end
  self.value = mat[self.connect[1]].value
  +mat[self.connect[2]].value
  +math.floor(n/2)
elseif self.t == 2 then
  local n = mat[self.connect[1]].value
  if math.floor(n/2) ~= n/2 then
   self.value = 1
  else
   self.value = 0
  end
end
end


function on.paint (gc)
if display then
  for a = 1, 3 do
   for b = 1, n do
    local i = (a-1)*n+b
    gc: setColorRGB (color[mat[i].value])
    gc: fillRect ((b-1)*wi, a*32, wi, 16)
   end
  end
end
end

function on.enterKey ()
for a = 1, #mat do
  mat[a]: routine ()
end
platform.window: invalidate ()
end



Notez qu'avec ce programme, on peut traiter de nombres beaucoup plus grands que la limite de capacité de la zone de calcul ( :troll: ), et qu'il est plutôt rapide.

Ou encore, un programme encore plus inutile, qui consiste juste en une liste de "neurones" qui se transmettent un signal (bizarrement, cela donne cycliquement les même configuration de neurones actives/inactive):
Code: Tout sélectionner
function on.resize ()
mat = {}
n = 4240
for a = 1, n do
  mat[a] = true
end
for a = 1, n do
  mat[a] = neuron ()
end
cd = 3
timer.start (0.01)
end

neuron = class ()

function neuron: init ()
self.connect = {}
self.connect[1] = math.random (#mat)
self.min = math.random (3, 6)
self.on = math.random (5, 9)
self.off = math.random (0, 4)
self.value = self.off
self.cd = false
self.oncd = false
end

function neuron: routine ()
if self.cd then self.cd = self.cd-1 self.value = self.off
  if self.cd < 1 then self.cd = false end
else
  if not self.oncd then self.value = self.off else self.oncd = false end
  for a = 1, #self.connect do
   if mat[self.connect[a]].value >= self.min then
    self.value = self.on
    self.oncd = true
    self.cd = cd
    break
   end
  end
end
end

function on.timer ()
platform.window: invalidate ()
end


function on.paint (gc)
gc: setFont ("serif", "b", 6)
local x, y = 0, 0
for a = 1, #mat do
  mat[a]: routine()
  if mat[a].value == mat[a].on then
   gc: setColorRGB (0, 255, 0)
  else
   gc: setColorRGB (255, 0, 0)
  end
  y = y+1
  if y > 53 then x = x+1 y = 1 end
  gc: fillRect (x*4, y*4-4, 4, 4)
end
end

function on.enterKey ()
mat[1].value = mat[1].on
end




Si vous avez déjà fait des programmes à la noix comme cela, je vous invite à les partager dans ce topic (ou pas).
Votez Kasane Teto 2017
Avatar de l’utilisateur
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 97.8%
 
Messages: 514
Images: 25
Inscription: 31 Déc 2012, 10:48
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Chui en vacance ducon

Re: Réseaux de "neurones"

Message non lude Adriweb » 27 Aoû 2014, 17:13

Les cartes de Kohonen seraient un truc sympa à coder, d'ailleurs, dans la même veine... :)
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14614
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: Réseaux de "neurones"

Message non lude Bisam » 27 Aoû 2014, 20:27

technolapin a écrit:
Code: Tout sélectionner
if math.floor(n/2) ~= n/2 then
   self.value = 1
  else
   self.value = 0
  end
BEURK !!


Code: Tout sélectionner
self.value = math.fmod(n,2)
MIAM...
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Réseaux de "neurones"

Message non lude Levak » 27 Aoû 2014, 21:14

Et si n est toujours positif : self.value = n % 2
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: Réseaux de "neurones"

Message non lude Bisam » 27 Aoû 2014, 21:32

technolapin a écrit:
Code: Tout sélectionner
if t == 0 then
  self.value = math.random (0, 1)
  self.connect = {}
end
if t == 1 then
  self.value = 0
  self.connect = connect
end
if t == 2 then
  self.value = 0
  self.connect = connect
end

Tu le fais exprès, j'espère ?

Code: Tout sélectionner
if t == 0 then
  self.value = math.random (0, 1)
  self.connect = {}
else
  self.value = 0
  self.connect = connect
end

C'est tout de même plus simple, non ?

Bref, le but n'est pas de faire des reproches. L'idée de réseaux de neurones a l'air très bonne même si je n'y connais rien et que ton code n'explique pas grand chose.
Fais-toi plaisir et montre-nous ce qu'on peut en faire.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Réseaux de "neurones"

Message non lude technolapin » 27 Aoû 2014, 21:36

M'en fout, fait à l'arrache totale et rafistolé au max!
En fait il y a des morceaux de codes (comme les trois tests ultra moches) que j'ai laissé comme ça dans l'optique de les modifier. Mais en fait je l'ai pas fait, alors j'ai oublié :p.
Dernière édition par technolapin le 28 Aoû 2014, 07:11, édité 1 fois.
Votez Kasane Teto 2017
Avatar de l’utilisateur
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 97.8%
 
Messages: 514
Images: 25
Inscription: 31 Déc 2012, 10:48
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Chui en vacance ducon

Re: Réseaux de "neurones"

Message non lude Adriweb » 27 Aoû 2014, 22:50

(levak++, j'allais le signaler. Et puis, un coup d'indenteur ne serait pas de trop, aussi :D)
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14614
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb


Retourner vers Nspire-Lua

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1060 utilisateurs:
>1031 invités
>25 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)