create_dl_layer_pooling
— Create a pooling layer.
create_dl_layer_pooling( : : DLLayerInput, LayerName, KernelSize, Stride, Padding, Mode, GenParamName, GenParamValue : DLLayerPooling)
The operator create_dl_layer_pooling
creates a pooling layer whose
handle is returned in DLLayerPooling
.
The parameter DLLayerInput
determines the feeding input layer and
expects the layer handle as value.
The parameter LayerName
sets an individual layer name.
Note that if creating a model using create_dl_model
each layer of
the created network must have a unique name.
The parameter KernelSize
specifies the filter kernel in the
dimensions width
and height
.
The parameter Stride
specifies how the filter is shifted.
The values for KernelSize
and Stride
can be set as
a single value which is used for both dimensions
a tuple [width, height]
and [column, row]
,
respectively.
The parameter Padding
determines the padding, thus
how many pixels with value 0 are appended on the border of the
processed input image. Supported values are:
'half_kernel_size' : The number of appended pixels
depends on the specifies KernelSize
.
More precisely, it is calculated as
,
where for the padding on the left / right border the value of
KernelSize
in dimension width
is regarded
and for the padding on the upper / lower border the value of
KernelSize
in height
.
'implicit' : No pixels are appended on the left
or on the top of the input image. The number of pixels appended on the
right or lower border of the input image is
,
or zero if the kernel size is a divisor of the input dimension.
stands for the input width
or height
.
'none' : No pixels are appended.
Number of pixels: Specify the number of pixels appended on each border. To do so, the following tuple lengths are supported:
Single number: Padding in all four directions left/right/top/bottom.
Two numbers: Padding in left/right and top/bottom:
[l/r, t/b]
.
Four numbers: Padding on left, right, top, bottom side:
[l,r,t,b]
.
Restriction: 'runtime' 'gpu' does not support asymmetric padding, i.e., the padding values for the left and right side must be equal, as well as the padding values for the top and bottom side.
Restriction: The integer padding values must be smaller
than the value set for KernelSize
in the corresponding dimension.
The output dimensions of the pooling layer are given by Thereby we use the following values: : output width, : input width, : number of pixels added to the left/top of the input image, and : number of pixels added to the right/bottom of the input image.
The parameter Mode
specifies the mode of the pooling operation.
Supported modes are:
The resulting pixel value is the average of all pixel values in the filter.
The resulting pixel value is the maximum of all pixel values in the filter.
Same as mode 'average' , but
without the knowledge of the spatial dimensions of the input, it is
possible to define the desired output dimensions via the parameter
KernelSize
. E.g., if the average over all pixel values of the
input shall be returned, set the KernelSize
to 1 and the
output width
and height
is equal to 1.
The internally used kernel size and stride are calculated as follows:
If KernelSize
is a divisor of the input dimensions:
The internally used kernel size and stride are both set to the value
.
If KernelSize
is not a divisor of the input dimension:
The calculation of the internally used kernel size and stride depend on
the generic parameter 'global_pooling_mode' :
The internally used is set to . The internally used kernel size is then computed as . This leads to overlapping kernels but the whole input image is taken into account for the computation of the output.
The internally used kernel size and
stride are set to the same value . This leads to
non-overlapping pooling kernels, but parts of the input image at the
right or bottom border might not be considered when computing the
output. In this mode, due to rounding the output size is not always
equal to the size given by KernelSize
.
In this mode, for each pixel
of the output, the size of the corresponding pooling
area within the input is computed adaptively, where are the
row and are the column indices of the output. The row
indices of the pooling area for pixels of the -th output row
are given by
, where
in this case the height of the KernelSize
is used. The
computation of the column coordinates is done analogously. This means
that neighboring pooling areas can have a different size which can lead
to a less efficient implementation. However, the pooling areas are only
overlapping by one pixel which is generally less overlap than for
'global_pooling_mode' 'overlapping' . The whole input
image is taken into account for the computation of the output. For this
mode, the parameter Padding
must be set to 'none' .
For this mode the parameter Stride
is ignored and calculated
internally as described above.
Same as mode 'global_average' , but the maximum is calculated instead of the average.
For more information about the pooling layer see the
“Solution Guide on Classification”
.
The following generic parameters GenParamName
and the corresponding
values GenParamValue
are supported:
Mode for calculation of the internally
used kernel size and stride in case of global pooling (Mode
'global_average' or 'global_maximum' ). See description
above. In case of a non-global pooling the parameter is set to the value
'undefined' .
Default: 'overlapping'
Determines whether apply_dl_model
will include the output of this
layer in the dictionary DLResultBatch
even without specifying
this layer in Outputs
('true' ) or not
('false' ).
Default: 'false'
Certain parameters of layers created using this operator
create_dl_layer_pooling
can be set and retrieved using
further operators.
The following tables give an overview, which parameters can be set
using set_dl_model_layer_param
and which ones can be retrieved
using get_dl_model_layer_param
or get_dl_layer_param
. Note,
the operators set_dl_model_layer_param
and
get_dl_model_layer_param
require a model created by
create_dl_model
.
Layer Parameters | set |
get |
---|---|---|
'global' | x
|
|
'global_pooling_mode' | x
|
|
'input_layer' (DLLayerInput ) |
x
|
|
'kernel_size' (KernelSize ) |
x
|
|
'name' (LayerName ) |
x |
x
|
'output_layer' (DLLayerPooling ) |
x
|
|
'padding' (Padding ) |
x
|
|
'padding_type' (Padding ) |
x
|
|
'pooling_mode' (Mode ) |
x
|
|
'shape' | x
|
|
'stride' (Stride ) |
x
|
|
'type' | x
|
Generic Layer Parameters | set |
get |
---|---|---|
'is_inference_output' | x |
x
|
'num_trainable_params' | x
|
DLLayerInput
(input_control) dl_layer →
(handle)
Feeding layer.
LayerName
(input_control) string →
(string)
Name of the output layer.
KernelSize
(input_control) number-array →
(integer)
Width and height of the filter kernels.
Default: [2,2]
Stride
(input_control) number-array →
(integer)
Bi-dimensional amount of filter shift.
Default: [2,2]
Padding
(input_control) number(-array) →
(string / integer)
Padding type or specific padding size.
Default: 'none'
Suggested values: 'none' , 'half_kernel_size' , 'implicit'
Mode
(input_control) number →
(string)
Mode of pooling operation.
Default: 'maximum'
List of values: 'average' , 'global_average' , 'global_maximum' , 'maximum'
GenParamName
(input_control) attribute.name(-array) →
(string)
Generic input parameter names.
Default: []
List of values: 'global_pooling_mode' , 'is_inference_output'
GenParamValue
(input_control) attribute.value(-array) →
(string / integer / real)
Generic input parameter values.
Default: []
Suggested values: 'adaptive' , 'non_overlapping' , 'overlapping' , 'true' , 'false' , 1.0, 0.9, 0.0
DLLayerPooling
(output_control) dl_layer →
(handle)
Pooling layer.
Deep Learning Training