| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		chutullu
 
 
  Anmeldungsdatum: 18.10.2005 Beiträge: 77
 
  | 
		
			
				 Verfasst am: 20.12.2007, 13:34    Titel: Assoziativer Speicher | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Forum,
 
 
eine kleine Auskopplung aus meiner Neuronalen Netzbibliothek. Es handelt sich um einen einfachen Assoziativen Speicher im Stile eines Hopfield Netzes.
 
 
Viel Spaß beim experimentieren : 
 
 
 	  | Code: | 	 		  '***********************************************************************************
 
/' Assoziativer Speicher 
 
 
 
 
  Syntax :
 
    init (sizeOfInput, sizeOfOutput)   - Größer des Input & Output Layers festlegen
 
    learn ()                           - Input & Output Muster lernen 
 
    work  ()                           - aus einem Inputmuster ein Outputmuster 
 
                                         assoziieren
 
    resetAll ()                        - interne Methode
 
    resetIn ()                         - Eingabemuster löschen
 
    resetOut ()                        - Ausgabemuster löschen 
 
    resetWeights ()                    - Gewichte löschen 
 
    
 
'/
 
Type ddouble 
 
  dd As Double Ptr 
 
End Type
 
Type assocMemory 
 
  sizeInput  As Short 
 
  sizeOutput As Short
 
 
 
  
 
  InValue    As Double Ptr 'WICHTIG : Eingangswerte - [0,1] 
 
  OutValue   As Double Ptr 
 
  weights    As ddouble Ptr 
 
  
 
  Declare Constructor ()
 
  Declare Constructor (ByVal As Short, ByVal As Short)  
 
  Declare Destructor () 
 
  Declare Sub init (ByVal As Short, ByVal As Short) 
 
  Declare Sub learn () 
 
  Declare Sub work  () 
 
  Declare Sub resetAll ()    
 
  Declare Sub resetIn ()
 
  Declare Sub resetOut () 
 
  Declare Sub resetWeights () 
 
End Type
 
Constructor assocMemory ()
 
  'Standartwerte festlegen  
 
  With this 
 
      .sizeInput  = 10
 
      .sizeOutput = 10
 
      .resetAll () 
 
  End With
 
End Constructor
 
Constructor assocMemory (ByVal sizeOfInput As Short, ByVal sizeOfOutput As Short)
 
  With this
 
      .sizeInput = sizeOfInput
 
      .sizeOutput = sizeOfOutput
 
      .resetAll ()
 
  End With
 
End Constructor
 
Destructor assocMemory () 
 
  With this
 
      DeAllocate (.InValue)
 
      DeAllocate (.OutValue)
 
      DeAllocate (.weights)
 
  End With
 
End Destructor
 
Sub assocMemory.init (ByVal sizeOfInput As Short, ByVal sizeOfOutput As Short)
 
  With this
 
      .sizeInput = sizeOfInput
 
      .sizeOutput = sizeOfOutput
 
      .resetAll ()
 
  End With
 
End Sub
 
Sub assocMemory.learn ()
 
  Dim a As Short 
 
  Dim b As Short 
 
  With this 
 
    For a = 0 To sizeInput - 1
 
        For b = 0 To sizeOutput - 1
 
           .weights[a].dd[b] += (.InValue[a] * 2 - 1) * (.OutValue[b] * 2 - 1)
 
        Next
 
    Next
 
  End With 
 
End Sub
 
Sub assocMemory.work ()
 
  Dim a As Short 
 
  Dim b As Short
 
  Dim sum As Double  
 
  With this 
 
    For a = 0 To .sizeOutput - 1 
 
      sum = 0 
 
      For b = 0 To .sizeInput - 1
 
        sum += .InValue[b] * .weights[b].dd[a]
 
      Next
 
      If sum > 0 Then 
 
        .outValue[a] = 1
 
      Else 
 
        .outValue[a] = 0 
 
      EndIf
 
    Next
 
  End With 
 
End Sub
 
Sub assocMemory.resetAll ()
 
  With this 
 
      .resetIn()
 
      .resetOut()
 
      .resetWeights()
 
  End With
 
End Sub
 
Sub assocMemory.resetIn ()
 
  With this
 
       DeAllocate (.InValue)
 
       .InValue  = Callocate (SizeOf(Double) * .sizeInput)
 
  End With
 
End Sub
 
Sub assocMemory.resetOut ()
 
  With this 
 
    DeAllocate (.OutValue)
 
      .OutValue  = Callocate (SizeOf(Double) * .sizeInput)
 
  End With 
 
End Sub
 
Sub assocMemory.resetWeights ()
 
  Dim a As Short    
 
  With this 
 
    .weights  = Callocate (SizeOf(ddouble) * .sizeInput)
 
    For a = 0 To .sizeInput - 1
 
      .weights[a].dd = Callocate (SizeOf(Double) * sizeOutput)                
 
    Next      
 
  End With    
 
End Sub
 
 
'***********************************************************************************
 
'kleines Beispiel 
 
 
Dim t  As assocMemory = assocMemory(3,3)
 
Dim a As Short
 
 
 
t.InValue[0] = 1
 
t.InValue[1] = 0
 
t.InValue[2] = 1
 
 
t.OutValue[0] = 0
 
t.OutValue[1] = 1
 
t.OutValue[2] = 0
 
 
t.learn ()
 
'Eingang + Ausgang löschen
 
t.resetIn ()
 
t.resetOut ()
 
 
'Eingang anlegen und Ausgang assoziieren
 
t.InValue[0] = 1
 
t.InValue[1] = 0
 
t.InValue[2] = 1
 
t.work ()
 
 
 
For a = 0 To 2
 
  Print t.OutValue[a]
 
Next
 
 
 
 
Sleep | 	 
 
  Zuletzt bearbeitet von chutullu am 21.12.2007, 11:07, insgesamt einmal bearbeitet | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		jensma
 
  
  Anmeldungsdatum: 16.05.2005 Beiträge: 85 Wohnort: Gleich neben Frankfurt, zwei Zimmer neben Lloyd!
  | 
		
			
				 Verfasst am: 20.12.2007, 16:18    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Interessant.
 
 
Was ist das? | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		
			
				 Verfasst am: 20.12.2007, 16:33    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ein ganz ganz simplex neuronales Netzwerk .. ne art .. Schwache KI
 
 
 
MfG
 
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		chutullu
 
 
  Anmeldungsdatum: 18.10.2005 Beiträge: 77
 
  | 
		
			
				 Verfasst am: 21.12.2007, 11:00    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo JensMa,
 
 
ich muss Puppetmaster recht geben, es ist ne' simple KI. Wobei der Rechner ein Eingangsmuster mit einem Ausgangsmuster assoziieren kann. Das heißt der Rechner merkt sich ein Muster. Dieser spezielle Fall findet z.B. in maschinellen Briefsortiermaschienen Anwendung. In Postsammelstellen werden die Zielpostleitzahlen mittels Punkten auf dem Brief kodiert und im Briefverteilzentrum von einer Maschine ausgelesen, wobei die Verteilung der Punkte den jeweiligen Zielort/PLZ darstellt. 
 
Eine weitere Anwendung ist in der Automatisierung zu suchen wo spezielle abfolgen abgearbeitet werden müssen die man nur schwer mit normalen Algorithmen darstellen kann.  Hier wäre z. B. eine Sortiermaschiene für Weihnachtskekse denkbar, die alles was nicht rund oder viereckig ist, aussortiert.
 
Der Vorteil von künstlichen Intelligenzen liegt in der hohen  Störunanfälligkeit und dem Vermögen auch unplanbare Ereignisse abzuarbeiten. 
 
Leider wird nicht all zu viel davon publiziert, wie du siehst aus einem einfachen Grund. Der Code ist simpel und erschließt sich auch einem Menschen ohne Studium, was im übrigen auch für die anderen Neuronalen Netze wie Perceptron, ART, Kohonen und Co. gilt. Schließlich teilt die Wirtschaft nicht gern... | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		
			
				 Verfasst am: 21.12.2007, 11:17    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				es mag wohl eher daran liegen, weil die leute keine lust haben sich in dieses Thema einzuarbeiten .. es gibt genug informationen über Neuronale netzwerke udn deren aufbau und funktionweisen. aber wer sich darüber nicht informiert, der kann sich damit auch nicht beschäftgen. ich hab hier tonnenweise lesestoff rumliegen ... also .. genug is mit sicherheit vorhanden, auch in deutsch.
 
 
 
MfG
 
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		chutullu
 
 
  Anmeldungsdatum: 18.10.2005 Beiträge: 77
 
  | 
		
			
				 Verfasst am: 21.12.2007, 12:04    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				@ThePuppetMaster :
 
 
Das es genügend Literatur gibt möchte ich nicht abstreiten, jedoch wird beim Lesen schnell klar das es nicht für "normalsterbliche" gemacht worden ist. Mir ist nur ein deutsches Buch bekannt das Neuronale Netzparadigmen, abgesehen von den unzähligen Vorlesungsscripten, in C Code enthält. Wobei auch dort nur auf rudimentäre Funktionen eingegangen wird. Keiner sagt einen wie wird richig gelernt oder was ist der optimale Lernfaktor... 
 
 
Aber darüber lässt sich sicherlich streiten. | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		
			
				 Verfasst am: 21.12.2007, 12:12    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				"Theorie der Neuronalen Netze" ... Das Standardwerk schlechthin.
 
 
 
MfG
 
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		marzec
 
 
  Anmeldungsdatum: 13.10.2004 Beiträge: 267
 
  | 
		
			
				 Verfasst am: 25.12.2007, 16:05    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				deine frage nach dem optimalen lernfaktor ist auch so nicht beantwortbar. dazu mußt du dich durch die mathematik dahinter arbeiten. der faktor ist ungemein von deinem trainingsset abhängig. selbigs gilt für die anzahl dr hiddenlayer bzw nodes. eine allgemeine antwort gibts nicht. das ist auch weniger eine konspiration des staates/der wirtschaft/microsofts sondern eher ein symptom dem ich jeden tag in meiner arbeit begegne: der unwille zu lernen... _________________ Yagl - yet another gameprogramming library | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		 |