Inteligencia artificial - Clase TPerceptron

Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Wed Apr 19, 2017 8:38 am

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 view  RUN
#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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Inteligencia artificial - Clase TPerceptron

Postby Carles » Wed Apr 19, 2017 9:20 am

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
Carles
 
Posts: 1143
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Wed Apr 19, 2017 9:45 am

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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Re: Inteligencia artificial - Clase TPerceptron

Postby thefull » Wed Apr 19, 2017 2:03 pm

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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Inteligencia artificial - Clase TPerceptron

Postby elvira » Mon Apr 24, 2017 7:07 pm

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

Muy agradecida!.
elvira
 
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Mon Apr 24, 2017 9:29 pm

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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Inteligencia artificial - Clase TPerceptron

Postby thefull » Thu Apr 27, 2017 9:44 pm

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

Re: Inteligencia artificial - Clase TPerceptron

Postby thefull » Fri Apr 28, 2017 11:49 am

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
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Inteligencia artificial - Clase TPerceptron

Postby wilsongamboa » Fri Apr 28, 2017 2:31 pm

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
wilsongamboa
 
Posts: 600
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Sat Apr 29, 2017 7:44 am

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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Inteligencia artificial - Clase TPerceptron

Postby wilsongamboa » Sat Apr 29, 2017 2:51 pm

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
wilsongamboa
 
Posts: 600
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Inteligencia artificial - Clase TPerceptron

Postby thefull » Tue May 02, 2017 1:35 pm

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 view  RUN
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
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Tue May 02, 2017 3:20 pm

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: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Inteligencia artificial - Clase TPerceptron

Postby Antonio Linares » Tue May 16, 2017 4:48 am

Image

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

Image

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 125 guests