create_dl_layer_pooling — Erstellen eines Pooling-Layers.
create_dl_layer_pooling( : : DLLayerInput, LayerName, KernelSize, Stride, Padding, Mode, GenParamName, GenParamValue : DLLayerPooling)
Der Operator create_dl_layer_pooling erzeugt einen Pooling-Layer,
dessen Handle in DLLayerPooling zurückgegeben wird.
Der Parameter DLLayerInput bestimmt den zuführenden Eingabelayer
und erwartet das Layer-Handle als Wert.
Der Parameter LayerName legt einen individuellen Layernamen fest.
Es ist zu beachten, dass beim Erstellen eines Modells mit
create_dl_model jeder Layer des erstellten Netzes einen
eindeutigen Namen haben muss.
Der Parameter KernelSize spezifiziert den Filterkernel in den
Dimensionen Breite und Höhe.
Der Parameter Stride gibt an, mit welcher Schrittweite
der Filter verschoben wird.
Die Werte für KernelSize und Stride
können gesetzt werden als
ein einzelner Wert, der für beide Dimensionen verwendet wird
ein Tupel [Breite, Höhe], bzw. [Spalte, Zeile].
Der Parameter Padding bestimmt das Padding, also
wie viele Pixel mit dem Wert 0 an den Rand des zu verarbeitenden
Eingabebildes hinzugefügt werden. Unterstützte Werte sind:
'half_kernel_size': Die Anzahl der hinzugefügten Pixel
hängt von den Werten KernelSize ab.
Genauer gesagt wird die Anzahl berechnet als
,
wobei für das Auffüllen an der linken / rechten Grenze der Wert von
KernelSize in der Dimension Breite betrachtet wird
und für das Auffüllen an der oberen / unteren Grenze der Wert von
KernelSize in Höhe.
'implicit': Am linken oder am oberen Rand des Eingabebildes
werden keine Pixel hinzugefügt. Die Anzahl der hinzugefügten Pixel am
rechten oder am unteren Rand beträgt
(wodurch keine Pixel hinzugefügt werden, wenn die
Kernelgröße ein Teiler der Eingabedimension ist).
steht für die Eingabedimensionen
Breite bzw.Höhe.
'none': Es werden keine Pixel hinzugefügt.
Anzahl der Pixel: Gibt die Anzahl der Pixel an, die an jedem Rand hinzugefügt werden. Dazu werden die folgenden Tupellängen unterstützt:
Einzelne Zahl: Padding in alle vier Richtungen links/rechts/oben/unten.
Zwei Zahlen: Auffüllen links/rechts und oben/unten:
[l/r, o/u].
Vier Zahlen: Auffüllen links, rechts, oben, unten:
[l,r,o,u].
Restriktion: 'runtime' 'gpu' unterstützt kein asymmetrisches Padding, d.h. die Padding-Werte für die linke und rechte Seite müssen gleich sein, ebenso wie die Padding-Werte für die obere und untere Seite.
Restriktion: Die ganzzahligen Padding-Werte müssen kleiner sein
als der für KernelSize eingestellte Wert in der
entsprechenden Dimension.
Die Ausgabedimensionen des Pooling-Layers sind gegeben durch Dabei werden folgende Werte verwendet: : Ausgabebreite/-höhe, : Eingabebreite/-höhe, : Anzahl der links/oben zum Eingabebild hinzugefügten Pixel und : Anzahl der rechts/unten zum Eingabebild hinzugefügten Pixel.
Der Parameter Mode gibt den Modus des Pooling-Vorgangs an.
Unterstützte Modi sind:
Der resultierende Pixelwert ist der Durchschnitt aller Pixelwerte im Filter.
Der resultierende Pixelwert ist das Maximum aller Pixelwerte im Filter.
Gleich wie Modus 'average', aber
die gewünschten Ausgabedimensionen können ohne die Kenntnis der
Eingabedimensionen über den Parameter KernelSize gesteuert werden.
Wenn beispielsweise der Durchschnitt aller Pixelwerte der Eingabe
zurückgegeben werden soll, setzt man KernelSize auf 1
und die Ausgabedimensionen Breite und Höhe sind gleich 1.
Für die intern verwendete Kernelgröße und Schrittweite gilt:
Wenn KernelSize ein Teiler der Eingabedimension ist:
Die intern verwendete Kernelgröße und Schrittweite werden auf den
gleichen Wert
gesetzt.
Wenn KernelSize kein Teiler der Eingabedimension ist:
Die Werte sind abhängig vom generischen Parameter
'global_pooling_mode':
Die intern verwendete Schrittweite () wird auf gesetzt. Die intern verwendete Kernelgröße berechnet sich dann als . Dies führt zu sich überlappenden Kernels, aber das gesamte Eingabebild wird in die Berechnung der Ausgabe mit einbezogen.
Die intern verwendete Kernelgröße und
die Schrittweite werden auf den gleichen Wert
gesetzt. Dies führt zu sich nicht überlappenden Kernels aber kann dazu
führen, dass Bereiche am rechten und unteren Rand des Eingabebildes bei
der Berechnung des Ausgabebildes nicht berücksichtigt werden. Aufgrund
von Rundungen entspricht die Ausgabegröße nicht immer der angegebenen
Größe in KernelSize.
In diesem Modus wird für jeden Pixel
im Ausgabebild die Größe des zugehörigen Pooling-
Bereichs im Eingeabebild adaptiv berechnet, wobei die
Zeilen- und die Spaltenkoordinaten des Pixels im
Ausgabebild sind. Die Zeilenkoordinaten des Pooling-Bereichs im
Eingabebild für Pixel in der -ten Zeile der Ausgabe sind
gegeben durch
, wobei
in diesem Fall die Höhe der KernelSize verwendet wird.
Entsprechendes gilt für die Spaltenkoordinaten.
Das heißt, dass benachbarte Pooling-Bereiche unterschiedlich groß sein
können, was zu einer ineffizienteren Implementierung führen kann.
Allerdings überlappen die Bereiche nur mit einem Pixel, was
grundsätzlich weniger Überlappung als im 'global_pooling_mode'
'overlapping' ist. Das gesamte Eingabebild wird bei diesem
Modus in die Berechnung des Ausgabebildes einbezogen. Für diesen Modus
muss der Parameter Padding auf 'none' gesetzt sein.
Für diesen Modus wird der Parameter Stride ignoriert und intern
berechnet, so wie oben beschrieben.
Gleich wie Modus 'global_average', jedoch wird das Maximum anstelle des Durchschnitts berechnet.
Für weitere Informationen zu Pooling-Layern siehe
„Solution Guide on Classification“.
Die folgenden generischen Parameter GenParamName und die
entsprechenden Werte GenParamValue werden unterstützt:
Modus für die Berechnung der internen
Kernelgröße und des internen Stride im Falle von globalem Pooling
(Mode 'global_average' oder 'global_maximum').
Siehe Beschreibung oben. Im Falle von nicht-globalem Pooling hat der
Parameter den Wert 'undefined'.
Default: 'overlapping'
Bestimmt, ob apply_dl_model die Ausgabe dieses Layers im
Dictionary DLResultBatch zurückgibt, auch ohne den
Layer in Outputs anzugeben ('true'), oder
nur falls er angegeben wird ('false').
Default: 'false'
Bestimmte Parameter von Layern, die mit create_dl_layer_pooling
erzeugt wurden, können mit weiteren Operatoren gesetzt und abgerufen werden.
Die folgenden Tabellen geben einen Überblick, welche Parameter mit
set_dl_model_layer_param gesetzt werden können und welche mit
get_dl_model_layer_param oder get_dl_layer_param ausgelesen
werden können. Es ist zu beachten, dass die Operatoren
set_dl_model_layer_param und get_dl_model_layer_param ein
Modell benötigen, das mit create_dl_model erzeugt wurde.
| Layer-Parameter | set | get |
|---|---|---|
| 'global' | ||
| 'global_pooling_mode' | ||
'input_layer' (DLLayerInput) |
||
'kernel_size' (KernelSize) |
||
'name' (LayerName) |
||
'output_layer' (DLLayerPooling) |
||
'padding' (Padding) |
||
'padding_type' (Padding) |
||
'pooling_mode' (Mode) |
||
| 'shape' | ||
'stride' (Stride) |
||
| 'type' |
| Generische Layer-Parameter | set | get |
|---|---|---|
| 'is_inference_output' | ||
| 'num_trainable_params' |
DLLayerInput (input_control) dl_layer → (handle)
Zuführender Layer.
LayerName (input_control) string → (string)
Name des Ausgabelayers.
KernelSize (input_control) number-array → (integer)
Breite und Höhe des Filterkernels.
Defaultwert: [2,2]
Stride (input_control) number-array → (integer)
Schrittweite des Filters in Breiten- und Höhenrichtung.
Defaultwert: [2,2]
Padding (input_control) number(-array) → (string / integer)
Padding-Typ oder spezifische Padding-Größe.
Defaultwert: 'none'
Wertevorschläge: 'none', 'half_kernel_size', 'implicit'
Mode (input_control) number → (string)
Modus des Pooling-Vorgangs.
Defaultwert: 'maximum'
Werteliste: 'average', 'global_average', 'global_maximum', 'maximum'
GenParamName (input_control) attribute.name(-array) → (string)
Namen der generischen Eingabeparameter.
Defaultwert: []
Werteliste: 'global_pooling_mode', 'is_inference_output'
GenParamValue (input_control) attribute.value(-array) → (string / integer / real)
Werte der generischen Eingabeparameter.
Defaultwert: []
Wertevorschläge: 'adaptive', 'non_overlapping', 'overlapping', 'true', 'false', 1.0, 0.9, 0.0
DLLayerPooling (output_control) dl_layer → (handle)
Pooling-Layer.
Deep Learning Training