diff --git a/3_RNN/Constraints.py b/3_RNN/Constraints.py new file mode 100644 index 0000000000000000000000000000000000000000..662b57ae2a9aac555815e0f8f8d6a0412793243a --- /dev/null +++ b/3_RNN/Constraints.py @@ -0,0 +1,37 @@ +import numpy as np +from numpy import linalg as LA + + +class L2_Regularizer: + def __init__(self, alpha): + self.regularization_weight = alpha + self.norm_enhanced_loss = None + self.alpha_weight = None + + def calculate_gradient(self, weights): + self.alpha_weight = self.regularization_weight * weights + return self.alpha_weight + + def norm(self, weights): + sqr_val = np.square(weights) + sum_tot = np.sum(sqr_val) + self.norm_enhanced_loss = self.regularization_weight* sum_tot + return self.norm_enhanced_loss + + +class L1_Regularizer: + def __init__(self, alpha): + self.regularization_weight = alpha + self.norm_enhanced_loss = None + self.alpha_weight = None + + def calculate_gradient(self, weights): + self.alpha_weight = self.regularization_weight * np.sign(weights) + return self.alpha_weight + + def norm(self, weights): + abs_val = np.absolute(weights) + sum_tot= np.sum(abs_val) + weight_matrix_norm = sum_tot + self.norm_enhanced_loss = self.regularization_weight * weight_matrix_norm + return self.norm_enhanced_loss