neuronales netz, ki, bruteforce, inputs anlegen / optimieren

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von Michl »

laz847 hat geschrieben:0..255 ist zu gross da hab ich zuviel bei was ich nicht brauche und wieder filtern muss.
Das verstehe ich nicht. a..d sind doch nur Zählvariablen oder Parameter, ob diese eine Größe von 0..200 oder 0..irgendwas einnehmen könnten, ist doch vollkommen egal, wenn Du immer nur bis 200 auswertest. Aber vielleicht denke ich auch in eine vollkommen falsche Richtung.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von laz847 »

Sorry hab mich blöd ausgedrückt :)

Ich spare durch die Address Geschichte die Verwaltung von sämtlichen Parametern, egal wieviele Inputs ich habe, ich kann jede Kombination mit einer eindeutigen Adresse ansprechen. Das System ist auf die Wertebereiche abgestimmt, Arrays, Berechnungen, Addressierung, wenn ich da jetzt mit nem anderen Wertebereich komme muss ich an allen möglichen Stellen dauernd prüfen, was auslassen, überspringen. Bin froh das ich das soweit am laufen habe :D never change a running system :D

Hab noch ne Frage, hat nicht direkt damit zu tun aber ich will nur nen neuen Thread aufmachen wenn das nen grösseres Problem wird.

Ich hab das in Threads gepackt, die laufen soweit ich sehen kann sauber, jeder für sich keine Vermischung von Daten usw... Kann von 1-10 Threads einstellen aber egal ob ich 1 oder 10 einstelle, die Main App scheint durch die Threads blockiert zu werden. Normalerweise sollte die Main App ja normal bedienbar sein oder ? Hab jetzt im Sync mal nen A.PMessages aber das ja auch nicht Sinn der Sache. Will ja nicht dauernd syncen und eigentlich will ich gar kein A.PMessages irgendwo haben....???

Kann ja jetzt schlecht den kompletten Source posten, worauf muss ich achten?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von Michl »

laz847 hat geschrieben:Kann von 1-10 Threads einstellen aber egal ob ich 1 oder 10 einstelle, die Main App scheint durch die Threads blockiert zu werden. Normalerweise sollte die Main App ja normal bedienbar sein oder ? Hab jetzt im Sync mal nen A.PMessages aber das ja auch nicht Sinn der Sache. Will ja nicht dauernd syncen und eigentlich will ich gar kein A.PMessages irgendwo haben....???
So ein Fehlverhalten bekomme ich z.B. erstellt, wenn ich zu oft synchronisiere. Evtl. hilft es, dies nur unter bestimmten Bedingungen zu tun?! z.B.:

Code: Alles auswählen

procedure TTestThread.Execute;
begin
  while not Terminated do begin
    inc(Runs);
    if Runs mod 100000 = 0 then
      Synchronize(@SendeDebug);
  end;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von laz847 »

danke aber das wars nich hatte den sync auf max 1 pro sekunde :wink:

au man is das schnell :D

habs hinbekommen keine ahnung was es genau war aber beim aufräumen hab ich den grund wohl gleich mitbeseitigt... jetzt rockts alle 4 kerne sind am anschlag und ich kann über 3 schieberegeler alles genau einstellen, es laufen gerade 4 threads und die oberfläche arbeitet ganz normal als wenn nichts wäre :D

riesen dickes dankeschön an alle die geholfen haben :D

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von mschnell »

laz847 hat geschrieben: Will ja nicht dauernd syncen ...????


TThread.Synchronize ist natürlich völlig kontraproduktiv, weil es den Thread aufhält, bis der Mainthrad irgendwann einmal dazu kommt, das Ereignis zu bearbeiten.

Also : TThread.Queue (gibt es aber nur in der svn-Version von fpc) oder Application.QueueAsyncCall.

-Michael

laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

Re: neuronales netz, ki, bruteforce, inputs anlegen / optimi

Beitrag von laz847 »

Lieben Dank aber die Threads laufen wie gesagt :wink: .

Ich möchte das Thema nochmal aufgreifen. Aktuell schaffe ich ca. 300-400 Millionen Berechnungen am Tag, das scheint aber nicht der Weg zu sein. Es hat wenig mit Intelligenz zu tun, wenn man einen 4,5,6 stelligen Zahlencode mit purer Rechenpower mit "durchprobieren" findet. Genau das ist was ich gerade mache, kommt allerdings nur ein *200 Parameter dazu stehe ich blöd da, selbst wenn ich die Rechenpower verdopple oder vervierfache, kommt noch einer * 200 dazu stehe ich wieder schlechter da.

Frage 1 - BIAS)
Bräuchte nur mal eine Bestätigung bzw. Gedanken zu dem Thema. In einigen Beispielen wird das Perceptron mit einem Bias versehen, z.B. 1.

x = (i1*w1)+(i2*w2)+(ix*wx) + BIAS;

1.1 -> Hab ich das richtig verstanden, der/das(?) Bias dient lediglich dazu, es möglich zu machen, 0 Werte über 0 zu verschieben?
1.2 -> Warum ist das nötig, sollte nicht die Anpassung der Gewichte (w) ausreichen um den möglichen Bereich abzudecken?


Frage 2 - Delta Regel/Training)

Ich will sicherstellen, dass mein Ansatz korrekt ist, wenn ich nicht mehr alle Kombinationen durchprobiere, muss ich mein Vorgehen ändern. Damit entstehen neue Fragen. Beim "durchprobieren" musste ich mir um so etwas keine Gedanken machen, ich habe am Ende einfach das beste Result genommen. Nun ist es aber so, dass die Entscheidungen an Punkten getroffen werden, an denen das Result erst viel später sichtbar wird?

Training1 ------- E0/1 ----------------------------------------------------------------------------------------------- R 1 ok

Training2 ------- E0/1 ----------------------------------------------------------------------------------------------- R 0 ok

Ich versuche das mal so darzustellen, Training( t1) und Training (t2).

Ich führe 2 Tests durch, an dem Punkt (E0/1) wird eine Entscheidung getroffen. Oben ist das Result (1 ok) unten wäre 0 richtig.

Seite 4 - Delta Regel
http://www.neuro.informatik.uni-kassel.de/downloads/NN_PDF_04/NNver04_3PE.pdf

(w0=-s, x0=1)

w (i,neu) := w (i,alt) + x(i) *(Output [soll] - Output [ist])

2.1 Was bedeutet w0=-s ? Negativer Anfangswert? Wenn ja wie gross, zufällig?
2.2 Was bedeutet x0=1 ? Ist das der Anfangswert x(i) also 1 ?
2.3 Wenn ja ist es der Wert der Anpassung also der Lernfaktor, wie ist seine Range 1 - ....?


Wenn ich alles richtig verstanden habe, starte ich mit einem zufälligen Gewicht von sagen wir -7.

Dann vergleiche ich am Result Punkt Output [soll] und Output [ist], stimmen die Outputs nicht wird das Gewicht angepasst.

w := -7 + 1*(1 - 0) = −6

Stimmen die Sollwerte sieht es so aus.

w:= −7+1*(1−1) = −7

2.4 Ist das korrekt so?

x * (1−1) ist immer 0 also bleibt x+1, der Wert wird also immer nur +Lernfaktor erhöht.

2.5 Wie verändere ich der Wert von w nach unten, wenn die Entscheidung falsch war wenn dieser entweder so bleibt oder nur gesteigert wird?
2.6 Eine mögliche/logische Antwort auf 2.5 wäre: Wenn w niemals zutrifft ist es gar nicht nötig w nochmals zu ermitteln, der Input ist sch... schlecht :D ? Korrekt?
2.7 Eine andere mögliche/logische Antwort auf 2.5 wäre: Wenn w bei -100 startet, niemals zutrifft ist w irgendwann +100 und wird auf -100 resetet - Korrekt?

2.8 Auf http://www.freebasic-portal.de/tutorials/neuronale-netze-perceptron-34.html steht jedoch das die Delta Regel so geht: Gewichte[a] = .Gewichte[a] + LF * (.gewAusgang - .Ausgang) * .Eingang[a].
Was ist richtig?

edit 2.8 beantwortet 2.5/2.6/2.7 - * .Eingang[a] verschiebt wieder nach unten :D

Riesen Danke an alle die soviel Text überhaupt lesen lach, bei vielen gehen ja nich mehr als 255 Zeichen :D

Antworten