Interface MLMatrix

All Known Implementing Classes:
DoubleMatrix

public interface MLMatrix
Interface für Matrizen, die in NeuralNetwork Klassen verwendet werden.

Eine implementierende Klasse muss generell zwei Konstruktoren bereitstellen:

  1. MLMatrix(int rows, int columns) erstellt eine Matrix mit den angegebenen Dimensionen und setzt alle Koeffizienten auf 0.
  2. MLMatrix(double[][] coefficients erstellt eine Matrix mit der durch das Array gegebenen Dimensionen und setzt die Werte auf die jeweiligen Werte des Arrays.

Das Interface ist nicht dazu gedacht eine allgemeine Umsetzung für Matrizen-Algebra abzubilden, sondern soll gezielt die im Neuralen Netzwerk verwendeten Algorithmen umsetzen. Einerseits würde eine ganz allgemeine Matrizen-Klasse nicht im Rahmen der Zeichenmaschine liegen und auf der anderen Seite bietet eine Konzentration auf die verwendeten Algorithmen mehr Spielraum zur Optimierung.

Intern wird das Interface von DoubleMatrix implementiert. Die Klasse ist eine weitestgehend naive Implementierung der Algorithmen mit kleineren Optimierungen. Die Verwendung eines generalisierten Interfaces erlaubt aber zukünftig die optionale Integration spezialisierterer Algebra-Bibliotheken wie Colt, um auch große Netze effizient berechnen zu können.

  • Method Details

    • columns

      int columns()
      Die Anzahl der Spalten der Matrix.
      Returns:
      Spaltenzahl.
    • rows

      int rows()
      Die Anzahl der Zeilen der Matrix.
      Returns:
      Zeilenzahl.
    • get

      double get(int row, int col) throws IllegalArgumentException
      Gibt den Wert an der angegebenen Stelle der Matrix zurück.
      Parameters:
      row - Die Spaltennummer zwischen 0 und rows()-1.
      col - Die Zeilennummer zwischen 0 und columns()-1
      Returns:
      Den Koeffizienten in der Zeile row und der Spalte col.
      Throws:
      IllegalArgumentException - Falls row >= rows() oder col >= columns().
    • set

      MLMatrix set(int row, int col, double value) throws IllegalArgumentException
      Setzt den Wert an der angegebenen Stelle der Matrix.
      Parameters:
      row - Die Spaltennummer zwischen 0 und rows()-1.
      col - Die Zeilennummer zwischen 0 und columns()-1
      value - Der neue Wert.
      Returns:
      Diese Matrix selbst (method chaining).
      Throws:
      IllegalArgumentException - Falls row >= rows() oder col >= columns().
    • initializeRandom

      MLMatrix initializeRandom()
      Setzt jeden Wert in der Matrix auf eine Zufallszahl zwischen -1 und 1.

      Nach Möglichkeit sollte der Zufallsgenerator der Zeichenmaschine verwendet werden.

      Returns:
      Diese Matrix selbst (method chaining).
    • initializeRandom

      MLMatrix initializeRandom(double lower, double upper)
      Setzt jeden Wert in der Matrix auf eine Zufallszahl innerhalb der angegebenen Grenzen.

      Nach Möglichkeit sollte der Zufallsgenerator der Zeichenmaschine verwendet werden.

      Parameters:
      lower - Untere Grenze der Zufallszahlen.
      upper - Obere Grenze der Zufallszahlen.
      Returns:
      Diese Matrix selbst (method chaining).
    • initializeOne

      MLMatrix initializeOne()
      Setzt alle Werte der Matrix auf 1.
      Returns:
      Diese Matrix selbst (method chaining).
    • initializeZero

      MLMatrix initializeZero()
      Setzt alle Werte der Matrix auf 0.
      Returns:
      Diese Matrix selbst (method chaining).
    • multiplyAddBias

      MLMatrix multiplyAddBias(MLMatrix B, MLMatrix V) throws IllegalArgumentException
      Erzeugt eine neue Matrix C mit dem Ergebnis der Matrixoperation
       C = this . B + V'
       
      wobei this dieses Matrixobjekt ist und . für die Matrixmultiplikation steht. V' ist die Matrix V rows()-mal untereinander wiederholt.

      Wenn diese Matrix die Dimension r x c hat, dann muss die Matrix B die Dimension c x m haben und V eine 1 x m Matrix sein. Die Matrix V' hat also die Dimension r x m, ebenso wie das Ergebnis der Operation.

      Parameters:
      B - Eine columns() x m Matrix mit der Multipliziert wird.
      V - Eine 1 x B.columns() Matrix mit den Bias-Werten.
      Returns:
      Eine rows() x m Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.columns() != B.rows() oder B.columns() != V.columns() oder V.rows() != 1.
    • multiplyTransposed

      MLMatrix multiplyTransposed(MLMatrix B) throws IllegalArgumentException
      Erzeugt eine neue Matrix C mit dem Ergebnis der Matrixoperation
       C = this . t(B)
       
      wobei this dieses Matrixobjekt ist, t(B) die Transposition der Matrix B ist und . für die Matrixmultiplikation steht.

      Wenn diese Matrix die Dimension r x c hat, dann muss die Matrix B die Dimension m x c haben und das Ergebnis ist eine r x m Matrix.

      Parameters:
      B - Eine m x columns() Matrix.
      Returns:
      Eine rows() x m Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.columns() != B.columns().
    • transposedMultiplyAndScale

      MLMatrix transposedMultiplyAndScale(MLMatrix B, double scalar) throws IllegalArgumentException
      Erzeugt eine neue Matrix C mit dem Ergebnis der Matrixoperation
       C = t(this) . B * scalar
       
      wobei this dieses Matrixobjekt ist, t(this) die Transposition dieser Matrix ist und . für die Matrixmultiplikation steht. * bezeichnet die Skalarmultiplikation, bei der jeder Wert der Matrix mit scalar multipliziert wird.

      Wenn diese Matrix die Dimension r x c hat, dann muss die Matrix B die Dimension r x m haben und das Ergebnis ist eine c x m Matrix.

      Parameters:
      B - Eine m x columns() Matrix.
      Returns:
      Eine rows() x m Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.rows() != B.rows().
    • add

      Erzeugt eine neue Matrix C mit dem Ergebnis der komponentenweisen Matrix-Addition
       C = this + B
       
      wobei this dieses Matrixobjekt ist. Für ein Element C_ij in C gilt
       C_ij = A_ij + B_ij
       

      Die Matrix B muss dieselbe Dimension wie diese Matrix haben.

      Parameters:
      B - Eine rows() x columns() Matrix.
      Returns:
      Eine rows() x columns() Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.rows() != B.rows() oder this.columns() != B.columns().
    • addInPlace

      Setzt diese Matrix auf das Ergebnis der komponentenweisen Matrix-Addition
       A' = A + B
       
      wobei A dieses Matrixobjekt ist und A' diese Matrix nach der Operation. Für ein Element A'_ij in A' gilt
       A'_ij = A_ij + B_ij
       

      Die Matrix B muss dieselbe Dimension wie diese Matrix haben.

      Parameters:
      B - Eine rows() x columns() Matrix.
      Returns:
      Eine rows() x columns() Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.rows() != B.rows() oder this.columns() != B.columns().
    • sub

      Erzeugt eine neue Matrix C mit dem Ergebnis der komponentenweisen Matrix-Subtraktion
       C = A - B
       
      wobei A dieses Matrixobjekt ist. Für ein Element C_ij in C gilt
       C_ij = A_ij - B_ij
       

      Die Matrix B muss dieselbe Dimension wie diese Matrix haben.

      Parameters:
      B - Eine rows() x columns() Matrix.
      Returns:
      Eine rows() x columns() Matrix.
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.rows() != B.rows() oder this.columns() != B.columns().
    • scaleInPlace

      MLMatrix scaleInPlace(double scalar)
      Multipliziert jeden Wert dieser Matrix mit dem angegebenen Skalar.

      Ist A dieses Matrixobjekt und A' diese Matrix nach der Operation, dann gilt für ein Element A'_ij in A'

       A'_ij = A_ij * scalar
       
      Parameters:
      scalar - Ein Skalar.
      Returns:
      Diese Matrix selbst (method chaining)
    • scaleInPlace

      MLMatrix scaleInPlace(MLMatrix S) throws IllegalArgumentException
      Multipliziert jeden Wert dieser Matrix mit dem entsprechenden Wert in der Matrix S.

      Ist A dieses Matrixobjekt und A' diese Matrix nach der Operation, dann gilt für ein Element A'_ij in A'

       A'_ij = A_ij * S_ij
       
      Parameters:
      S - Eine rows() x columns() Matrix.
      Returns:
      Diese Matrix selbst (method chaining)
      Throws:
      IllegalArgumentException - Falls die Dimensionen der Matrizen nicht zur Operation passen. Also this.rows() != B.rows() oder this.columns() != B.columns().
    • colSums

      MLMatrix colSums()
      Berechnet eine neue Matrix mit nur einer Zeile, die die Spaltensummen dieser Matrix enthalten.
      Returns:
      Eine 1 x columns() Matrix.
    • apply

      Erzeugt eine neue Matrix, deren Werte gleich den Werten dieser Matrix nach der Anwendung der angegebenen Funktion sind.
      Parameters:
      op - Eine Operation (double) -> double.
      Returns:
      Eine rows() x columns() Matrix.
    • applyInPlace

      MLMatrix applyInPlace(DoubleUnaryOperator op)
      Endet die gegebene Funktion auf jeden Wert der Matrix an.
      Parameters:
      op - Eine Operation (double) -> double.
      Returns:
      Diese Matrix selbst (method chaining)
    • duplicate

      MLMatrix duplicate()
      Erzeugt eine neue Matrix mit denselben Dimensionen und Koeffizienten wie diese Matrix.
      Returns:
      Eine Kopie dieser Matrix.
    • toString

      String toString()
      Overrides:
      toString in class Object