Numpy-Neuron / test /test_activation.py
Jensen Holm
adding unit tests for activation functions (using pytest)
ff1254a
raw
history blame
1.48 kB
import os
import sys
import pytest
sys.path.append(os.path.abspath(".."))
import random
import numpy as np
from numpyneuron import (
TanH,
Sigmoid,
Relu,
SoftMax,
Sigmoid,
)
# these functions are meant to work with np.ndarray
# objects, but they will also work with numbers which
# makes testing a little bit simpler
def test_tanh() -> None:
"""
tanh(1) =~ 0.76
tanh'(1) =~ sech^2(1) =~ 0.419
"""
tanh = TanH()
assert tanh.forward(1) == pytest.approx(np.tanh(1))
assert tanh.forward(1) == pytest.approx(0.7615941559557649)
assert tanh.backward(1) == pytest.approx(0.41997434161402614)
def test_sigmoid() -> None:
"""
sigmoid(1) =~ 0.73105
sigmoid'(1) =~ 0.1966
"""
sigmoid = Sigmoid()
assert sigmoid.forward(1) == pytest.approx(0.7310585786300049)
assert sigmoid.backward(1) == pytest.approx(0.4621171572600098)
def test_relu() -> None:
"""
relu(n > 0) = n
relu(n < 0) = 0
relu'(n > 0) = 1
relu'(n < 0) = 0
"""
relu = Relu()
random_n = random.randint(1, 100)
assert relu.forward(random_n) == random_n
assert relu.backward(random_n) == 1
def test_softmax() -> None:
"""
softmax([1, 2, 3]) = [0.090031, 0.244728, 0.665241]
"""
softmax = SoftMax()
vec = np.array([1, 2, 3])
assert np.allclose(
softmax.forward(vec),
np.array([0.090031, 0.244728, 0.665241]),
)
assert np.allclose(softmax.backward(vec), vec)