diff --git a/2_CNN/Loss.py b/2_CNN/Loss.py new file mode 100644 index 0000000000000000000000000000000000000000..e6c337a652a1f422632d0bf3e11c1b5765872821 --- /dev/null +++ b/2_CNN/Loss.py @@ -0,0 +1,30 @@ +import numpy as np + + +class CrossEntropyLoss: + + def __init__(self): + self.prediction_tensor = None + + def forward(self, prediction_tensor, label_tensor): + loss = 0 + + a = prediction_tensor * label_tensor + for i in range(a.shape[0]): + #print(a[i]) + loss = loss + (-np.log(np.sum(a[i]) + np.finfo(float).eps)) + #print(loss) + #prediction_tensor_i = prediction_tensor[i, :] + #relevant_prediction_tensor_i = prediction_tensor[i, :][label_tensor[i, :] == 1] + #print(relevant_prediction_tensor_i) + #loss = loss - np.sum(np.log(relevant_prediction_tensor_i + epsilon)) + + self.prediction_tensor = np.copy(prediction_tensor) + return loss + + def backward(self, label_tensor): + + error_tensor = np.empty(label_tensor.shape) + for i in range(label_tensor.shape[0]): + error_tensor[i] = - label_tensor[i]/(self.prediction_tensor[i]) + return error_tensor