Source code for epynn.template.models

# EpyNN/epynn/template/parameters
# Local application/library specific imports
from epynn.commons.models import Layer
from epynn.commons.maths import activation_tune
from epynn.template.forward import template_forward
from epynn.template.backward import template_backward
from epynn.template.parameters import (
    template_compute_shapes,
    template_initialize_parameters,
    template_compute_gradients,
    template_update_parameters
)


[docs]class Template(Layer): """ Definition of a template layer prototype. This is a pass-through or inactive layer prototype which contains method definitions used for all active layers. For all layer prototypes, methods are wrappers of functions which contain the specific implementations. """
[docs] def __init__(self): """Initialize instance variable attributes. Extended with ``super().__init__()`` which calls :func:`epynn.commons.models.Layer.__init__()` defined in the parent class. :ivar trainable: Whether layer's parameters should be trainable. :vartype trainable: bool """ super().__init__() self.trainable = True return None
[docs] def compute_shapes(self, A): """Is a wrapper for :func:`epynn.template.parameters.template_compute_shapes()`. :param A: Output of forward propagation from *previous* layer. :type A: :class:`numpy.ndarray` """ template_compute_shapes(self, A) return None
[docs] def initialize_parameters(self): """Is a wrapper for :func:`epynn.template.parameters.template_initialize_parameters()`. """ template_initialize_parameters(self) return None
[docs] def forward(self, A): """Is a wrapper for :func:`epynn.template.forward.template_forward()`. :param A: Output of forward propagation from *previous* layer. :type A: :class:`numpy.ndarray` :return: Output of forward propagation for **current** layer. :rtype: :class:`numpy.ndarray` """ self.compute_shapes(A) activation_tune(self.se_hPars) A = template_forward(self, A) self.update_shapes(self.fc, self.fs) return A
[docs] def backward(self, dX): """Is a wrapper for :func:`epynn.template.backward.template_backward()`. :param dX: Output of backward propagation from *next* layer. :type dX: :class:`numpy.ndarray` :return: Output of backward propagation for **current** layer. :rtype: :class:`numpy.ndarray` """ activation_tune(self.se_hPars) dX = template_backward(self, dX) self.update_shapes(self.bc, self.bs) return dX
[docs] def compute_gradients(self): """Is a wrapper for :func:`epynn.template.parameters.template_compute_gradients()`. Dummy method, there are no gradients to compute in layer. """ template_compute_gradients(self) return None
[docs] def update_parameters(self): """Is a wrapper for :func:`epynn.template.parameters.template_update_parameters()`. Dummy method, there are no parameters to update in layer. """ if self.trainable: template_update_parameters(self) return None