Parametri E costanti
ParameterTensor{}
Crea un scalare, un vettore, una matrice o un tensore di parametri appresi.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parametri
shape
: forma (dimensioni) del parametro come matrice. Ad esempio,(13:42)
per creare una matrice con 13 righe e 42 colonne. Per alcune operazioni, le dimensioni specificate come 0 vengono dedotte automaticamente (vedere qui)init
(impostazione predefinita 'uniform'): specifica l'inizializzazione casuale, ad esempioinit='heNormal'
(vedere qui)initOutputRank
(impostazione predefinita 1): specifica il numero di assi di fanout iniziali. Se negativo, -numero di assi finali di fan-out (vedere qui)initValueScale
(impostazione predefinita 1): fattore di ridimensionamento aggiuntivo applicato ai valori di inizializzazione casualerandomSeed
(impostazione predefinita -1): se positivo, usare questo seed casuale per l'inizializzazione casuale. Se negativo, usare un contatore che viene aumentato per ogniParameterTensor{}
initValue
: specifica l'inizializzazione con un valore costante, ad esempioinitValue=0
initFromFilePath
: specifica l'inizializzazione caricando i valori iniziali da un file. Ad esempioinitFromFilePath="my_init_vals.txt"
learningRateMultiplier
: la frequenza di apprendimento del sistema verrà ridimensionata da questa (0 per disabilitare l'apprendimento ) (vedere qui)
Valore restituito
Un tensore di parametri appresi.
Descrizione
Questa funzione factory crea un oggetto scalare, vettore, matrice o tensore di parametri appresi, ovvero un tensore riconosciuto dall'azione come parametri che devono essere aggiornati durante il "train"
training.
I valori verranno inizializzati, a seconda del parametro facoltativo specificato, a
- numeri casuali, se
init
viene specificato; - una costante se
initValue
viene specificata; o - un tensore letto da un file di input esterno se
initFromFilePath
specificato. Il valore predefinito èinit="uniform"
.
Per creare un scalare, un vettore, una matrice o un tensore con la classificazione>2, passare quanto segue come shape
parametro:
(1)
per un scalare;(M)
per un vettore di colonna conM
elementi;(1:N)
per un vettore di righe conN
elementi. I vettori di riga sono matrici di una riga;(M:N)
per una matrice conN
righe eI
colonne;(I:J:K...)
per un tensore di rango>arbitrario 2 (nota: il rango massimo consentito è 12); e(W:H:C)
per un tensore che corrisponde alle dimensioni di un'immagine[W x H]
conC
canali.
Inferenza automatica delle dimensioni
Quando un ParameterTensor
oggetto viene usato per i pesi come input immediato di operazioni specifiche, è consentito specificare alcune dimensioni come Inferred
. Ad esempio, il prodottoParameterTensor{42:Inferred} * x)
matrice dedurrà automaticamente la seconda dimensione come uguale alla dimensione di x
.
Questo è estremamente utile per gli input di livelli, perché libera il codice BrainScript dell'utente dall'onere di passare intorno alle dimensioni di input. Inoltre, in alcune situazioni è molto complesso determinare le dimensioni di input precise di un livello, ad esempio per il primo livello completamente connesso sopra una piramide di combinazioni di convoluzione/pooling senza riempimento, dove ogni operazione di convoluzione e pooling può eliminare righe o colonne di pixel di limite e scalare le dimensioni.
Questa funzionalità consente di specificare i livelli predefiniti di CNTK solo dalla dimensione di output (ad esempio DenseLayer
{1024}
).
Inizializzazione casuale
L'inizializzazione init
casuale viene selezionata dal parametro, che sceglie tra distribuzione uniforme e normale, in cui la deviazione di intervallo/standard viene calcolata come funzione di fan-in e fan-out:
valore di init |
distribuzione | intervallo/deviazione standard |
---|---|---|
'heNormal' | normale | sqrt (2/fanIn) |
'heUniform' | uniform | sqrt (6/fanIn) |
'glorotNormal' | normale | sqrt (2/ (fanIn+fanOut)) |
'glorotUniform' | uniform | sqrt (6/ (fanIn+fanOut)) |
'saverio' | uniform | sqrt (3/fanIn) |
'uniforme' | uniform | 1/20 |
'gaussian' | normale | sqrt (0,04/fanIn) |
'zero' | n/d | 0 |
(Dove zero
è un'alternativa a volte conveniente per specificare initValue=0
.) Per la distribuzione uniforme, i parametri verranno inizializzati uniformemente in [intervallo, intervallo]; per la distribuzione normale, la media è sempre zero.
Si noti che il valore predefinito per init
è quando si uniform
usa ParameterTensor{}
direttamente.
Tuttavia, il valore predefinito è glorotUniform
per i livelli che contengono parametri all'interno, ad esempio DenseLayer{}
e ConvolutionalLayer{}
.
Fan-in e fan-out per l'inizializzazione casuale
L'inizializzazione casuale presuppone che i parametri facciano parte di una forma di operazione di tipo matrix-product che ha una ventola ben definita e un fan-out, che vengono usati per determinare il ridimensionamento dei valori casuali per ogni tabella precedente. Per impostazione predefinita, il primo asse viene considerato fan-out e gli assi rimanenti sono la semantica corrispondente del prodotto matrice regolare.
Il parametro initOutputRank
facoltativo può essere usato per specificare il numero di assi iniziali che devono essere considerati fan-out. Ad esempio, per un prodotto matrice nell'interpretazione del tensore esteso di CNTK che esegue il mapping di un [K]
vettore x
-dimensionale a un [I x J]
oggetto rank-2 -dimensionale può essere scritto come Times
(W, x, outputRank=2)
, dove W
ha la forma [I x J x K]
.
In questo caso, initOutputRank=2
specifica che nel ridimensionare i valori di inizializzazione casuale, la ventola è I*J
e la ventola in K
.
I valori negativi per initOutputRank
indicare che gli assi della ventola sono assi finali. Ad esempio, il kernel del filtro dell'oggetto e l'operazione sottostante per una tipica configurazione di ConvolutionalLayer{}
elaborazione delle immagini ha una forma [W x H x C x K]
, dove K
è la ventola, mentre la ventola è W*H*C
.Convolution()
Questo valore viene specificato da initOutputRank=-1
.
Lettura dei valori iniziali dai file
I valori iniziali possono essere letti da un file di testo. A tale scopo, passare un nome percorso per il parametro initFromFilePath
facoltativo .
È previsto che il file di testo sia costituito da una riga per ogni riga, costituita da numeri separati dallo spazio, una per colonna.
Le dimensioni di riga e colonna nel file devono corrispondere shape
a .
Frequenza di apprendimento specifica dei parametri
I tassi di apprendimento specifici dei parametri possono essere realizzati con il parametro facoltativo learningRateMultiplier
.
Questo fattore viene moltiplicato con la frequenza di apprendimento effettiva durante l'esecuzione degli aggiornamenti dei parametri.
Ad esempio, se specificato come 0, il parametro non verrà aggiornato, è costante.
Esempio
Matrice di parametri regolare che verrà inizializzata come heUniform
(il valore predefinito sarà heNormal
):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Parametro di distorsione regolare che verrà inizializzato come zero:
b = ParameterTensor {outDim, initValue=0}
Matrice di incorporamento che deve essere letto da un file e mantenuta costante:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Parametro di pregiudizio della dimensione completa di un'immagine [width x height]
-size con numChannels
piani di colore:
bFull = ParameterTensor {(width:height:numChannels)}
Costante{}
Creare un tensore costante.
Constant {scalarValue, rows=1, cols=1}
Parametri
scalarValue
: valore di questa costanterows
(impostazione predefinita: 1): numero di righe, se la costante non è scalarecols
(impostazione predefinita: 1): numero di regole di confronto, se la costante non è una scalare
Valore restituito
Costante, un oggetto scalare o rank-1 o rank-2 della dimensione [rows x cols]
, in cui tutti gli elementi vengono riempiti con scalarValue
.
Descrizione
Valore costante. Può essere un oggetto scalare o un oggetto rank-1 (vettore) o un oggetto rank-2 (matrice) inizializzato con un singolo valore (ad esempio 0). Si noti che, poiché per le costanti vettoriali e matrice tutti i valori sono identici, le costanti usate in combinazione con operazioni a livello di elemento possono spesso essere specificate come scalari, sfruttando il vantaggio della trasmissione.
Nota di implementazione:
Un Constant()
oggetto è con learningRateMultiplier=0
ParameterTensor{}
.
Esempio
Interpolazione tra due valori con peso alpha
interpolazione nell'intervallo 0..1 ("multiplexer soft"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Perdita di scompimento (vedere qui):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)