diff --git a/src/layer.py b/src/layer.py
index e3e9b20..3214d26 100644
--- a/src/layer.py
+++ b/src/layer.py
@@ -89,3 +89,28 @@ class ReLU(Layer):
 
     def d_output_wrt_inputs(self) -> np.ndarray:
         return (self._cached_inputs > 0) * 1.0
+
+
+class Softmax(Layer):
+    def forward(self, x: np.ndarray) -> np.ndarray:
+        exp = np.exp(x)
+        return exp / np.sum(exp)
+
+    @property
+    def parameters(self) -> list[np.ndarray]:
+        return []
+
+    @parameters.setter
+    def parameters(self, parameters: list[np.ndarray]) -> None:
+        return
+
+    def d_output_wrt_parameters(self) -> list[np.ndarray]:
+        return []
+
+    def d_output_wrt_inputs(self) -> np.ndarray:
+        exp = np.exp(self._cached_inputs)
+        out = exp / np.sum(exp)
+        return out * (1 - out)
+    
+
+Softmax()