Inteligencia artificial - Clase TPerceptron

User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

Este es un ejemplo muy simple para comenzar a aprender las ideas básicas de la Inteligencia Artificial

En este ejemplo creamos un objeto TPerceptron y le hacemos aprender el comportamiento de la función nAnd(), a continuación comprobamos los resultados y parecen correctos.
Acto seguido, creamos un nuevo objeto TPerceptron y le enseñamos el comportamiento de la función nOr(), los resultados parecen correctos nuevamente :-)

No soy ningún experto en IA, solo tengo curiosidad al respecto. Agradezco vuestros comentarios y pruebas

perceptron.prg

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oPerceptron := TPerceptron():New( 2 )
   local n, nX, nY
   
   // the perceptron learns nAnd()
   for n = 1 to 1000
      oPerceptron:Learn( { nX := nRandom( 1 ), nY := nRandom( 1 ) }, nAnd( nX, nY ) )
   next
   
   MsgInfo( oPerceptron:CalculateOutput( { 1, 1 } ), "1" )  
   MsgInfo( oPerceptron:CalculateOutput( { 1, 0 } ), "0" )
   MsgInfo( oPerceptron:CalculateOutput( { 0, 1 } ), "0" )
   MsgInfo( oPerceptron:CalculateOutput( { 0, 0 } ), "0" )

   // We create a new perceptron to learn nOr()
   oPerceptron := TPerceptron():New( 2 )

   for n = 1 to 1000
      oPerceptron:Learn( { nX := nRandom( 1 ), nY := nRandom( 1 ) }, nOr( nX, nY ) )
   next
   
   MsgInfo( oPerceptron:CalculateOutput( { 1, 1 } ), "1" )
   MsgInfo( oPerceptron:CalculateOutput( { 1, 0 } ), "1" )
   MsgInfo( oPerceptron:CalculateOutput( { 0, 1 } ), "1" )
   MsgInfo( oPerceptron:CalculateOutput( { 0, 0 } ), "0" )
   
   XBrowser( oPerceptron )

return nil

CLASS TPerceptron

   DATA aPreviousWeights
   DATA nPreviousThreshold
   DATA aWeights          
   DATA nThreshold        
   DATA nLearningRate    
   
   METHOD New( nInputs )
   
   METHOD Learn( aInputs, nExpectedOutput )
   
   METHOD CalculateOutput( aInputs )

ENDCLASS

METHOD New( nInputs ) CLASS TPerceptron

   local n

   ::nPreviousThreshold = 0
   ::aWeights = Array( nInputs )
   ::aPreviousWeights = Array( nInputs )
   ::nThreshold = 0
   ::nLearningRate = 0.1

   for n = 1 to nInputs
      ::aPreviousWeights[ n ] = 0
      ::aWeights[ n ] = 0
   next  

return Self

METHOD Learn( aInputs, nExpectedOutput ) CLASS TPerceptron

   local nError := nExpectedOutput - ::CalculateOutput( aInputs )
   local n
   
   for n = 1 to Len( ::aWeights )
      ::aWeights[ n ] = ::aPreviousWeights[ n ] + ::nLearningRate * nError * aInputs[ n ]
   next
   
   ::nThreshold = ::nPreviousThreshold + ::nLearningRate * nError

   ::aPreviousWeights = ::aWeights
   ::nPreviousThreshold = ::nThreshold

return nil

METHOD CalculateOutput( aInputs ) CLASS TPerceptron

   local nSum := 0
   local n
   
   for n = 1 to Len( ::aWeights )
      nSum += aInputs[ n ] * ::aWeights[ n ]
   next  
       
   nSum += ::nThreshold

return If( nSum > 0, 1, 0 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Carles
Posts: 1149
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Been thanked: 7 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Carles »

A,

too headache... :D
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

La idea es muy simple:

Un perceptrón es el equivalente a una neurona.

El perceptrón recibe una serie de "inputs" y cada uno de estos tiene mayor ó menor intensidad ("pesos"), y el perceptron actúa como una función de Harbour ("CalculateOutputs") recibiendo unos parámetros (los "inputs") y devuelve un resultado para indicar si el resultado calculado es igual ó no al resultado esperado ("nExpectedOutput").

El perceptrón va modificando sus pesos (DATA aWeights) según acierta ó no, y se va "adaptando" al resultado que esperamos.

Cuando el perceptrón está lo suficientemente entrenado, podemos enviarle unos valores y ver si responde correctamente. De ser así
sus "pesos" se han ajustado correctamente y el perceptrón ha aprendido :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
thefull
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by thefull »

GENIAL Antonio!!

Yo también estoy intentando sacar tiempo para hacer un poco los pinitos con IA.
Ahora solo se trata de darle "vida" al asunto ;-)

Saludos Cordiales
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
elvira
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: Inteligencia artificial - Clase TPerceptron

Post by elvira »

Maestro Antonio, nos podrías avanzar algo más de esta cosa tan interesante?.

Muy agradecida!.
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

Elvira,

El objetivo es entender la esencia de un perceptrón y convertirlo en una clase suficientemente genérica.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
thefull
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by thefull »

Aqui un video explicando dicho algoritmo;
https://www.youtube.com/watch?v=1XkjVl-j8MM
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by thefull »

En este, en castellano, Redes Neuronales Mutlticapa, básico, muy bueno para entender el Perceptron

https://www.youtube.com/watch?v=jaEIv_E29sk
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
wilsongamboa
Posts: 614
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador
Been thanked: 5 times

Re: Inteligencia artificial - Clase TPerceptron

Post by wilsongamboa »

Buenos días
Maestro Antonio
Podrías ayudarme a elaborar un perceptron cuyo ingreso de datos sean las ventas mes a mes y el año y luego hacerle que predica las ventas futuras ?
Perdón si dije algo mal
Es posible ?
Alguna idea ?
Gracias y perdón por la ignorancia
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

Wilson,

La Clase TPerceptron que he publicado es sólo un primer ejemplo muy básico para comenzar a entender la esencia de la inteligencia artificial.
Tengo la intuición de que podemos hacerla muy genérica y aprender mucho de ella y del funcionamiento de las redes neuronales.

Todas las preguntas, comentarios, aportaciones, sugerencias, etc. son bienvenidas. Hay mucho por aprender :-)

Por un lado hay que comprender en que se basa la inteligencia artificial y por otra parte aprender a usar las herramientas más potentes que ya están disponibles, entre
las que destaca TensorFlow de Google.

La forma más sencilla e intuitiva que he encontrado de usar TensorFlow, sin necesidad de programar nada, es desde una hoja de cálculo de Google.

En este ejemplo vamos a hacer que TensorFlow prediga las ventas futuras:

Image

TensorFlow va a predecir las ventas de julio y agosto, para ellos marcamos toda el area en donde están los datos de los que disponemos:

Image

En el menú seleccionamos "Add-ons", "Smart Autofill" y "Start"

Image

Ahora se nos solicita especificar la columna para la cual deseamos aplicar el Smart Autofill (autorellenado inteligente):

Image

Y un servidor remoto de TensorFlow predice los resultados que buscamos:

Image

Cristobal ha hecho grandes avances en el uso de Google docs desde FWH. Sería fantástico poder usar TensorFlow,
así de fácil, desde nuestras aplicaciones con Harbour y FWH :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
wilsongamboa
Posts: 614
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador
Been thanked: 5 times

Re: Inteligencia artificial - Clase TPerceptron

Post by wilsongamboa »

Gracias Antonio por tu interes
La idea mia es usaf akgo como lo que indicas desde mi programa automaticamente
Cristobal se podra hacer uso automagico de lo que indica Antonio?
Gracias por todo
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
thefull
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by thefull »

Antonio,
Por lo que voy entendiendo que la variable nLearningRate, es el valor alpha el cual se usa , llamado también, razón de aprendizaje,
y podrías add un method a la clase ;

Code: Select all | Expand

METHOD SetLearningRate( n ) INLINE  ::nLearningRate := n


Por lo que estoy aprendiendo, depende de que ejemplo estamos operando , este valor es modificado para ir afinando el Perceptron.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

Rafa,

si, así es.

Si comparamos un perceptrón y una función de Harbour, tenemos:

El perceptrón recibe una serie de valores (inputs). Una función de Harbour recibe una serie de parámetros (inputs).

El perceptrón mantiene una serie de pesos (weights) cuyos valores va modificando. Una función usaría unas variables estáticas, si convertimos la función a Clase, serian DATAs del objeto.

El perceptrón calcula un resultado (output) y una función devuelve un resultado (output).

Este cálculo se hace en base a multiplicar los inputs por sus respectivos pesos. Una función podría evaluar un codeblock que realizase los cálculos que fuesen necesarios (?).

El resultado de este cálculo se compara con el valor esperado (output) y asi se calcula el error (diferencia de lo esperado menos lo obtenido), y se ajustan los pesos. Asi sucesivamente
hasta que el error se aproxima mucho a cero y el perceptrón va "aprendiendo".

Podemos comparar una aplicación, que usa muchas funciones, con una red neuronal ? Que podemos aprender del perceptrón para hacer nuestras aplicaciones "inteligentes" ? :-)

Propongo este brain-storming por si alguno más se anima a darle vueltas a estas ideas :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Inteligencia artificial - Clase TPerceptron

Post by Antonio Linares »

Image

Pedro Domingos: The Master Algorithm
https://youtu.be/95XgpJAX6YE

Image

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply