| 3179 | |
| 3180 | |
| 3181 | class Pool2D(LayerBase): |
| 3182 | def __init__(self, kernel_shape, stride=1, pad=0, mode="max", optimizer=None): |
| 3183 | """ |
| 3184 | A single two-dimensional pooling layer. |
| 3185 | |
| 3186 | Parameters |
| 3187 | ---------- |
| 3188 | kernel_shape : 2-tuple |
| 3189 | The dimension of a single 2D filter/kernel in the current layer |
| 3190 | stride : int |
| 3191 | The stride/hop of the convolution kernels as they move over the |
| 3192 | input volume. Default is 1. |
| 3193 | pad : int, tuple, or 'same' |
| 3194 | The number of rows/columns of 0's to pad the input. Default is 0. |
| 3195 | mode : {"max", "average"} |
| 3196 | The pooling function to apply. |
| 3197 | optimizer : str, :doc:`Optimizer <numpy_ml.neural_nets.optimizers>` object, or None |
| 3198 | The optimization strategy to use when performing gradient updates |
| 3199 | within the :meth:`update` method. If None, use the :class:`SGD |
| 3200 | <numpy_ml.neural_nets.optimizers.SGD>` optimizer with |
| 3201 | default parameters. Default is None. |
| 3202 | """ # noqa: E501 |
| 3203 | super().__init__(optimizer) |
| 3204 | |
| 3205 | self.pad = pad |
| 3206 | self.mode = mode |
| 3207 | self.in_ch = None |
| 3208 | self.out_ch = None |
| 3209 | self.stride = stride |
| 3210 | self.kernel_shape = kernel_shape |
| 3211 | self.is_initialized = False |
| 3212 | |
| 3213 | def _init_params(self): |
| 3214 | self.derived_variables = {"out_rows": [], "out_cols": []} |
| 3215 | self.is_initialized = True |
| 3216 | |
| 3217 | @property |
| 3218 | def hyperparameters(self): |
| 3219 | """Return a dictionary containing the layer hyperparameters.""" |
| 3220 | return { |
| 3221 | "layer": "Pool2D", |
| 3222 | "act_fn": None, |
| 3223 | "pad": self.pad, |
| 3224 | "mode": self.mode, |
| 3225 | "in_ch": self.in_ch, |
| 3226 | "out_ch": self.out_ch, |
| 3227 | "stride": self.stride, |
| 3228 | "kernel_shape": self.kernel_shape, |
| 3229 | "optimizer": { |
| 3230 | "cache": self.optimizer.cache, |
| 3231 | "hyperparameters": self.optimizer.hyperparameters, |
| 3232 | }, |
| 3233 | } |
| 3234 | |
| 3235 | def forward(self, X, retain_derived=True): |
| 3236 | """ |
| 3237 | Compute the layer output given input volume `X`. |
| 3238 |
no outgoing calls