Delen via


Binaire bewerkingen

Elementwise binaire 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)

Parameters

  • x: linkerinvoer
  • y: juiste invoer

De afmetingen van en y moeten overeenkomen (afhankelijk van xde uitzendregels, zie hieronder).

Voor de drie Boolean bewerkingen zijn beide invoerwaarden naar verwachting 0 of 1, anders is het gedrag van de functies niet opgegeven en verandert in toekomstige versies.

Sparse-waarden worden momenteel niet ondersteund.

Retourwaarde

Deze functies retourneren het resultaat van de bijbehorende bewerkingen. De relationele operatoren (Equal() enzovoort) en de drie Boolean bewerkingen retourneren waarden die 0 of 1 zijn.

De uitvoerdimensie of tensorshape is identiek aan die van de invoer, afhankelijk van uitzending, zie hieronder.

Beschrijvingen

Dit zijn de algemene binaire operatoren. Ze worden elementgewijs toegepast. (De operator van * BrainScript is niet elementgewijs, maar staat voor het matrixproduct. Dit is bijvoorbeeld anders dan de bibliotheek van numpy Python.)

De afmetingen van de invoer moeten identiek zijn, met uitzondering van uitzending.

Semantiek uitzenden

Uitzenden, een concept dat CNTK modellen na de bibliotheek van numpy Python, betekent dat een dimensie in een van de invoerwaarden 1 kan zijn waar de andere invoer niet is. In dat geval wordt de invoer met de 1-dimensie gekopieerd n , waarbij n de bijbehorende dimensie van andere invoer is. Als de tensor-rangschikkingen niet overeenkomen, wordt ervan uitgegaan dat de tensor-vorm van de invoer met minder dimensies 1 is en dat het uitzenden wordt geactiveerd.

Als u bijvoorbeeld een [13 x 1] tensor toevoegt aan een [1 x 42] vector, levert dit een [13 x 42] vector op die de som van alle combinaties bevat.

Relatiebewerkingen

De relationele operatoren (Equal() enz.) zijn niet verschillend, hun kleurovergang wordt altijd beschouwd als 0. Ze kunnen worden gebruikt voor vlaggen, bijvoorbeeld als voorwaardeargument in de If() bewerking.

LogPlus()

De LogPlus() bewerking berekent de som van waarden die worden weergegeven in logaritmische vorm. Dit berekent het volgende:

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

waar x en y logaritmen van waarden zijn. Deze bewerking is handig bij het omgaan met waarschijnlijkheden, die vaak zo klein zijn dat alleen een logaritmische weergave de juiste numerieke nauwkeurigheid toestaat.

Opmerking: Een andere algemene naam voor deze bewerking is log-add-exp, bijvoorbeeld SciPy.

Voorbeelden

Standaard sigmoidlaag

Deze laag maakt gebruik van het binaire elementgewijze +:

z = Sigmoid (W * x + b)

Houd er rekening mee dat * het bovenstaande niet elementgewijs is, maar staat voor het matrixproduct.

Alternatieve implementatie van Softmax-activering

De Softmax() activeringsfunctie kan worden geschreven met behulp van uitzending Minus:

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

ReduceLogSum() Hier vermindert u de vector z naar een scalaire waarde door de logaritmische som te berekenen. Door het uitzenden van semantiek van aftrekken wordt deze scalaire waarde vervolgens afgetrokken van elke invoerwaarde. Hiermee wordt de verdeling geïmplementeerd door de som van alle waarden in de functie Softmax.

Elementwise Max van twee invoer

Het elementgewijze maximum van twee invoer kan worden berekend als een combinatie van Greater() en If():

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

Dit werkt ook met uitzenden. De lineaire gelijkrichter kan bijvoorbeeld worden geschreven met behulp van een scalaire constante als de tweede invoer:

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