Source code for mapyl.NN.activations

import numpy as np
from .loss import CatCrossEntr
from .loss import _Loss


[docs]class ReLU: """Rectified Linear Unit activation funtion""" def _forward(self, inputs, training): self.inputs = inputs self.output = np.maximum(0, inputs) def _backward(self, dvalues): self.dinputs = dvalues.copy() self.dinputs[self.inputs <= 0] = 0
[docs]class SoftMax: """ SoftMax activation function, classifies the inputs and returns confidence scores for each class """ def _forward(self, inputs, training=None): self.inputs = inputs exp = np.exp(inputs - np.max(inputs, axis=1, keepdims=True)) probs = exp/np.sum(exp, axis=1, keepdims=True) self.output = probs def _backward(self, dvalues): self.dinputs = np.empty_like(dvalues) for index, (single_output, single_dvalues) in enumerate(zip(self.output, dvalues)): single_output = single_output.reshape(-1, 1) jacobian_matrix = np.diagflat(single_output) - np.dot(single_output, single_output.T) self.dinputs[index] = np.dot(jacobian_matrix, single_dvalues) def _preds(self, outputs): return np.argmax(outputs, axis=1)
class _SoftMaxLoss(): """Classifier activation function along with loss calculator, internal use""" def _backward(self, dvalues, y): samples = len(dvalues) if len(y.shape) == 2: y = np.argmax(y, axis=1) self.dinputs = dvalues.copy() self.dinputs[range(samples), y] -= 1 self.dinputs = self.dinputs / samples