Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Assoziativer Speicher

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 20.12.2007, 14:34    Titel: Assoziativer Speicher Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jensma



Anmeldungsdatum: 16.05.2005
Beiträge: 85
Wohnort: Gleich neben Frankfurt, zwei Zimmer neben Lloyd!

BeitragVerfasst am: 20.12.2007, 17:18    Titel: Antworten mit Zitat

Interessant.

Was ist das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.12.2007, 17:33    Titel: Antworten mit Zitat

Ein ganz ganz simplex neuronales Netzwerk .. ne art .. Schwache KI


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 21.12.2007, 12:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 21.12.2007, 12:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 21.12.2007, 13:04    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 21.12.2007, 13:12    Titel: Antworten mit Zitat

"Theorie der Neuronalen Netze" ... Das Standardwerk schlechthin.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 25.12.2007, 17:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz