FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Inteligencia artificial - Clase TPerceptron
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Inteligencia artificial - Clase TPerceptron
Posted: Wed Apr 19, 2017 08: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 (fw): Select all Collapse
#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
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Wed Apr 19, 2017 09: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
HIX -> https://github.com/carles9000/hix
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Wed Apr 19, 2017 09: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Wed Apr 19, 2017 10:54 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Wed Apr 19, 2017 02: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__)
Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Mon Apr 24, 2017 07:07 PM

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

Muy agradecida!.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Mon Apr 24, 2017 09: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
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Thu Apr 27, 2017 09:44 PM

Aqui un video explicando dicho algoritmo;

https://www.youtube.com/watch?v=1XkjVl-j8MM

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Inteligencia artificial - Clase TPerceptron
Posted: 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__)
Posts: 670
Joined: Wed Oct 19, 2005 06:41 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Fri Apr 28, 2017 02: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Sat Apr 29, 2017 07: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:



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:



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



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



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



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
Posts: 670
Joined: Wed Oct 19, 2005 06:41 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Sat Apr 29, 2017 02: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
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Tue May 02, 2017 01: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 (fw): Select all Collapse
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__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Tue May 02, 2017 03: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Inteligencia artificial - Clase TPerceptron
Posted: Tue May 16, 2017 04:48 AM


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



regards, saludos

Antonio Linares
www.fivetechsoft.com