Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 20.12.2007, 14: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, 12: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, 17:18 Titel: |
|
|
Interessant.
Was ist das? |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.12.2007, 17: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, 12: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, 12: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, 13: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, 13: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, 17: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 |
|
 |
|