Teilen über


Binäre Vorgänge

Elementweise binäre Operatoren.

ElementTimes (x, y)
x .* y
Minus (x, y)
x - y
Plus (x, y)
x + y
LogPlus (x, y)
Less (x, y)
Equal (x, y)
Greater (x, y)
GreaterEqual (x, y)
NotEqual (x, y)
LessEqual (x, y)
BS.Boolean.And (x, y)
BS.Boolean.Or (x, y)
BS.Boolean.Xor (x, y)

Parameter

  • x: linke Eingabe
  • y: Rechte Eingabe

Die Dimensionen und xy müssen übereinstimmen (siehe unten).

Für die drei Boolean Vorgänge werden beide Eingaben voraussichtlich entweder 0 oder 1 sein, andernfalls ist das Verhalten der Funktionen nicht angegeben und ändert sich tatsächlich in zukünftigen Versionen.

Sparsewerte werden derzeit nicht unterstützt.

Rückgabewert

Diese Funktionen geben das Ergebnis der entsprechenden Vorgänge zurück. Die Beziehungsoperatoren (Equal() usw.) und die drei Boolean Vorgänge geben Werte zurück, die entweder 0 oder 1 sind.

Die Ausgabedimension oder das Tensor-Shape ist identisch mit den Eingaben, die der Übertragung unterliegen, siehe unten.

Beschreibungen

Dies sind die allgemeinen binären Operatoren. Sie werden elementweise angewendet. (Beachten Sie, dass der Operator von * BrainScript nicht elementweise ist, sondern für das Matrixprodukt steht. Dies unterscheidet sich beispielsweise von der Python-Bibliothek numpy .)

Die Abmessungen der Eingaben müssen mit Ausnahme des Rundfunks identisch sein.

Rundfunksemantik

Rundfunk, ein Konzept, das CNTK Modelle nach der Bibliothek von numpy Python hat, bedeutet, dass eine Dimension in einer der Eingaben 1 sein kann, bei denen die andere Eingabe nicht ist. In diesem Fall wird n die Eingabe mit der 1-Dimension kopiert, wobei n es sich um die entsprechende Bemaßung der eingabe handelt. Wenn die Tensor-Rangfolgen nicht übereinstimmen, wird die Tensorform der Eingabe mit weniger Dimensionen als 1 angenommen und die Übertragung auslösen.

Das Hinzufügen eines [13 x 1] Tensors zu einem [1 x 42] Vektor würde beispielsweise einen [13 x 42] Vektor liefern, der die Summen aller Kombinationen enthält.

Beziehungsvorgänge

Die Beziehungsoperatoren (Equal() etc.) sind nicht unterschiedlich, ihr Farbverlauf gilt immer als 0. Sie können für Flags verwendet werden, z. B. als Bedingungsargument im If() Vorgang.

LogPlus()

Der LogPlus() Vorgang berechnet die Summe der Werte, die in logarithmischer Form dargestellt werden. Es berechnet folgendes:

LogPlus (x, y) = Log (Exp (x) + Exp (y))

wo x und y sind Logarithmen von Werten. Dieser Vorgang ist nützlich beim Umgang mit Wahrscheinlichkeiten, die oft so klein sind, dass nur eine logarithmische Darstellung eine angemessene numerische Genauigkeit ermöglicht.

Hinweis: Ein weiterer allgemeiner Name für diesen Vorgang ist log-add-exp, z. B. SciPy.

Beispiele

Standard-Sigmoidschicht

Diese Ebene verwendet die elementweise Binärdatei +:

z = Sigmoid (W * x + b)

Beachten Sie, dass * oben nicht elementweise, sondern für das Matrixprodukt steht.

Alternative Implementierung der Softmax-Aktivierung

Die Softmax() Aktivierungsfunktion kann mithilfe von Rundfunk Minusgeschrieben werden:

MySoftmax (z) = Exp (z - ReduceLogSum (z))

Hier reduziert der Vektor z auf einen Skalar, ReduceLogSum() indem er seine logarithmische Summe berechnen kann. Durch die Sendesemantik der Subtraktion wird dieser Skalar dann von jedem Eingabewert subtrahiert. Dadurch wird die Division durch die Summe aller Werte in der Softmax-Funktion implementiert.

Elementweise Max von zwei Eingaben

Die elementweise maximal zwei Eingaben können als Kombination von Greater() und If():

MyElementwiseMax (a, b) = If (Greater (a, b), a, b)

Dies funktioniert auch mit dem Rundfunk. Beispielsweise kann der lineare Retifier mit dieser mithilfe einer Skalarkonstante als zweite Eingabe geschrieben werden:

MyReLU (x) = MyElementwiseMax (x, Constant(0))