Erstes tiefes Lernen in C # - Einführung in Python implementieren-

Deep Learning in C # (Matrixberechnung)

Dieses Mal habe ich nur ein Programm erstellt, das die für das Tiefenlernen erforderliche Matrix berechnet. Das Buch, auf das ich mich bezog, war "Make from Grund Deep Learning". Ich empfehle dieses Buch, weil es sehr leicht zu verstehen ist und ich denke, dass es ein gutes Buch ist. Es ist kein Manga, aber es hört nicht auf ... Ich war so interessiert. Ich habe bisher nur etwa die Hälfte davon gelesen, daher gibt es viele Teile, die ich nicht gut verstehe, aber dieses Mal habe ich ein Matrixberechnungsprogramm in C # erstellt.

C #, nicht Python?

Dieses Buch erklärt auch die Theorie, deshalb wollte ich sie in C # von Grund auf neu erstellen, ohne mich auf die Python-Bibliothek verlassen zu müssen. Ich werde später versuchen, es in F # und Haskell zu implementieren.

Warum hast du angefangen tief zu lernen?

Ich habe vor kurzem angefangen, funktionale Sprachen wie F # und Haskell zu studieren, und ich kann immer noch nicht verstehen, was es bedeutet, funktionale Sprachen zu verwenden. "Funktionale Sprachen sind übrigens mathematischen Ideen näher gekommen." Dann tiefes Lernen! (Das Motiv war, dass ich nicht wusste, wie man eine funktionale Sprache benutzt.) Vorerst habe ich es in C # gemacht.

C # -Quellcode

Matrix.cs


namespace Matrix
{
    class Mat
    {
        private int r = 0;
        public int R
        {
            get { return r; }
        }
        private int c = 0;
        public int C
        {
            get { return c; }
        }
        private bool err = false;
        public bool Err
        {
            get { return err; }
        }
        private double[][] matrix_data;
        public double[][] Matrix_data
        {
            get {
                double[][] a = new double[2][];
                a[0] = new double[] { 0, 0 };
                a[1] = new double[] { 0, 0 };
                if (err) return a;
                else return matrix_data;
            }
            set
            {
                matrix_data = value;
            }
        }
        public Mat(params double[][] vs)
        {
            int len = vs[0].Length;

            for (int i = 0; i < vs.Length; i++)
            {
                if (i != 0 && len != vs[i].Length)
                {
                    err = true;
                }
            }
            if (!err)
            {
                r = vs.Length;
                c = vs[0].Length;
                matrix_data = vs;
            }
        }
        public static double[][] operator +(Mat p1, Mat p2)
        {
            double[][] d = new double[p1.R][];

            if (p1.C == p2.C && p1.R == p2.R)
            {
                for (int i = 0; i < p1.R; i++)
                {
                    d[i] = new double[p1.C];
                    for (int j = 0; j < p1.C; j++)
                    {
                        d[i][j] = p1.Matrix_data[i][j] + p2.Matrix_data[i][j];
                    }
                }
            }
            else
            {
                for (int k = 0; k < p1.R; k++)
                {
                    d[k] = new double[2] { 0, 0 };
                }
            }

            return d;
        }
        public static double[][] operator +(double p1, Mat p2)
        {
            double[][] d = new double[p2.R][];
            for (int i = 0; i < p2.R; i++)
            {
                d[i] = new double[p2.C];
                for (int j = 0; j < p2.C; j++)
                {
                    d[i][j] = p2.Matrix_data[i][j] + p1;
                }
            }

            return d;
        }
        public static double[][] operator +(Mat p1, double p2)
        {
            double[][] d = new double[p1.R][];
            for (int i = 0; i < p1.R; i++)
            {
                d[i] = new double[p1.C];
                for (int j = 0; j < p1.C; j++)
                {
                    d[i][j] = p1.Matrix_data[i][j] + p2;
                }
            }

            return d;
        }
        public static double[][] operator -(Mat p1, Mat p2)
        {
            double[][] d = new double[p1.R][];

            if (p1.C == p2.C && p1.R == p2.R)
            {
                for (int i = 0; i < p1.R; i++)
                {
                    d[i] = new double[p1.C];
                    for (int j = 0; j < p1.C; j++)
                    {
                        d[i][j] = p1.Matrix_data[i][j] - p2.Matrix_data[i][j];
                    }
                }
            }
            else
            {
                for (int k = 0; k < p1.R; k++)
                {
                    d[k] = new double[2] { 0, 0 };
                }
            }

            return d;
        }
        public static double[][] operator -(double p1, Mat p2)
        {
            double[][] d = new double[p2.R][];
            for (int i = 0; i < p2.R; i++)
            {
                d[i] = new double[p2.C];
                for (int j = 0; j < p2.C; j++)
                {
                    d[i][j] = p1 - p2.Matrix_data[i][j];
                }
            }

            return d;
        }
        public static double[][] operator -(Mat p1, double p2)
        {
            double[][] d = new double[p1.R][];
            for (int i = 0; i < p1.R; i++)
            {
                d[i] = new double[p1.C];
                for (int j = 0; j < p1.C; j++)
                {
                    d[i][j] = p1.Matrix_data[i][j] - p2;
                }
            }

            return d;
        }
        public static double[][] dot(Mat p1, Mat p2)
        {
            double[][] d = new double[p1.R][];
            double temp = 0;

            if (p1.C == p2.R)
            {
                for (int i = 0; i < p1.R; i++)
                {
                    d[i] = new double[p2.C];
                    for (int j = 0; j < p2.C; j++)
                    {
                        for(int a = 0; a < p1.C; a++)
                        {
                            temp = temp + p1.Matrix_data[i][a] * p2.Matrix_data[a][j];
                        }
                        d[i][j] = temp;
                        temp = 0.0;
                    }
                }
            }
            else
            {
                for (int k = 0; k < p1.R; k++)
                {
                    d[k] = new double[2] { 0, 0 };
                }
            }

            return d;
        }
    }
}

Klasse Mat ist eine Klasse, die die Matrix berechnet. Das Verwendungsbeispiel lautet wie folgt.

Program.cs


namespace Matrix
{
    class Program
    {
        static void Main(string[] args)
        {
            Mat A = new Mat(
                new double[] { 1, 2, 3 },
                new double[] { 2, 3, 4 }) ,
                B = new Mat(
                new double[] { 1, 2 },
                new double[] { 2, 3 },
                new double[] { 3, 4 });

            double[][] ans = Mat.dot(A, B);

            _ = 1;    //Tammy-Programm zum Setzen von Haltepunkten

        }
    }
}

Die Ausgabe auf diese Sohle war mühsam, daher habe ich einen Haltepunkt in die Zeile "_ = 1;" gesetzt und den Inhalt des Arrays "ans" überprüft.

無題.png

Es wird richtig berechnet. Dieses Mal wird das Punktprodukt mit "Mat" berechnet, aber Addition und Subtraktion sind ebenfalls möglich.

Recommended Posts

Erstes tiefes Lernen in C # - Einführung in Python implementieren-
Python Deep Learning
Deep Learning × Python
Erstes tiefes Lernen ~ Kampf ~
RNN-Implementierung in Python
ValueObject-Implementierung in Python
Erstes tiefes Lernen ~ Vorbereitung ~
Weiter Python in C-Sprache
Erstes tiefes Lernen ~ Lösung ~
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Python: Deep Learning Tuning
[Implementierung zum Lernen] Implementieren Sie Stratified Sampling in Python (1)
C-API in Python 3
Deep Learning von Grund auf neu - Kapitel 4 Tipps für die in Python erlernte Theorie und Implementierung von Deep Learning
SVM-Implementierung in Python
Python: Deep Learning in der Verarbeitung natürlicher Sprache: Implementierung eines Antwortsatzauswahlsystems
Tiefes Lernen mit Python Kapitel 2 (Material für runde Vorlesung)
Erweitern Sie Python in C ++ (Boost.NumPy)
Binäre Suche in Python / C ++
Implementierung eines neuronalen Netzwerks in Python
Implementierung der schnellen Sortierung in Python
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Erste einfache Regressionsanalyse in Python
Sortieralgorithmus und Implementierung in Python
Implementierung der HMM-Parameterschätzung in Python
Implementierung einer gemischten Normalverteilung in Python
Implementierung eines Lebensspiels in Python
In Python implementierte Widrow-Hoff-Lernregeln
Löse ABC036 A ~ C mit Python
So verpacken Sie C in Python
Deep Learning durch Implementierung 1 gelernt (Return Edition)
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
C / C ++ - Programmierer fordert Python heraus (erster Schritt)
Deep Learning Bilderkennung 2 Modellimplementierung
Implementierung der ursprünglichen Sortierung in Python
Löse ABC037 A ~ C mit Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
Der erste Schritt von Python Matplotlib
(Python) Deep Learning Library Chainer-Grundlagen Grundlagen
Unterschiede, die C # -Ingenieure beim ersten Erlernen von Python verspürten
Generieren Sie eine erstklassige Sammlung in Python
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (3)
Algorithmus in Python (ABC 146 C Dichotomie
Warteschlangen- und Python-Implementierungsmodul "deque"
Implementieren Sie den FIR-Filter in Python und C.
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
Schreiben Sie die O_SYNC-Datei in C und Python
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
Python lernen
MongoDB mit Python zum ersten Mal
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 1
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 2
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Tiefes Lernen
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 4 Implementierung der Verlustfunktion
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (2)