Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Welcher Typ von KNN empfehlenswert

1 view
Skip to first unread message

Markus Deckmann

unread,
Sep 22, 2008, 5:19:00 PM9/22/08
to
Hi Leute,

ich arbeite mich gerade in das Thema "Künstliche neuronale Netzwerke"
[1] ein und beschäftige mich hier gerade mit den verschiedenen Typen von
neuronalen Netzen die es bereits gibt.

Nehmen wir an ich habe folgenden Informationsdatensatz:

Name|Ablauf|ScreenVor|ScreenDanach

Wie würde hier jetzt mein gedanklicher Weg der Konzeptionierung eines
neuronalen Netzes aussehen? Welchen Typ würde ich wählen und wieso?

Mein Ansatz war bisher ein Hopfield-Netz [2] als Typ zu wählen und damit
mein neuronales Netzwerk aufzubauen. Oben genannter
Informationsdatensatz soll ganz abstrakt gesehen die Struktur der Muster
darstellen die ich dem neuronalen Netzwerk als Trainingsdatensätze
eingeben will.

Damit sollte es doch möglich sein wenn ich dem Netz später bspw. ein
verrauschtes Muster der Form:

XXX|XXX|ScreenVor|XXX

vorsetze, das Netz mir den dazu passenden Datensatz wie oben notiert
liefern kann.

Habe ich bis hierher ganz abstrakt schon etwas falsch verstanden oder
bin ich bisher noch auf dem richtigen Weg?

Ciao Markus

[1] http://de.wikipedia.org/wiki/K%C3%BCnstliches_neuronales_Netz
[2] http://de.wikipedia.org/wiki/Hopfield-Netz

Roman Klinger

unread,
Sep 23, 2008, 6:48:29 AM9/23/08
to
Hi,

Markus Deckmann wrote:
> Damit sollte es doch möglich sein wenn ich dem Netz später bspw. ein
> verrauschtes Muster der Form:
>
> XXX|XXX|ScreenVor|XXX
>
> vorsetze, das Netz mir den dazu passenden Datensatz wie oben notiert
> liefern kann.
>
> Habe ich bis hierher ganz abstrakt schon etwas falsch verstanden oder
> bin ich bisher noch auf dem richtigen Weg?

Grundsaetzlich richtig. Wenn Dein tatsächlicher Datensatz allerdings
tatsächlich nur 4 (boolsche) Merkmale hat, sind Neuronale Netze wohl
unnötig, das wuerd ich anders loesen.

Was ist denn Deine konkrete Anwendung?

Gruss,
Roman

Markus Deckmann

unread,
Sep 23, 2008, 6:56:48 AM9/23/08
to
Hi Roman,

>> XXX|XXX|ScreenVor|XXX


> Grundsaetzlich richtig. Wenn Dein tatsächlicher Datensatz allerdings
> tatsächlich nur 4 (boolsche) Merkmale hat, sind Neuronale Netze wohl
> unnötig, das wuerd ich anders loesen.

Es handelt sich nicht um 4 boolsche Merkmale, diese "Umwandlung" in
diese Form steht mir noch bevor (obwohl ich keine Ahnung habe bis jetzt
wie ich das bewerkstelligen kann.

Oben dargestelltes Beispiel gleicht in meinen Gedanken bis jetzt eher
einem Datenbankdatensatz mit einigen Werten. Daher meine abstrakte
Frageweise, die scheinbar aber zumindest in die richtige Richtung geht.

Dann komme ich allerdings an den Punkt das mein Datensatz die folgenden
Werte enthält:

Name: Name
Ablauf: Testtext
ScreenVor: Screenshot hinterlegt
ScreenNach: Screenhot hinterlegt

Wie bring ich hier denn jetzt eine Form zustande die ich dann an die
Neuronen meines Hopfield-Netzes anschließen kann um ihm das Muster
beizubringen? Bilder kann ich mir ja gerade noch vorstellen, die haben
eine X und eine Y Ausrichtung, da kann ich jedes Pixel mit einem Neuron
in meinem Netzwerk anschließen, aber wie erzeuge ich ein Muster bei dem
die oben dargestellten Abhängigkeiten von Name zu Ablauf zu ScreenVor zu
ScreenNach erhalten bleiben und als Muster im Hopfield-Netz hinterlegt
werden können?


> Was ist denn Deine konkrete Anwendung?

Ein Einstieg in die KI und ein Gedankenexperiment, ein konkretes
Anwendungsbeispiel habe ich leider nicht.

Ciao Markus

Wolfgang Lorenz

unread,
Sep 24, 2008, 3:13:06 AM9/24/08
to
Markus Deckmann schrieb:

> Bilder kann ich mir ja gerade noch vorstellen, die haben eine
> X und eine Y Ausrichtung, da kann ich jedes Pixel mit
> einem Neuron in meinem Netzwerk anschließen

Hahaha, deine Erwartungen sind so hoffnungslos naiv, so wird das nie
funktionieren.

Schau dir als Einführung in Computer Vision mal
http://webvision.med.utah.edu/ an, da brauchst du 2 Wochen, bis du das
durchgelesen hast. Und das ist nur die Retina! Was da für ein enormer
Aufwand an Image Processing bereits vorgenommen wird! Dann hast du eine
ungefähre Ahnung, was dich erwartet, wenn du dich mit Computer Vision
beschäftigen willst.

Einfach ein paar Pixel an ein Künstliches Neuronales Netz anschließen, da
kommst du nirgendwo hin.

--
http://home.arcor.de/w.lorenz65/mlbench
No mercy for the cheaters in machine learning!


Markus Deckmann

unread,
Sep 24, 2008, 7:43:17 AM9/24/08
to
Hi Wolfgang,

> Hahaha, deine Erwartungen sind so hoffnungslos naiv, so wird das nie
> funktionieren.

Naiv sind Kinder auch und aus denen werden teilweise auch Genies. ;-)
Bin ja noch am Anfang... ;-)


> Schau dir als Einführung in Computer Vision mal
> http://webvision.med.utah.edu/ an, da brauchst du 2 Wochen, bis du das
> durchgelesen hast. Und das ist nur die Retina! Was da für ein enormer
> Aufwand an Image Processing bereits vorgenommen wird! Dann hast du eine
> ungefähre Ahnung, was dich erwartet, wenn du dich mit Computer Vision
> beschäftigen willst.

Werde ich mir gleich mal anschauen, mal sehen inwieweit das in meine
Richtung geht...


> Einfach ein paar Pixel an ein Künstliches Neuronales Netz anschließen, da
> kommst du nirgendwo hin.

Abstrakt gesehen wahrscheinlich schon, oder? ;-)

Ciao Markus

Roman Klinger

unread,
Sep 24, 2008, 10:07:51 AM9/24/08
to
Hallo,

Markus Deckmann wrote:
> Dann komme ich allerdings an den Punkt das mein Datensatz die folgenden
> Werte enthält:
>
> Name: Name
> Ablauf: Testtext
> ScreenVor: Screenshot hinterlegt
> ScreenNach: Screenhot hinterlegt
>
> Wie bring ich hier denn jetzt eine Form zustande die ich dann an die
> Neuronen meines Hopfield-Netzes anschließen kann um ihm das Muster
> beizubringen? Bilder kann ich mir ja gerade noch vorstellen, die haben
> eine X und eine Y Ausrichtung, da kann ich jedes Pixel mit einem Neuron
> in meinem Netzwerk anschließen, aber wie erzeuge ich ein Muster bei dem
> die oben dargestellten Abhängigkeiten von Name zu Ablauf zu ScreenVor zu
> ScreenNach erhalten bleiben und als Muster im Hopfield-Netz hinterlegt
> werden können?

Eine Abhaengigkeitsannahme laesst sich ja auch auf anderen Daten machen.
Ich verstehe Dein Problem dabei noch nicht. Nimm doch einfach mal eine
Hopfield-Implementierung und tue da nicht Bilder sondern einfach
irgendwelche anderen Daten rein.

>> Was ist denn Deine konkrete Anwendung?
>
> Ein Einstieg in die KI und ein Gedankenexperiment, ein konkretes
> Anwendungsbeispiel habe ich leider nicht.

Ein Gedankenexperiment hat ja auch seine Daseinsberechtigung. Um ein
Gefuehl fuer die Sachen zu bekommen, wuerde ich mir aber auch mal etwas
Konkretes Suchen wo Du auch mit Daten rumspielen kannst.

Gruss,
Roman

Markus Deckmann

unread,
Sep 24, 2008, 11:52:40 AM9/24/08
to
Hi Roman,

> Eine Abhaengigkeitsannahme laesst sich ja auch auf anderen Daten machen.
> Ich verstehe Dein Problem dabei noch nicht. Nimm doch einfach mal eine
> Hopfield-Implementierung und tue da nicht Bilder sondern einfach
> irgendwelche anderen Daten rein.

Und wie mache ich das bzw. zu was wandelt meine Funktion/Methode es dann
um bevor es "an die Neuronen des HNN angelegt werden kann"? Ich kann mir
bisher noch nichts vorstellen wie ich bspw. einen String an ein solches
neuronales Netzwerk zur Mustererkennung anschlieᅵen kann, bei Bildern
habe ich hier noch X und Y, das entspricht den in den Erklᅵrungen
beschriebenen N x N Aufbau, zumindest wenn man das so verstehen will.
Ein String hat in meinen Augen lediglich einen X-Wert, nᅵmlich die Lᅵnge
des Strings, nur wo ist jetzt hier der Y-Wert bzw. mit welchen Werten
fᅵllt man die restlichen Stellen um es dann einspeisen zu kᅵnnen?


> Ein Gedankenexperiment hat ja auch seine Daseinsberechtigung. Um ein
> Gefuehl fuer die Sachen zu bekommen, wuerde ich mir aber auch mal etwas
> Konkretes Suchen wo Du auch mit Daten rumspielen kannst.

Erstmal wᅵrde ich es gerne abstrakt verstehen bevor ich ins Detail gehe.
Da ich Entwickler bin verliere ich mich ansonsten wieder in Detailfragen
und komme da nur sehr schwer wieder raus.

Noch dazu verstehe ich hier nicht den Sinn: Ein HNN zu beobachten um ein
Gefᅵhl zu bekommen, respektive eine Ahnung von den Ablᅵufen, dᅵrfte bei
neuronalen Netzwerken, aufgrund der Tatsache das keiner so richtig weiᅵ
was in so einem Netzwerk bei der Erkennung passiert, nicht viel bringen.
Die Grenzwerte bspw. eines HNN finde ich doch auch im Internet und kann
diese, zumindest abstrakt, erstmal in Verbindung bringen.

Ein solches "Gefᅵhl" welches ich aus so einer Implementierung ziehen
kᅵnnte wᅵre bspw. das solch ein Netz lediglich bis zu einem Verhᅵltnis
von 0,138 als assoziativer Speicher verwendet werden kann. Das damit ein
Netz von 100 Neuronen lediglich 10-14% dieser Anzahl, also 10-14 Stᅵck,
an Muster hinterlegen kann ergibt sich aus diesem Wert doch automatisch.
An Stellen wie Laufzeit oder Systemvoraussetzungen fᅵr mein neuronales
Netzwerk bin ich noch nicht, weiter seh ich bisher allerdings keine
"Gefᅵhle" die sich ᅵber abstrakte Erklᅵrungen nicht auch herleiten
lieᅵen. Auᅵer ich sehe hier was falsch.

Ciao Markus

Roman Klinger

unread,
Sep 24, 2008, 12:56:52 PM9/24/08
to
Hi,

Markus Deckmann wrote:
> Und wie mache ich das bzw. zu was wandelt meine Funktion/Methode es dann
> um bevor es "an die Neuronen des HNN angelegt werden kann"? Ich kann mir
> bisher noch nichts vorstellen wie ich bspw. einen String an ein solches
> neuronales Netzwerk zur Mustererkennung anschlieᅵen kann, bei Bildern
> habe ich hier noch X und Y, das entspricht den in den Erklᅵrungen
> beschriebenen N x N Aufbau, zumindest wenn man das so verstehen will.
> Ein String hat in meinen Augen lediglich einen X-Wert, nᅵmlich die Lᅵnge
> des Strings, nur wo ist jetzt hier der Y-Wert bzw. mit welchen Werten
> fᅵllt man die restlichen Stellen um es dann einspeisen zu kᅵnnen?

Wenn Du das Ziel verfolgst, welches Du in Deinem OP angegeben hast,
kannst Du ja zum Beispiel eine Menge von Neuronen fuer jedes Datenfeld
reservieren und Dir innerhalb dieser Menge von Neuronen eine
Representation fuer die moeglichen Werte dieses Datenfelds ueberlegen
(Bitvektor z.B.).

Oder man macht eine Kodierung, die alle moegliche Strings erlaubt, also
vielleicht eine Binaerdarstellung von ASCII-Zeichen oder so. Allerdings
wird man da an Grenzen der Laufzeit stossen.

Ich bin aber noch nicht entgueltig ueberzeugt, dass es nicht besser
waere, Dir erstmal die Fragestellung klar zu definieren um dann ueber
verschiedene Arten von neuronalen Netzen nachzudenken.

> [...] aufgrund der Tatsache das keiner so richtig weiᅵ

> was in so einem Netzwerk bei der Erkennung passiert, nicht viel bringen.

[...]

Natuerlich weiss man, was in dem Netzwerk passiert. Nur den Ueberblick
zu behalten ist nicht immer einfach.


> Ein solches "Gefᅵhl" welches ich aus so einer Implementierung ziehen
> kᅵnnte wᅵre bspw. das solch ein Netz lediglich bis zu einem Verhᅵltnis
> von 0,138 als assoziativer Speicher verwendet werden kann. Das damit ein
> Netz von 100 Neuronen lediglich 10-14% dieser Anzahl, also 10-14 Stᅵck,
> an Muster hinterlegen kann ergibt sich aus diesem Wert doch automatisch.
> An Stellen wie Laufzeit oder Systemvoraussetzungen fᅵr mein neuronales
> Netzwerk bin ich noch nicht, weiter seh ich bisher allerdings keine
> "Gefᅵhle" die sich ᅵber abstrakte Erklᅵrungen nicht auch herleiten
> lieᅵen. Auᅵer ich sehe hier was falsch.

Man kann eine Implementierung ja auch beobachten und gerade damit
erkennen, was passiert und ein Gefuehl dafuer bekommen.

Ich hab auch mal Hopfield-Netze implementiert und dann den Prozess bis
zur Konfergenz schrittweise beobachtet. Ich finde das ist durchaus sehr
stark verstaendnisfoerdernd.

Gruss,
Roman

Markus Deckmann

unread,
Sep 24, 2008, 8:23:12 PM9/24/08
to
Hi Roman,

> Wenn Du das Ziel verfolgst, welches Du in Deinem OP angegeben hast,
> kannst Du ja zum Beispiel eine Menge von Neuronen fuer jedes Datenfeld
> reservieren und Dir innerhalb dieser Menge von Neuronen eine
> Representation fuer die moeglichen Werte dieses Datenfelds ueberlegen
> (Bitvektor z.B.).

Ok, also soweit ich verstehe kann ich mir entweder selbst eine
"Kodierung" überlegen die ich dann entsprechend auf oben beschriebene
Menge an Neuronen legen kann, oder...


> Oder man macht eine Kodierung, die alle moegliche Strings erlaubt, also
> vielleicht eine Binaerdarstellung von ASCII-Zeichen oder so. Allerdings
> wird man da an Grenzen der Laufzeit stossen.

...ich verwende eine bereits vorhandene Kodierung um quasi ein
eindeutiges Muster in Form eines Binärcodes oder auch anderen Kodierung
zu erhalten. Wo siehst du hier die Laufzeitprobleme? In der Umwandlung
von Datenfeld in Kodierung oder in der Einspeisung und Abrufung aus dem
neuronalen Netzwerk.


> Ich bin aber noch nicht entgueltig ueberzeugt, dass es nicht besser
> waere, Dir erstmal die Fragestellung klar zu definieren um dann ueber
> verschiedene Arten von neuronalen Netzen nachzudenken.

Ok, ich versuche es mal:

1. Das neuronale Netz soll Muster der Form

Name|Beschreibung|ScreenVor|ScreenNach erlernen

2. Durch das anlegen eines Musters der Form

XXX|XXX|ScreenVor|XXX oder
XXX|XXX|XXX|ScreenNach

soll das Netz in der Lage sein mir das wahrscheinlichste vollständige
Muster aus dem Netz zu fischen

Das sind eigentlich für mein Gedankenexperiment erst mal alle
Vorstellungen die ich von solch einem neuronalen Netzwerk zur Zeit habe.


> Man kann eine Implementierung ja auch beobachten und gerade damit
> erkennen, was passiert und ein Gefuehl dafuer bekommen.

Das mache ich dann wenn ich einigermaßen verstanden habe was abstrakt
die Lösungen sind. Mein Plan ist dann eh ein eigenes Netz des
entsprechenden Typs aufzubauen um mein Konzept dann auch mal
auszuprobieren. Derzeit fehlt mir leider die Zeit mich direkt mit einer
Implementierung auseinanderzusetzen, derzeit bleibt leider nur Zeit für
die abstrakte Denkarbeit dahinter. Die kann ich neben meiner Arbeit
machen. ;-)


> Ich hab auch mal Hopfield-Netze implementiert und dann den Prozess bis
> zur Konfergenz schrittweise beobachtet. Ich finde das ist durchaus sehr
> stark verstaendnisfoerdernd.

Wie gesagt, ich will mir dann eh mein eigenes programmieren, aber da
gibt es noch so viele ungeklärte Fragen in diesem Bereich. Welche
Programmiersprache, welche Alternativen zu künstlichen neuronalen
Netzwerken gibt es für diese Anwendung insgesamt, usw. Um das alles in
relativ kurzer Zeit zu überblicken ist es notwendig solche Tests von
bereits fertigen Implementierungen auf einen Zeitraum zu verschieben in
der ich mich dann für eine bestimmte Implementierung aufgrund ihrer
abstrakten Eigenschaften entschlossen habe. Dazu reicht in meinen Augen
bspw. eine Aussage wie 10-14% der Neuronen können als Muster hinterlegt
werden. ;-)

Danke für deine Antworten an dieser Stelle mal...

Ciao Markus

Wolfgang Lorenz

unread,
Sep 25, 2008, 4:45:42 AM9/25/08
to
Markus Deckmann schrieb:

> 2. Durch das anlegen eines Musters der Form
>
> XXX|XXX|ScreenVor|XXX oder
> XXX|XXX|XXX|ScreenNach
>
> soll das Netz in der Lage sein mir das wahrscheinlichste vollständige
> Muster aus dem Netz zu fischen

Also ein Bild als Index.

Aus dem Netz? Aus dem Internet? Da vertuschst du uns was. Sonst hättest du
"aus der Datenbank" geschrieben.

Was ist das VOR und NACH?

Sind das natürliche Bilder (Häuser, Menschen) oder Screenshots von Windows
Programmen?

Markus Deckmann

unread,
Sep 25, 2008, 6:39:28 AM9/25/08
to
Hi Wolfgang,

>> soll das Netz in der Lage sein mir das wahrscheinlichste vollständige
>> Muster aus dem Netz zu fischen
> Also ein Bild als Index.

Ja, eigentlich 2 Bilder + einen Namen und eine Beschreibung.


> Aus dem Netz? Aus dem Internet? Da vertuschst du uns was. Sonst hättest du
> "aus der Datenbank" geschrieben.

Nee, aus dem neuronalen Netz. Das KNN soll in der Lage sein mir das
wahrscheinlichste vollständige Muster aus dem KNN zu fischen. Ich gebe
ihm ein unvollständiges Muster und das KNN gibt mir das
wahrscheinlichste vollständige Muster zurück.


> Was ist das VOR und NACH?

Bezeichnungen meines Datenfelds für das erste und zweite Bild.


> Sind das natürliche Bilder (Häuser, Menschen) oder Screenshots von Windows
> Programmen?

Das sind Screenshots von Windows Programmen, daher kommt mir das in
einem anderen Posting angegebene Computer Vision-Konzept auch etwas
überdimensioniert vor. Screenshots von Windows-Programme können doch
nicht so schwer zu erkennen sein. Da kann ich zusätzlich zu den Bildern
evtl. ja auch noch die Window-Informationen des Fensters dazu speichern,
damit ist bereits klar welche Schaltflächen es gibt und wo diese
Koordinatenmäßig liegen. Damit sollte sich durch so ein KNN doch eine
Menge Information gewinnen lassen um meine Anforderung zu erfüllen, oder?

Ciao Markus

Wolfgang Lorenz

unread,
Sep 26, 2008, 4:04:49 AM9/26/08
to
Markus Deckmann schrieb:

>> Also ein Bild als Index.
>
> Ja, eigentlich 2 Bilder + einen Namen und eine Beschreibung.

Das ist dann nicht der Index, sondern der vollständige Datensatz. Bist du
sicher, dass dein Computerfachwissen ausreicht, um dich mit KNNs zu
beschäftigen?


> Nee, aus dem neuronalen Netz. Das KNN soll in der Lage sein mir das
> wahrscheinlichste vollständige Muster aus dem KNN zu fischen. Ich gebe ihm
> ein unvollständiges Muster und das KNN gibt mir das wahrscheinlichste
> vollständige Muster zurück.

Zum Abspeichern der Datensätze ist kein neuronales Netz nötig, das ist ein
typischer Anwendungsfall für eine Datenbank. Ein KNN kann man dann für die
Suche einsetzen, es liefert zu einem ähnlichen Bild dann eine Liste von
passenden Namen zurück. So ähnlich wie eine Suchmaschine. Der Name ist dann
der Primärindex in deiner Datenbank, und der darf nicht doppelt vorkommen.
Genau wie eine URL bei der Suchmaschine, die ist auch weltweit eindeutig.


>> Was ist das VOR und NACH?
>
> Bezeichnungen meines Datenfelds für das erste und zweite Bild.

Ich wollte eigentlich wissen, was der Unterschied zwischen den Bildern ist,
also welche Operationen auf ScreenVor angewendet werden, um das ScreenNach
zu bekommen. Muss ja was ganz Furchtbares sein, wenn du dich in solche
Wortspielereien flüchtest.


> Das sind Screenshots von Windows Programmen, daher kommt mir das in einem
> anderen Posting angegebene Computer Vision-Konzept auch etwas
> überdimensioniert vor. Screenshots von Windows-Programme können doch nicht
> so schwer zu erkennen sein. Da kann ich zusätzlich zu den Bildern evtl. ja
> auch noch die Window-Informationen des Fensters dazu speichern, damit ist
> bereits klar welche Schaltflächen es gibt und wo diese Koordinatenmäßig
> liegen. Damit sollte sich durch so ein KNN doch eine Menge Information
> gewinnen lassen um meine Anforderung zu erfüllen, oder?

Wenn sich die Koordinaten nicht ändern, kann das ein ganz normaler
Bildvergleich erledigen. Dafür braucht man kein KNN, da kann man sequentiell
durch die Datenbank gehen, wenn die nicht größer als ein paar hundert MByte
ist.

Wenn es allerdings Positionsunterschiede zwischen Suchmuster und gesuchtem
Bild gibt, zum Beispiel verschobene Buttons oder eine andere
Bildschirmauflösung, dann fällt das in den Bereich Computer Vision, und dann
wirds kompliziert.

Message has been deleted

Markus Deckmann

unread,
Sep 26, 2008, 7:29:20 AM9/26/08
to
Hi nojoe222,

> http://de.wikipedia.org/wiki/Selbstorganisierende_Karte
> http://tinyurl.com/3etbb5
> ...
> Just my 1st thought. ;)

Danke für deine Links, werde ich mir mal anschauen, vielleicht bringt es
mich in meinem Verständniss ja ein wenig weiter.

Ciao Markus

Markus Deckmann

unread,
Sep 26, 2008, 4:59:09 AM9/26/08
to
Hi Wolfgang,

> Das ist dann nicht der Index, sondern der vollständige Datensatz. Bist du
> sicher, dass dein Computerfachwissen ausreicht, um dich mit KNNs zu
> beschäftigen?

Ich glaub das ich dazu als IHK-Fachinformatiker durchaus in der Lage
sein sollte, ja. Ich fange gerade erst an mit KNNs, du hast sicherlich
auch nicht gleich alles richtig verstanden wie du angefangen hast, oder?


> Zum Abspeichern der Datensätze ist kein neuronales Netz nötig, das ist ein
> typischer Anwendungsfall für eine Datenbank. Ein KNN kann man dann für die
> Suche einsetzen, es liefert zu einem ähnlichen Bild dann eine Liste von
> passenden Namen zurück. So ähnlich wie eine Suchmaschine. Der Name ist dann
> der Primärindex in deiner Datenbank, und der darf nicht doppelt vorkommen.
> Genau wie eine URL bei der Suchmaschine, die ist auch weltweit eindeutig.

Ist ein KNN dann eher ein Suchalgorithmus? Dann verstehe ich nicht wieso
man das Netz mit den Mustern vorher "befüllen" muss. Ansonsten stellt
das KNN doch auch so eine Art Speicher dar und dann kann man doch auch
hin und her wandeln, oder?


> Ich wollte eigentlich wissen, was der Unterschied zwischen den Bildern ist,
> also welche Operationen auf ScreenVor angewendet werden, um das ScreenNach
> zu bekommen. Muss ja was ganz Furchtbares sein, wenn du dich in solche
> Wortspielereien flüchtest.

Na was wird auf einem Screenshot VOR einer Aktion und auf einem
Screenshot NACH einer Aktion abgebildet sein? Welche Operationen kannst
du dir aufgrund der Möglichkeiten ein Softwareprogramm zu bedienen
selbst eruieren. ;-)


> Wenn sich die Koordinaten nicht ändern, kann das ein ganz normaler
> Bildvergleich erledigen. Dafür braucht man kein KNN, da kann man sequentiell
> durch die Datenbank gehen, wenn die nicht größer als ein paar hundert MByte
> ist.

Die Koordinaten werden sich mit Sicherheit ändern, sicher gibt es in
jedem Fenster bspw. einen OK-Button, dieser ist aber nicht immer an der
gleichen Stelle am Monitor. Ob eine DB oder ein KNN hier zum Einsatz
kommen kann versuche ich ja gerade herauszufinden, ich denke das für
meine Idee einer Software in diesem Bereich die DB schnell zu langsam
wird, außerdem soll das Netz ja auch durch die bereits eingespeisten
Muster fähig sein neue Bedienungswege abzuleiten, das schaffe ich mit
einer Datenbank nicht so ohne weiteres.


> Wenn es allerdings Positionsunterschiede zwischen Suchmuster und gesuchtem
> Bild gibt, zum Beispiel verschobene Buttons oder eine andere
> Bildschirmauflösung, dann fällt das in den Bereich Computer Vision, und dann
> wirds kompliziert.

Es würde zu den Bildern allerdings doch auch eine Menge an Informationen
noch zusätzlich bekommen wie Anzahl der Fenster am Monitor, deren
Titelleiste, usw. Das KNN ist also doch nicht alleine auf die
Screenshots angewiesen um auszuwerten wo sich eine Schaltfläche befindet
sondern kann dazu auch die zusätzlichen Daten verwenden. Damit sollte
sich doch ein ziemlich genaues Quellmuster herstellen lassen. Reine
Bilderkennung will ich ja gar nicht betreiben. ;-)

Ciao Markus

Wolfgang Lorenz

unread,
Sep 26, 2008, 9:33:38 AM9/26/08
to
Markus Deckmann schrieb:

> Ist ein KNN dann eher ein Suchalgorithmus? Dann verstehe ich nicht wieso
> man das Netz mit den Mustern vorher "befüllen" muss. Ansonsten stellt das
> KNN doch auch so eine Art Speicher dar und dann kann man doch auch hin und
> her wandeln, oder?

Ein KNN, so wie du es laut deiner Beschreibung brauchst, arbeitet als
Assoziativspeicher. Es wird mit Paaren aus Bildern und zugehörigen Namen
befüllt. Wenn man dann später ein Bild als Suchmuster anlegt, liefert das
KNN den Namen zurück -- nur den Namen, nicht das Bild! Mit dem Namen gehst
du dann in deine Datenbank und lässt dir den kompletten Datensatz anzeigen.

Wenn du das Ganze ohne Datenbank machen willst, brauchst du ein spezielles
KNN, das sich auch als Speicher verwenden lässt. Da gibt es vermutlich
Netztypen, die das können. Damit kenne ich mich nicht aus. Normalerweise
überlagern sich alle eintrainierten Bilder, damit das Netzwerk
generalisieren kann. Mit anderen Worten eine Einbahnstraße. Aus diesem
Mischmasch dann "rückwärts" wieder ein einzelnes Exemplar herauszuziehen ist
schwierig, wenn es nicht von vornherein vom Netzwerk unterstützt wird.


> Na was wird auf einem Screenshot VOR einer Aktion und auf einem Screenshot
> NACH einer Aktion abgebildet sein? Welche Operationen kannst du dir
> aufgrund der Möglichkeiten ein Softwareprogramm zu bedienen selbst
> eruieren. ;-)

Mir ist immer noch nicht klar, was du eigentlich willst. Da kann ich nur
spekulieren.

Also zum Beispiel der Benutzer zeichnet eine Linie in einem Malprogramm. Er
sagt dazu deinem Programm vorher "neuer Name: Linie zeichnen" und gibt einen
Beschreibungstext ein. Dann geht er zum Malprogramm und dein Programm macht
einen Snapshot ScreenVor. Jetzt zeichnet er seine Linie. Schaltet er
anschließend wieder zu deinem Programm um, macht das den Snapshot ScreenNach
und der Datensatz ist fertig.

Und jetzt soll dein Programm vermutlich den Bildschirm von dem Malprogramm
beobachten, da ab und zu einen Snapshot von machen, damit in die Datenbank
gehen und nachschauen, was der Benutzer so treibt. Wenn der jetzt wieder
eine Linie zeichnet, dann soll dein Programm von selber erkennen, dass der
Benutzer gerade den Datensatz "Linie zeichnen" ausgeführt hat. Die Aktionen
kann es dann anhand der Namens protokollieren, das spart Speicher.

Ist es das, was du vorhast? Was ist, wenn die Linie an einer anderen
Position ist, unerschiedlich lang, einen anderen Winkel hat, eine andere
Stärke, gemustert ist oder anders gefärbt? Das sieht nach einer Menge
Probleme aus. Für sowas brauchst du eindeutig Computer Vision, das geht mit
herkömmlicher Bildverarbeitung nicht.


> Die Koordinaten werden sich mit Sicherheit ändern, sicher gibt es in jedem
> Fenster bspw. einen OK-Button, dieser ist aber nicht immer an der gleichen
> Stelle am Monitor.

OK Buttons gibt es nur in speziellen Fenstern, unter Windows heißen die
Dialogboxen. Und Suchformulare im Webbrowser haben auch einen.


> Ob eine DB oder ein KNN hier zum Einsatz kommen kann versuche ich ja
> gerade herauszufinden, ich denke das für meine Idee einer Software in
> diesem Bereich die DB schnell zu langsam wird, außerdem soll das Netz ja
> auch durch die bereits eingespeisten Muster fähig sein neue Bedienungswege
> abzuleiten, das schaffe ich mit einer Datenbank nicht so ohne weiteres.

Ein Netz, das neue Bedienungswege ableiten kann? Da musst du ein Beispiel
angeben, sonst verstehe ich das nicht.


> Es würde zu den Bildern allerdings doch auch eine Menge an Informationen
> noch zusätzlich bekommen wie Anzahl der Fenster am Monitor, deren
> Titelleiste, usw. Das KNN ist also doch nicht alleine auf die Screenshots
> angewiesen um auszuwerten wo sich eine Schaltfläche befindet sondern kann
> dazu auch die zusätzlichen Daten verwenden. Damit sollte sich doch ein
> ziemlich genaues Quellmuster herstellen lassen. Reine Bilderkennung will
> ich ja gar nicht betreiben. ;-)

Wenn du nur recorden willst, was der Anwender tippt und wo er draufklickt,
das geht unter Windows mit Hooks. Da ist es egal, wo das Ding positioniert
ist. Du siehst einfach unter dem Mauszeiger nach, welches Fenster da drunter
ist, das ist der Button, holst dir davon den Text und hangelst dich anhand
der Parent-Struktur zum Toplevel Fenster hoch. Davon holst du dir dann den
Modulnamen, das ist das EXE. Das ist aber herkömmliche Windows
Programmierung, dafür brauchst du keine Screenshots auszuwerten.

Markus Deckmann

unread,
Sep 26, 2008, 10:49:25 AM9/26/08
to
Hi Wolfgang,

> Ein KNN, so wie du es laut deiner Beschreibung brauchst, arbeitet als
> Assoziativspeicher. Es wird mit Paaren aus Bildern und zugehörigen Namen
> befüllt. Wenn man dann später ein Bild als Suchmuster anlegt, liefert das
> KNN den Namen zurück -- nur den Namen, nicht das Bild! Mit dem Namen gehst
> du dann in deine Datenbank und lässt dir den kompletten Datensatz anzeigen.

Die Paare der Bilder sind dabei das Muster und der Name ihr
Identifikationsmerkmal oder sehe ich hier was falsch? Wenn mir das KNN
den Namen liefern kann, wieso dann nicht auch den Inhalt eines Bildes in
bspw. Binärform.


> Wenn du das Ganze ohne Datenbank machen willst, brauchst du ein spezielles
> KNN, das sich auch als Speicher verwenden lässt. Da gibt es vermutlich
> Netztypen, die das können. Damit kenne ich mich nicht aus. Normalerweise
> überlagern sich alle eintrainierten Bilder, damit das Netzwerk
> generalisieren kann. Mit anderen Worten eine Einbahnstraße. Aus diesem
> Mischmasch dann "rückwärts" wieder ein einzelnes Exemplar herauszuziehen ist
> schwierig, wenn es nicht von vornherein vom Netzwerk unterstützt wird.

siehe Fragen oben...


> Mir ist immer noch nicht klar, was du eigentlich willst. Da kann ich nur
> spekulieren.

Ich versuche es nochmal zu erklären...


> Also zum Beispiel der Benutzer zeichnet eine Linie in einem Malprogramm. Er
> sagt dazu deinem Programm vorher "neuer Name: Linie zeichnen" und gibt einen
> Beschreibungstext ein. Dann geht er zum Malprogramm und dein Programm macht
> einen Snapshot ScreenVor. Jetzt zeichnet er seine Linie. Schaltet er
> anschließend wieder zu deinem Programm um, macht das den Snapshot ScreenNach
> und der Datensatz ist fertig.

a) Der Benutzer spielt bei meinem Konzept überhaupt keine Rolle mehr,
den möchte ich komplett ersetzen durch eine Vollautomation

b) er sagt meinem Programm vorher "Neuer Name: Linie zeichnen" und gibt
dann in die Beschreibung einen möglichst allgemeingültigen
Automationscode ein der diese Aktion ausführt.


> Und jetzt soll dein Programm vermutlich den Bildschirm von dem Malprogramm
> beobachten, da ab und zu einen Snapshot von machen, damit in die Datenbank
> gehen und nachschauen, was der Benutzer so treibt. Wenn der jetzt wieder
> eine Linie zeichnet, dann soll dein Programm von selber erkennen, dass der
> Benutzer gerade den Datensatz "Linie zeichnen" ausgeführt hat. Die Aktionen
> kann es dann anhand der Namens protokollieren, das spart Speicher.

Falsch...meine Software soll in der Lage sein aufgrund von einigen
Grunddaten die andere Software zu "erlernen" und automatisiert zu testen
und dabei im besten Falle auch "neue" Bedienungswege aus bereits
bestehenden ableiten die nicht direkt als Verhalten eingespeist wurden
sondern sich aus der Ableitung ergeben (wie diese dann im Detail
aussieht weiß ich noch nicht).


> Ist es das, was du vorhast? Was ist, wenn die Linie an einer anderen
> Position ist, unerschiedlich lang, einen anderen Winkel hat, eine andere
> Stärke, gemustert ist oder anders gefärbt? Das sieht nach einer Menge
> Probleme aus. Für sowas brauchst du eindeutig Computer Vision, das geht mit
> herkömmlicher Bildverarbeitung nicht.

Dann soll das KNN erkennen das es sich, im Bezug auf Bild und
Automationscode, lediglich um andere Koordinaten handelt und dann den
Automationscode mit geänderten Parametern durchführen. Wobei du dir mit
einem Zeichenprogramm schon eines der schwersten Beispiele rausgesucht
hast in meinen Augen. ;-) Ich war bisher auf einigermaßen sauber
programmierten Windows-Standard-Anwendungen wie ein
Warenwirtschaftssystem das über Dialoge und Ansichten läuft und keine
großartige Grafik anzeigt, die Grafik der eigentlichen Darstellung mal
ausgenommen. Ob dieses KOnzept dann bspw. für CAD-Anwendungen auch
anwendbar ist weiß ich nicht so genau, hab ich mir noch nicht überlegt.


> Ein Netz, das neue Bedienungswege ableiten kann? Da musst du ein Beispiel
> angeben, sonst verstehe ich das nicht.

Soweit bin ich in meiner Theorie noch nicht, aber ich stelle mir bspw.
über eine Fuzzy-Logik vor entsprechend schon bekannte Eingaben quasi zu
verfälschen um diese dann in das Netz einzuspeisen und dessen Ausgabe zu
verarbeiten.


> Wenn du nur recorden willst, was der Anwender tippt und wo er draufklickt,
> das geht unter Windows mit Hooks. Da ist es egal, wo das Ding positioniert
> ist. Du siehst einfach unter dem Mauszeiger nach, welches Fenster da drunter
> ist, das ist der Button, holst dir davon den Text und hangelst dich anhand
> der Parent-Struktur zum Toplevel Fenster hoch. Davon holst du dir dann den
> Modulnamen, das ist das EXE. Das ist aber herkömmliche Windows
> Programmierung, dafür brauchst du keine Screenshots auszuwerten.

Nur recorden ist langweilig, das mache ich bereits beruflich. Ich will
automatisiert testen und das System selbstständig lernen lassen.

Ciao Markus

Wolfgang Lorenz

unread,
Sep 26, 2008, 11:43:08 AM9/26/08
to
Markus Deckmann schrieb:

> Wenn mir das KNN den Namen liefern kann, wieso dann nicht auch
> den Inhalt eines Bildes in bspw. Binärform.

Weil das KNN den Inhalt eines Bildes nicht vollständig abspeichert. Es
speichert nur das in den Gewichten ab, was später nötig ist, um den
richtigen Namen zum Bild in Erinnerung zu rufen.


> a) Der Benutzer spielt bei meinem Konzept überhaupt keine Rolle mehr, den
> möchte ich komplett ersetzen durch eine Vollautomation

Du hast als Beispiel ein Warenwirtschaftssystem angegeben, das wird von
vielen Leuten in einer Firma genutzt und bedient. Und diese Leute willst du
jetzt alle ersetzen, aber die ursprüngliche Software beibehalten? Das klingt
nach einem riesigen Haufen Scheiße. Warum nimmst du nicht gleich ein
Warenwirtschaftssystem her, das speziell für eine vollautomatische Fabrik
programmiert wurde?


> b) er sagt meinem Programm vorher "Neuer Name: Linie zeichnen" und gibt
> dann in die Beschreibung einen möglichst allgemeingültigen Automationscode
> ein der diese Aktion ausführt.

Also keine Textbeschreibung für einen Menschen sondern ein ausführbares
Programm für eine Maschine.


> meine Software soll in der Lage sein aufgrund von einigen Grunddaten die
> andere Software zu "erlernen" und automatisiert zu testen

Es gibt automatisierte Testprogramme, die nach Änderungen an einer Software
vorher aufgezeichnete Bedienungsschritte wiederholen und nachsehen, ob die
Bildschirmausgaben noch übereinstimmen, ob sich also keine Fehler
eingeschlichen haben.


> und dabei im besten Falle auch "neue" Bedienungswege aus bereits
> bestehenden ableiten die nicht direkt als Verhalten eingespeist wurden
> sondern sich aus der Ableitung ergeben (wie diese dann im Detail aussieht
> weiß ich noch nicht).

Das klingt nach Science Fiction. Man kann schon ein Programm schreiben, was
irgendwie in einem anderen Programm herumklickt und probiert, das zum
Absturz zu bringen. Sowas nennt man Stress-Test, und es findet hauptsächlich
nicht abgefangene Exceptions. Aber ein Ziel ausser Fehler finden hat das
ganze nicht. Dafür müsste man noch ein Reinforcement Signal einspeisen, was
sagt "das war gut" oder "das war schlecht". Da muss dann aber wieder ein
Mensch dabeisitzen, der macht dann den Kritiker. Weil Exploration aber so
elends lange dauert, wirst du keinen finden, der diesen Kritikerjob
übernimmt. Doofes herumprobieren ist Müll, zuschauen und nachmachen ist viel
effektiver.


>> Ein Netz, das neue Bedienungswege ableiten kann? Da musst du ein Beispiel
>> angeben, sonst verstehe ich das nicht.
>
> Soweit bin ich in meiner Theorie noch nicht, aber ich stelle mir bspw.
> über eine Fuzzy-Logik vor entsprechend schon bekannte Eingaben quasi zu
> verfälschen um diese dann in das Netz einzuspeisen und dessen Ausgabe zu
> verarbeiten.

Ich wollte eigentlich nicht wissen, wie du das implementierst, sondern ein
sinnvolles Beispiel, zum Beispiel für dein Warenwirtschaftssystem. Wenn am
Lieferanteneingang 10 Paletten mit Gurken ankommen, was soll dein
wegrationalisierter Lagerarbeiter dann eintippen? 11 Paletten mit Tomaten,
oder was?


> Nur recorden ist langweilig, das mache ich bereits beruflich. Ich will
> automatisiert testen und das System selbstständig lernen lassen.

Für selbständiges Lernen brauchst du eine Beurteilungsfunktion, und wo soll
die herkommen? Wann ist ein Warenwirtschaftssystem "gut"? Wenn keine
Lieferengpässe auftreten und kein Überschuss im Lager ist? Da muss der nur
den Bedarf richtig vorhersagen, das können doch die heutigen Programme
schon, oder?

Markus Deckmann

unread,
Sep 26, 2008, 1:00:50 PM9/26/08
to
Hi Wolfgang,

>> Wenn mir das KNN den Namen liefern kann, wieso dann nicht auch
>> den Inhalt eines Bildes in bspw. Binärform.
> Weil das KNN den Inhalt eines Bildes nicht vollständig abspeichert. Es
> speichert nur das in den Gewichten ab, was später nötig ist, um den
> richtigen Namen zum Bild in Erinnerung zu rufen.

Und den Namen, der ja als String repräsentiert ist, speichert das KNN?
Ansonsten könnte er mir diesen ja nicht ausgeben. Wenn er das also mit
einem String kann, wieso nicht auch mit einem Bild. Ein Bild ist am
Computer in letzter Instanz doch nichts anderes als eine Zeichenkette.
Unten kommt immer eine 1 und 0 Ansammlung raus. Wenn er also diese
Ansammlung der Zeichenkette (Name) speichern kann um ihn dann
auszugeben, wieso dann nicht auch die Ansammlung von 1 und 0 eines Bildes?


>> a) Der Benutzer spielt bei meinem Konzept überhaupt keine Rolle mehr, den
>> möchte ich komplett ersetzen durch eine Vollautomation
> Du hast als Beispiel ein Warenwirtschaftssystem angegeben, das wird von
> vielen Leuten in einer Firma genutzt und bedient. Und diese Leute willst du
> jetzt alle ersetzen, aber die ursprüngliche Software beibehalten? Das klingt
> nach einem riesigen Haufen Scheiße. Warum nimmst du nicht gleich ein
> Warenwirtschaftssystem her, das speziell für eine vollautomatische Fabrik
> programmiert wurde?

Ich rede nicht von der Bedienung sondern vom Test der Software, und hier
ist eine Aussage alle Leute zu ersetzen nicht grundsätzlich komplett
Scheiße. Misch hier doch nicht die Anwender mit denen zusammen die das
Ding testen wollen...siehe auch Beschreibung des Systems unten.


>> b) er sagt meinem Programm vorher "Neuer Name: Linie zeichnen" und gibt
>> dann in die Beschreibung einen möglichst allgemeingültigen Automationscode
>> ein der diese Aktion ausführt.
> Also keine Textbeschreibung für einen Menschen sondern ein ausführbares
> Programm für eine Maschine.

Richtig...


>> meine Software soll in der Lage sein aufgrund von einigen Grunddaten die
>> andere Software zu "erlernen" und automatisiert zu testen
> Es gibt automatisierte Testprogramme, die nach Änderungen an einer Software
> vorher aufgezeichnete Bedienungsschritte wiederholen und nachsehen, ob die
> Bildschirmausgaben noch übereinstimmen, ob sich also keine Fehler
> eingeschlichen haben.

Solche Systeme sind nicht lernfähig. Sie können lediglich hinterlegte
Testpläne abtesten. Alle diese Pläne müssen erfasst werden. Dieses
System soll auf Basis einer bestimmten Menge an Grunddaten den Rest
selbst "herausfinden" und testen. Ähnlich wie es ein Frei-Tester in der
Qualitätssicherung auch machen würde.


> Das klingt nach Science Fiction. Man kann schon ein Programm schreiben, was
> irgendwie in einem anderen Programm herumklickt und probiert, das zum
> Absturz zu bringen. Sowas nennt man Stress-Test, und es findet hauptsächlich
> nicht abgefangene Exceptions. Aber ein Ziel ausser Fehler finden hat das
> ganze nicht. Dafür müsste man noch ein Reinforcement Signal einspeisen, was
> sagt "das war gut" oder "das war schlecht". Da muss dann aber wieder ein
> Mensch dabeisitzen, der macht dann den Kritiker. Weil Exploration aber so
> elends lange dauert, wirst du keinen finden, der diesen Kritikerjob
> übernimmt. Doofes herumprobieren ist Müll, zuschauen und nachmachen ist viel
> effektiver.

Der Mensch ist lediglich noch für die, deiner Meinung nach "doofe
Exploration" zuständig, das ist richtig. Doof herumprobieren ist nicht
ganz wahr, einige feste Regeln für Software kann man ja hinterlegen
welche das doofe rumprobieren zumindest auf eine Ebene hebt in der ein
0815-Tester schlechter arbeiten würde. Diesen Tester hätte ich dann mit
diesem System ersetzt weil das System bessere Ergebnisse erzielt wie der
jenige.


> Ich wollte eigentlich nicht wissen, wie du das implementierst, sondern ein
> sinnvolles Beispiel, zum Beispiel für dein Warenwirtschaftssystem. Wenn am
> Lieferanteneingang 10 Paletten mit Gurken ankommen, was soll dein
> wegrationalisierter Lagerarbeiter dann eintippen? 11 Paletten mit Tomaten,
> oder was?

Weiß ich doch nicht, ich redete nie davon diesen Menschen wegzumachen.
Ich redete von Softwaretest.


> Für selbständiges Lernen brauchst du eine Beurteilungsfunktion, und wo soll
> die herkommen? Wann ist ein Warenwirtschaftssystem "gut"? Wenn keine
> Lieferengpässe auftreten und kein Überschuss im Lager ist? Da muss der nur
> den Bedarf richtig vorhersagen, das können doch die heutigen Programme
> schon, oder?

Ja, aber doch nicht während der Entwicklungsphase und dem damit
verbundenen Test.

Ciao Markus

Stefan Nobis

unread,
Sep 27, 2008, 4:25:11 AM9/27/08
to
Markus Deckmann <Markus.D...@web.de> writes:

> Ja, aber doch nicht während der Entwicklungsphase und dem damit
> verbundenen Test.

Ich will dir ja nicht den Spaß verderben, aber ein paar Gedanken dazu:

* Einige Test-Tools generieren viel Umsatz, da ist teilweise einiges
an Geld vorhanden -- wenn der (nahezu) vollautomatische GUI-Test
relativ simpel wäre, meinst du nicht, dass es dann schon etwas in
der Richtung gäbe (ich weiß, ein schwaches Argument, gerade bezogen
auf den Mainstream -- aber ich habe mir auch schon etliche Nischen
angesehen, in denen es Tools und Sprach-Features gibt, die ich im
Mainstream sehr vermisse und auch in diesen Nischen gibt's es
keinerlei Ansätze solcher automatischen GUI-Tester nach deinen
Vorstellungen).

* Wo kommen die ganzen Beispiele her, aus denen das NN lernt? Ist es
wirklich effizienter erst viele Beispiele (und es wird kaum möglich
sein, diese Lernphase anwendungsunabhängig hinzubekommen) zu
generieren und dann zu hoffen, dass das NN aus den Beispielen die
richtigen Tests ableitet als bewusst und gezielt mit vorhandenen
Tools zu testen (so starr und unflexibel sind die ja auch nicht, das
sind ja nicht nur dumpfe Makro-Rekorder, sondern durchaus
intelligente, scriptbare Tools, die sich nicht zwangsläufig von
identischen Buttons an unterschiedlichen Koordinaten stören, solange
sich die IDs der Buttons nicht willkürlich ändern)?

* Wie stark sind eigentlich die GUI-Änderungen in deiner
Warenwirtschaft, dass dumme Makro-Rekorder so schnell an ihre
Grenzen stoßen?

* Wenn sich die GUI tatsächlich so oft/stark ändert, wie kommst du auf
die Idee, dass NNs mit diesen Änderungen gut zurecht kommen?

* Ein gutes Software-Design sorgt dafür, dass in der GUI so gut wie
keine Logik mehr enthalten ist und somit gibt es auf GUI-Ebene nicht
mehr so viel zu testen (ja, Integrationstests und Akzeptanztests
wollen nicht unterschätzt werden, aber letztere sind eh nicht
automatisierbar und für erstere sollten verfügbare GUI-Tester
eigentlich ausreichen, wenn alles unterhalb der GUI-Ebene auf andere
Weise bereits intensiv getestet wurde).

* Gerade bei Tests bin ich persönlich eher ein Freund von
regelbasierten Systemen (ja, ein Schuss Zufall hier und da kann
nicht schaden -- aber dosiert und gezielt gesteuert) und NNs wären
mir da tendenziell durchaus eher suspekt.

--
Stefan.

svs

unread,
Sep 27, 2008, 5:35:57 AM9/27/08
to
Hi Markus,

schau mal die pdf`s bei den Links. Das sollte Dir wesentlich auf die
Beine Helfen, was KNN, Netzarten und praktische Umsetzung von
Selbstorganisierenden Karten betrifft.

http://ots.fh-brandenburg.de/downloads/diplom/da_sven_schr%f6der.pdf
http://ots.fh-brandenburg.de/downloads/diplom/da_benjamin_hoepner.pdf

und hier sollte auch im Laufe der nächsten 1-2 Wochen eine weitere
Arbeit von B.Kieper zur Objektdetektion in Bildern abgelegt werden.

http://zeus.fh-brandenburg.de/~boersch/

Stöber einfach mal nen bisschen.

Gruss Sven

Markus Deckmann

unread,
Sep 27, 2008, 10:39:53 AM9/27/08
to
Hi Stefan,

> Ich will dir ja nicht den Spaß verderben, aber ein paar Gedanken dazu:

Den Spaß verdirbst du mir nicht, ist bisher ja nur ein
Gedankenexperiment das ich mir durchdenke. ;-)


> * Einige Test-Tools generieren viel Umsatz, da ist teilweise einiges
> an Geld vorhanden -- wenn der (nahezu) vollautomatische GUI-Test
> relativ simpel wäre, meinst du nicht, dass es dann schon etwas in
> der Richtung gäbe (ich weiß, ein schwaches Argument, gerade bezogen
> auf den Mainstream -- aber ich habe mir auch schon etliche Nischen
> angesehen, in denen es Tools und Sprach-Features gibt, die ich im
> Mainstream sehr vermisse und auch in diesen Nischen gibt's es
> keinerlei Ansätze solcher automatischen GUI-Tester nach deinen
> Vorstellungen).

Und weil es noch keiner gemacht hat kann es auch keiner machen? Wie
gesagt, ist ja nur Gedankenexperiment bis jetzt und soll vielleicht mal
testweise implementiert werden. Nicht zu ernst sehen dieses Experiment. ;-)


> * Wo kommen die ganzen Beispiele her, aus denen das NN lernt? Ist es
> wirklich effizienter erst viele Beispiele (und es wird kaum möglich
> sein, diese Lernphase anwendungsunabhängig hinzubekommen) zu
> generieren und dann zu hoffen, dass das NN aus den Beispielen die
> richtigen Tests ableitet als bewusst und gezielt mit vorhandenen
> Tools zu testen (so starr und unflexibel sind die ja auch nicht, das
> sind ja nicht nur dumpfe Makro-Rekorder, sondern durchaus
> intelligente, scriptbare Tools, die sich nicht zwangsläufig von
> identischen Buttons an unterschiedlichen Koordinaten stören, solange
> sich die IDs der Buttons nicht willkürlich ändern)?

Die Grundbeispiele kommen natürlich durch entsprechend qualifizierte
Softwaretester die solche Scripts aufstellen können. Und ich denke das
ich besonders über die Window-Informationen schon genug Informationen
bekomme um das ganze einigermaßen Anwendungsunabhängig zu gestalten. Von
einigermaßen anständig aufgebauten Anwendungen natürlich ausgehend.


> * Wie stark sind eigentlich die GUI-Änderungen in deiner
> Warenwirtschaft, dass dumme Makro-Rekorder so schnell an ihre
> Grenzen stoßen?

Da ich das ganze bisher noch relativ Anwendungsunabhängig im Kopf habe
können die sich schon relativ viel unterscheiden.


> * Wenn sich die GUI tatsächlich so oft/stark ändert, wie kommst du auf
> die Idee, dass NNs mit diesen Änderungen gut zurecht kommen?

Änderungen nicht, aber angepasst auf eine Anwendung kann ich das NN
verwenden stelle ich mir vor. Will ich eine andere Software testen
lassen setze ich das NN auf Ursprungszustand zurück und lasse ihn die
andere Software erlernen.


> * Ein gutes Software-Design sorgt dafür, dass in der GUI so gut wie
> keine Logik mehr enthalten ist und somit gibt es auf GUI-Ebene nicht
> mehr so viel zu testen (ja, Integrationstests und Akzeptanztests
> wollen nicht unterschätzt werden, aber letztere sind eh nicht
> automatisierbar und für erstere sollten verfügbare GUI-Tester
> eigentlich ausreichen, wenn alles unterhalb der GUI-Ebene auf andere
> Weise bereits intensiv getestet wurde).

Gerade die Umsetzung des Software-Designs in einen funktionierenden
Quellcode muss allerdings doch abgetestet werden. Hier habe ich
allerdings noch nicht weiter in der Umsetzung nachgedacht wie hier die
einzelnen Testmethoden umgesetzt werden sollen/können.


> * Gerade bei Tests bin ich persönlich eher ein Freund von
> regelbasierten Systemen (ja, ein Schuss Zufall hier und da kann
> nicht schaden -- aber dosiert und gezielt gesteuert) und NNs wären
> mir da tendenziell durchaus eher suspekt.

Naja, so ganz zufällig ist es ja nicht. Vorangig verspreche ich mir
durch den Einsatz eines KNN primär erstmal Geschwindigkeitsvorteile.

Ciao Markus

Markus Deckmann

unread,
Sep 27, 2008, 11:04:44 AM9/27/08
to
Hi svs,

> http://ots.fh-brandenburg.de/downloads/diplom/da_sven_schr%f6der.pdf
> http://ots.fh-brandenburg.de/downloads/diplom/da_benjamin_hoepner.pdf
>
> und hier sollte auch im Laufe der nächsten 1-2 Wochen eine weitere
> Arbeit von B.Kieper zur Objektdetektion in Bildern abgelegt werden.
>
> http://zeus.fh-brandenburg.de/~boersch/

Sehr interessante Links, bin schon am lesen der 2 Diplomarbeiten. Mal
sehen was ich hier für mein Gedankenexperiment rausziehen kann.

Ciao Markus

Stefan Nobis

unread,
Sep 27, 2008, 5:11:28 PM9/27/08
to
Markus Deckmann <Markus.D...@web.de> writes:

> Gerade die Umsetzung des Software-Designs in einen funktionierenden
> Quellcode

Dazu noch ein Nachtrag und Denkanstoß:

http://www.developerdotstar.com/mag/articles/reeves_design_main.html

--
Stefan.

Stefan Nobis

unread,
Sep 27, 2008, 5:08:44 PM9/27/08
to
Markus Deckmann <Markus.D...@web.de> writes:

> Gerade die Umsetzung des Software-Designs in einen funktionierenden
> Quellcode muss allerdings doch abgetestet werden.

Dafür gibt es TDD, Unit-Tests etc. Du nimmst doch nicht ein abstraktes
Design auf Papier, legst das Code-Monkeys vor und betrachtest den
entstandenen Code nur noch als Black-Box -- das ist dann kein Test
mehr, das ist nur noch ein Feigenblatt.

> Naja, so ganz zufällig ist es ja nicht. Vorangig verspreche ich mir
> durch den Einsatz eines KNN primär erstmal Geschwindigkeitsvorteile.

Natürlich spielt Zufall bei NNs eine wichtige Rolle. Umgekehrt ist
doch gerade bei Tests, insbesondere bei strukturierter und kritischer
Software wie einer Warenwirtschaft, wichtig, besonders kritische Teile
resp. Code-Pfade besonders intensiv und gründlich zu testen. Wie soll
das NN das garantieren können? Wie willst du das NN entsprechend
steuern?

Und woher kommen die Testdaten? Die fallen ja normalerweise auch nicht
vom Himmel.

NNs sind starke Werkzeuge und sie mögen (vereinzelt) auch in
Teilbereich von Softwaretests Sinn machen, aber mir scheint, dass du
das Pferd von der falschen Seite aufzäumst.

Just my 2¢.

--
Stefan.

0 new messages