Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Ekkehard
Beiträge: 69
Registriert: So 12. Feb 2023, 12:42
OS, Lazarus, FPC: Windows Lazarus 3.6, FPC 3.2.2
CPU-Target: 64-Bit
Wohnort: Hildesheim

Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von Ekkehard »

Hallo,
ich wollte endlich mal mein Defizit in Sachen KI verringern und hatte mit die https://github.com/joaopauloschuler/neural-api heruntergeladen. Das ist schon beeindruckend was das so kann.
Trotz vieler Beispiele verstehe ich davon nicht viel. Wie so eine KI grundsätzlich funktioniert habe ich verstanden, nur die Wege zu den Beispielen bleiben mir verborgen.
Hier einige Zeilen aus dem SimpleImageClassifier:

Code: Alles auswählen

 NN := TNNet.Create();
    NN.AddLayer([
      TNNetInput.Create(32, 32, 3),
      TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}5, {Padding=}2, {Stride=}1, {SuppressBias=}1),
      TNNetMaxPool.Create(4),
      TNNetMovingStdNormalization.Create(),
      TNNetConvolutionReLU.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1),
      TNNetConvolutionReLU.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1),
      TNNetConvolutionReLU.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1),
      TNNetConvolutionReLU.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1),
      TNNetDropout.Create(0.5),
      TNNetMaxPool.Create(2),
      TNNetFullConnectLinear.Create(10),
      TNNetSoftMax.Create()
    ]);
Mir fehlt die Information, warum das Netz genau diese Elemente benötigt, warum mit den entsprechenden Parametern usw.
Offensichtlich handelt es sich bei den Elemente "ConvolutionLinear", "MaxPool", "ConvolutionReLU", etc. um feststehende Begriffe, deren Hintergründe als bekannt vorausgesetzt werden. Sucht man im Netzt nach diesen Begriffen, landet man relativ schnell auf Seiten wie dieser https://www.nickmccullum.com/python-dee ... r-pooling/, die auf eine Python Implementierung hinweisen, die auf diesen Elementen beruht.

Deshalb meine Frage an Euch, ob mir jemand Literatur (Gerne englischsprachig) empfehlen kann, in denen insbesondere diese Aspekte erläutert werden?
Auch hier finde ich natürlich bei der Internetsuche einige Werke, aber leider kann ich nicht erkennen, ob die o.a. Aspekte enthalten sind.
Vielen Dank!

wp_xyz
Beiträge: 5207
Registriert: Fr 8. Apr 2011, 09:01

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von wp_xyz »

Warum stellst du die Frage nicht im englischen Forum? Da ist der Autor des von dir erwähnten Packages gelegentlich unterwegs; von ihm wirst du sicher die kompetenteste Antwort bekommen.

Ekkehard
Beiträge: 69
Registriert: So 12. Feb 2023, 12:42
OS, Lazarus, FPC: Windows Lazarus 3.6, FPC 3.2.2
CPU-Target: 64-Bit
Wohnort: Hildesheim

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von Ekkehard »

Danke! Ich wusste offen gesagt nicht wo genau ich mich da einsortieren könnte. Ich suche nochmal.

wp_xyz
Beiträge: 5207
Registriert: Fr 8. Apr 2011, 09:01

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von wp_xyz »

Im englischen Forum heißt er "schuler". Suche nach seinen Beiträgen.

TSchnuckenbock
Beiträge: 118
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von TSchnuckenbock »

Kennst du schon

https://de.wikipedia.org/wiki/Convoluti ... al_Network

Da geht's um "Faltung". "

ReLU" steht für Rectified Linear Unit.

https://de.wikipedia.org/wiki/Rectifier ... Netzwerke)

Ich muß mir das auch demnächst mal genauer ansehen.

Ich vermute, du mußt viel Zeit mitbringen. ;-)

Ekkehard
Beiträge: 69
Registriert: So 12. Feb 2023, 12:42
OS, Lazarus, FPC: Windows Lazarus 3.6, FPC 3.2.2
CPU-Target: 64-Bit
Wohnort: Hildesheim

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von Ekkehard »

Ich bin mit meinen Bemühungen etwas voran gekommen und vielleicht findet jemand die folgenden Zeilen hilfreich.
1.) Die CAI Neural API ist beschrieben (https://github.com/joaopauloschuler/neu ... /README.md) als "Schwester-Projekt" des python basierenden "Keras-Projekts"
2.) Im Readme gibt es eine Tabelle Closest Layer Types to Other APIs (https://github.com/joaopauloschuler/neu ... n-progress), welche einige elementare Definitionen der Keras Bibliothek denen in der CAI gegenüberstellt.
3.) Zu Keras passend gibt es ein Werk mit dem Titel "Deep Learning with Python" von François Cholette, welches demnächst in der dritten Ausgabe erscheint und dessen erste Ausgabe als PDF in den Tiefen des Internet zu finden ist.
4.) Dort wird ein als "Hello World"-Beispiel gekennzeichneter 3-Zeiler eingeführt, der die Ziffernerkennung des NIST macht.
5.) Dieses Beispiel findet sich auch in etwas erweiterter Form als SimpleMNist in den CAI Beispielen (https://github.com/joaopauloschuler/neu ... impleMNist)
6.) Die Tabelle aus 2.) erlaubt nun die Übersetzung der zwei python Zeilen aus dem Buch

Code: Alles auswählen

    network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
    network.add(layers.Dense(10, activation='softmax'))
in das folgende 5 Layer-Statement zu (wenn man so will ein VerySimpleMNist):

Code: Alles auswählen

      TNNetInput.Create(28, 28, 1),
      TNNetConvolutionLinear.Create(
        {Features=}32,     // Number of output features
        {FeatureSize=}5,   // 5x5 kernel size
        {Padding=}2,       // Padding of 2 pixels
        {Stride=}1,        // Stride of 1 pixel
        {SuppressBias=}1   // Suppress bias
      ),
      TNNetFullConnectReLU.Create({Size=}32),
      TNNetFullConnectLinear.Create({Size=}10),
      TNNetSoftMax.Create({SkipBackpropDerivative=}1)
Einige Parameter wie
{Features=}32, // Number of output features
{FeatureSize=}5, // 5x5 kernel size
{Padding=}2, // Padding of 2 pixels
sind im python Beispiel nicht enthalten (dort gibt es einen Wert von 512, dessen Zuordnung unklar ist) und folglich in ihrer Wirkung noch unklar, führen aber bei Veränderung nur zu gradueller Veränderung des Ergebnisses hinsichtlich der Genauigkeit, bzw Prozessgeschwindigkeit, das sei zum jetzigen Zeitpunkt als verschmerzbar anzusehen.
(Setzt man bspw. die {FeatureSize=} auf 8 statt 5 erhöht sich die Genauigkeit von 0,9665 auf 0,9818, verkleinert man dann die "Features" und "Size" von 32 auf 16, halbiert sich die Prozessdauer und die Genauigkeit sinkt auf 0,9631)
Damit sollte das Werk "Deep Learning with Python" von François Cholette geeignet sein, den theoretischen Hintergrund zur Anwendung der CAI Neural API liefern und hoffentlich zum Verständnis der Beispiele des CAI Neural API beitragen. Einschränkend sei gesagt, dass ich erst im Kapitel 2 angekommen bin und auch nur dieses eine Beispiel umgesetzt habe und dass das auch nur gelang, weil es das etwas erweiterte und lauffähige Beispiel schon gab.
Grüße aus Hildesheim
Ekkehard

Ekkehard
Beiträge: 69
Registriert: So 12. Feb 2023, 12:42
OS, Lazarus, FPC: Windows Lazarus 3.6, FPC 3.2.2
CPU-Target: 64-Bit
Wohnort: Hildesheim

Re: Literaturempfehlungen zum Thema KI, insb. CAI Neural API

Beitrag von Ekkehard »

Ergänzung.
Ich versuchte gerade ein etwas komplexeres Beispiel zu übersetzen, scheiterte aber, weil einige Befehle/Funktionen nicht in der Tabelle enthalten waren.
Dann ließ ich mir via des angegebenen Link von ChatGPT https://chatgpt.com/g/g-6BrAwhTQ9-free- ... neural-api weiter helfen, der das python Beispiel sehr gut in die Pascal CAI Neural API übersetzen konnte.

Das ermutigte mich, das Beispiel von gestern

Code: Alles auswählen

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
nochmal anzugehen und übersetzen zu lassen.
Das Ergebnis ist nochmals deutlich einfacher als von mir erdachte. Es lautet

Code: Alles auswählen

NN.AddLayer([
  TNNetInput.Create(784),                       // Flattened 28x28 input
  TNNetFullConnectReLU.Create(512),             // Fully connected layer with ReLU
  TNNetFullConnectLinear.Create(10),            // Linear layer for 10-class output
  TNNetSoftMax.Create()                         // Softmax activation
]);
Somit klärt sich auch das Rätsel um die unterschiedlichen Zahlen. ChatGPT scheint also eine sehr wertvolle Hilfe zu sein :D .

Antworten