Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
ParameterTensor{}
Hiermee maakt u een scalaire, vector, matrix of tensor van leerbare parameters.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parameters
-
shape: shape (dimensies) van de parameter als matrix. Bijvoorbeeld(13:42)om een matrix te maken met 13 rijen en 42 kolommen. Voor sommige bewerkingen worden dimensies die als 0 worden gegeven, automatisch afgeleid (zie hier) -
init(standaard uniform): geeft willekeurige initialisatie op, bijvoorbeeldinit='heNormal'(zie hier) -
initOutputRank(standaard 1): geeft het aantal voorloopas op. Als dit negatief is, -number van volgassen (zie hier) -
initValueScale(standaard 1): extra schaalfactor toegepast op willekeurige initialisatiewaarden -
randomSeed(standaard -1): als dit positief is, gebruikt u deze willekeurige seed voor willekeurige initialisatie. Als dit negatief is, gebruikt u een teller die voor elkeParameterTensor{} -
initValue: geeft initialisatie op met een constante waarde, bijvoorbeeldinitValue=0 -
initFromFilePath: hiermee geeft u initialisatie op door de initiële waarden uit een bestand te laden. BijvoorbeeldinitFromFilePath="my_init_vals.txt" -
learningRateMultiplier: systeemleersnelheid wordt geschaald door deze (0 om het leren uit te schakelen) (zie hier)
Retourwaarde
Een tensor van leerbare parameters.
Beschrijving
Deze fabrieksfunctie maakt een scalaire, vector, matrix of tensor van leerbare parameters, dat wil gezegd, een tensor die wordt herkend door de "train" actie als met parameters die tijdens de training moeten worden bijgewerkt.
De waarden worden geïnitialiseerd, afhankelijk van welke optionele parameter wordt gegeven, aan
- willekeurige getallen, indien
initwordt gegeven; - een constante indien
initValuewordt gegeven; of - een tensor leest uit een extern invoerbestand als
initFromFilePathwordt gegeven. De standaardwaarde isinit="uniform".
Als u een scalaire, vector, matrix of tensor met rang>2 wilt maken, geeft u het volgende door als de parameter shape:
-
(1)voor een scalaire waarde; -
(M)voor een kolomvector metMelementen; -
(1:N)voor een rijvector metNelementen. Rijvectoren zijn matrices met één rij; -
(M:N)voor een matrix metNrijen enIkolommen; -
(I:J:K...)voor een tensor van willekeurige rang>2 (let op: de maximaal toegestane rang is 12); en -
(W:H:C)voor een tensor die overeenkomt met de afmetingen van een[W x H]afbeelding metCkanalen.
Automatische dimensiedeductie
Wanneer een ParameterTensor wordt gebruikt voor gewichten als onmiddellijke invoer van specifieke bewerkingen, mag het bepaalde dimensies opgeven als Inferred. Het matrixproductParameterTensor{42:Inferred} * x) leidt bijvoorbeeld automatisch af dat de tweede dimensie gelijk is aan de dimensie van x.
Dit is zeer handig voor invoer van lagen, omdat de BrainScript-code van de gebruiker wordt vrijgemaakt door de last van het doorgeven van de invoerdimensies. Bovendien is het in sommige situaties erg lastig om de precieze invoerdimensies van een laag te bepalen, bijvoorbeeld voor de eerste volledig verbonden laag boven op een piramide van combinaties van convolutie/pooling zonder opvulling, waarbij elke convolutie- en poolbewerking rijen of kolommen van grens pixels kan verwijderen en de afmetingen kan vergroten.
Met deze functie kunnen de vooraf gedefinieerde lagen van CNTK alleen worden opgegeven door hun uitvoerdimensie (bijvoorbeeld DenseLayer{1024}).
Willekeurige initialisatie
Willekeurige initialisatie wordt geselecteerd door de init parameter, die kiest tussen uniforme en normale verdeling, waarbij het bereik/de standaarddeviatie wordt berekend als een functie van ventilator-in en fan-out:
waarde van init |
distributie | bereik/standaarddeviatie |
|---|---|---|
| 'heNormal' | normaal | sqrt (2 / fanIn) |
| 'heUniform' | uniform | sqrt (6 / fanIn) |
| 'glorotNormal' | normaal | sqrt (2 / (fanIn+fanOut)) |
| 'glorotUniform' | uniform | sqrt (6 / (fanIn+fanOut)) |
| 'klopt' | uniform | sqrt (3 / fanIn) |
| 'uniform' | uniform | 1/20 |
| 'gaussie' | normaal | sqrt (0,04 / fanIn) |
| 'nul' | n.v.t | 0 |
(Waar zero een handig alternatief is voor het opgeven van initValue=0.) Voor uniforme verdeling worden de parameters uniform geïnitialiseerd in [-bereik, bereik]; voor normale verdeling is het gemiddelde altijd nul.
Houd er rekening mee dat de standaardinstelling voor init is uniform wanneer u ParameterTensor{} rechtstreeks gebruikt.
De standaardwaarde is echter glorotUniform voor lagen die parameters bevatten binnen, zoals DenseLayer{} en ConvolutionalLayer{}.
Fan-in en fan-out voor willekeurige initialisatie
Bij willekeurige initialisatie wordt ervan uitgegaan dat de parameters deel uitmaken van een vorm van matrixproductachtige bewerking die een goed gedefinieerde ventilator en fan-out heeft, die worden gebruikt om de schaal van de willekeurige waarden per bovenstaande tabel te bepalen. De eerste as wordt standaard beschouwd als uitwaaieren en de resterende as/assen zijn fan-in, overeenkomende semantiek van het reguliere matrixproduct.
De optionele parameter initOutputRank kan worden gebruikt om het aantal voorloopassen op te geven dat als uitwaaier moet worden beschouwd. Voor een matrixproduct in de uitgebreide tensor-interpretatie van CNTK die een [K]-dimensionale vector x toewijst aan een [I x J]-dimensionale rang-2-object kan worden geschreven als Times (W, x, outputRank=2), waarbij W de vorm [I x J x K]heeft.
Hier geeft initOutputRank=2 aan dat bij het schalen van de willekeurige initialisatiewaarden de fan-out I*J en de ventilator-in K.
Negatieve waarden voor initOutputRank geven aan dat de fan-outassen achterassen zijn. De filterkernel van de ConvolutionalLayer{} en de onderliggende Convolution()-bewerking voor een typische installatiekopieënverwerking heeft bijvoorbeeld een shape [W x H x C x K], waarbij K de uitwaaier is, terwijl de ventilator is W*H*C.
Dit wordt opgegeven door initOutputRank=-1.
Initiële waarden lezen uit bestanden
De initiële waarden kunnen worden gelezen uit een tekstbestand. Hiervoor geeft u een padnaam door voor de optionele parameter initFromFilePath.
Het tekstbestand bestaat naar verwachting uit één regel per matrixrij, die bestaat uit door spaties gescheiden getallen, één per kolom.
De rij- en kolomdimensies in het bestand moeten overeenkomen met shape.
Parameterspecifieke leersnelheid
Parameterspecifieke leersnelheden kunnen worden gerealiseerd met de optionele learningRateMultiplier parameter.
Deze factor wordt vermenigvuldigd met de werkelijke leersnelheid bij het uitvoeren van parameterupdates.
Als de parameter bijvoorbeeld is opgegeven als 0, wordt de parameter niet bijgewerkt, is deze constant.
Voorbeelden
Een reguliere parametermatrix die wordt geïnitialiseerd als heUniform (standaard wordt heNormal):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Een reguliere parameter voor vooroordelen die als nul wordt geïnitialiseerd:
b = ParameterTensor {outDim, initValue=0}
Een insluitmatrix die uit een bestand moet worden gelezen en constant moet worden gehouden:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Een vooroordelenparameter van de volledige grootte van een afbeelding van [width x height]-grootte met numChannels kleurvlakken:
bFull = ParameterTensor {(width:height:numChannels)}
Constante{}
Maak een constante tensor.
Constant {scalarValue, rows=1, cols=1}
Parameters
-
scalarValue: waarde van deze constante -
rows(standaard: 1): aantal rijen, als constante geen scalaire waarde is -
cols(standaard: 1): aantal cols, als constante geen scalaire waarde is
Retourwaarde
Een constante, een scalaire waarde of een rang-1 of rang-2-object van dimensie [rows x cols], waarbij alle elementen worden gevuld met scalarValue.
Beschrijving
Een constante waarde. Het kan een scalaire waarde zijn, of een rang-1-object (vector) of rang-2-object (matrix) geïnitialiseerd met één waarde (zoals 0). Omdat voor vector- en matrixconstanten alle waarden identiek zijn, kunnen constanten die worden gebruikt in combinatie met elementgewijze bewerkingen vaak worden opgegeven als een scalaire waarde, terwijl ze gebruikmaken van uitzenden.
Implementatienotitie:
Een Constant() is een ParameterTensor{} met learningRateMultiplier=0.
Voorbeelden
Interpolatie tussen twee waarden met interpolatiegewicht alpha in bereik 0..1 ("soft multiplexer"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Hamming verlies (cf. hier):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)