Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Convolution (w, input,
{kernel dimensions},
mapDims = {map dimensions},
stride = {stride dimensions},
sharing = {sharing flags},
autoPadding = {padding flags (boolean)},
lowerPad = {lower padding (int)},
upperPad = {upper padding (int)},
maxTempMemSizeInSamples = 0)
Convolution() berechnet die Konvolution einer Gewichtsmatrix mit einem Bild oder Tensor. Dieser Vorgang wird in Bildverarbeitungsanwendungen und Sprachverarbeitungsanwendungen verwendet. Es unterstützt alle Dimensionen, Stride, Freigabe oder Abstand.
Diese Funktion wird auf Eingabe-Tensoren des Formulars [M1 x M2 x ... x Mn x inChannels]ausgeführt. Dies kann als Rangobjektn verstanden werden, wobei jeder Eintrag aus einem inChannels-dimensionalen Vektor besteht.
Beispielsweise würde ein RGB-Bild Dimensionen [W x H x 3]haben, d. h. eine [W x H]Struktur der Größe, bei der jeder Eintrag (Pixel) aus einem 3-Tupel besteht (Beachten Sie jedoch, dass das Speicherformat die Verkettung von 3 Ebenen der Größe [W x H]ist).
Convolution() konvolviert die Eingabe mit n+1-dimensionalen Filtern, wobei die ersten n Dimensionen das räumliche Ausmaß des Filters sind, und die letzte muss gleich inChannelssein. Es gibt outChannels Filter. Für jede Ausgabeposition wird ein Bemaßungsvektor outChannels berechnet. Daher ist (M1*M2*...*Mn) * inChannels * outChannelsdie Gesamtanzahl der Filterparameter .
Convolution() hat die folgenden Parameter:
w- Konvolutionfiltergewichte, die als Matrix von Dimensionen[outChannels, (M1*M2*...*Mn)]gespeichert sind, wobei(M1*M2*...*Mn)es sich um das Produkt der Kerneldimensionen handelt, z. B.75für einen[5 x 5]Filter in der Größe von 3 Eingabekanälen.input- Konvolutionseingabe. Ein Tensor mit Abmessungen[M1 x M2 x ... x Mn x inChannels].kernel dimensions- Dimensionen der Filter einschließlich der Anzahl der Eingabekanäle, die als BrainScript-Vektor angegeben sind. Die letzte Dimension muss der Anzahl der Eingabekanäle entsprechen. Z. B.(5:5:3)für einen Filter auf einer[5 x 5]3-Kanal-Eingabe.mapDims- [benannt, optional, Standard ist 0] Anzahl der Ausgabekanäle (=oben genanntoutChannels; identisch mit der Tiefe der resultierenden Featurezuordnung). 0 bedeutet, dass die Zeilendimension vonwstride- [benannt, optional, Standard ist 1] Strideabmessungen. Eine Stride > 1 bedeutet, dass nur Pixelpositionen, die Vielfache des Stridewerts sind, berechnet werden. Beispielsweise führt ein Schritt von 2 zu einer Halbierung der Dimensionen. Die letzte Schrittdimension, die mit der Anzahl der Eingabekanäle verbunden ist, muss gleich der Anzahl der Eingabekanäle sein.sharing- [benannt, optional, Standard ist wahr] Freigabekennzeichnungen für jede EingabedimensionautoPadding- [benannt, optional, Standard ist wahr] Flags für jede Eingabedimension, ob sie automatisch (also symmetrisch) oder überhaupt nicht gepolstert werden soll. Padding bedeutet, dass der Konvolution-Kernel auf alle Pixelpositionen angewendet wird, wobei alle Pixel außerhalb des Bereichs null angenommen werden ("gepolstert mit Nullen"). Ohne Abstand werden die Kernel nur über Positionen verschoben, an denen alle Eingaben im Kernel immer noch in den Bereich fallen. In diesem Fall ist die Ausgabedimension kleiner als die Eingabedimension. Der letzte Wert, der mit der Anzahl der Eingabekanäle verbunden ist, muss seinfalse.lowerPad- [benannt, optional, Standard ist 0] präziser niedrigerer Abstand für jede Eingabedimension.upperPad- [benannt, optional, Standard ist 0] präzise obere Abstand für jede Eingabedimension.maxTempMemSizeInSamples- [benannte optional] maximale Menge an Hilfsspeicher (in Beispielen), die für die Ausführung von Konvolutionsvorgängen reserviert werden sollen. Einige Convolution-Engines (z. B. CuDNN- und GEMM-basierte Engines) können von der Verwendung des Arbeitsbereichs profitieren, da sie die Leistung verbessern kann. Manchmal kann dies jedoch zu einer höheren Speicherauslastung führen. Der Standardwert ist "0". Dies bedeutet identisch mit den Eingabebeispielen.
Alle Werte des Formulars {...} müssen tatsächlich als doppelpunkttrennte Abfolge von Werten angegeben werden, z. B. (5:5) für die Kerneldimensionen. (Wenn Sie die veraltete NDLNetworkBuilderDatei verwenden, müssen diese durch Kommas getrennt und stattdessen { } eingeschlossen werden.)
Beispiel:
ConvReLULayer(inp, outMap, inMap, kW, kH, hStride, vStride, wScale, bValue) =
[
W = Parameter (outMap, inMap * kW * kH, init="gaussian", initValueScale=wScale)
b = Parameter (outMap, 1, init="fixedValue", value=bValue)
c = Convolution (W, inp, (kW:kH:inMap), stride=(hStride:vStride:inMap), autoPadding=(true:true:false))
y = RectifiedLinear (c + b)
].y
Hinweis: Wenn Sie die veraltete NDLNetworkBuilderVersion verwenden, sollte im Beispiel kein Nachlauf .y vorhanden sein.
Vereinfachte 2D-Convolution (nur veraltete NDL)
Die jetzt veraltete NDL-Sprache hat eine vereinfachte 2D-Variante von Convolution():
Convolution (w, image,
kernelWidth, kernelHeight, mapDims,
horizontalStride, verticalStride,
zeroPadding=false, maxTempMemSizeInSamples=0, imageLayout="cudnn" /* or "HWC"*/ )
Dabei gilt:
w- Konvolution-Gewichtsmatrix, es hat die Dimensionen von[mapDims, kernelWidth * kernelHeight * inputChannels].image- das Eingabebild.kernelWidth- Breite des KernelskernelHeight- Höhe des KernelsmapDims- Tiefe der Ausgabefeaturezuordnung (Anzahl der Ausgabekanäle)horizontalStride- Stride in horizontaler RichtungverticalStride- Stride in vertikaler RichtungzeroPadding- [benannt] gibt an, ob die Seiten des Bilds mit Nullen gepolstert werden sollen. Der Standardwert ist "false".maxTempMemSizeInSamples- [benannte optional] maximale Menge an Hilfsspeicher (in Beispielen), die für die Ausführung von Konvolutionsvorgängen reserviert werden sollen. Einige Convolution-Engines (z. B. CuDNN- und GEMM-basierte Engines) können von der Verwendung des Arbeitsbereichs profitieren, da sie die Leistung verbessern kann. Manchmal kann dies jedoch zu einer höheren Speicherauslastung führen. Der Standardwert ist "0". Dies bedeutet identisch mit den Eingabebeispielen.imageLayout- [benannt] das Speicherformat jedes Bilds. Dies ist eine Legacyoption. Standardmäßig ist esHWC, was bedeutet, dass jedes Bild als[channel, width, height]Spalten-Hauptspeicher gespeichert wird. Wenn Sie cuDNN verwenden, um die Schulung zu beschleunigen, sollten Sie ihn aufcudnnfestlegen, was bedeutet, dass jedes Bild als[width, height, channel]gespeichert wird. Beachten Sie, dasscudnndas Layout sowohl auf GPU als auch auf CPU funktioniert, sodass es standardmäßig verwendet werden soll.