영넌 개발로그

[밑시딥3] 미분 자동 계산 4 - 테스트 본문

코딩/ML , Deep

[밑시딥3] 미분 자동 계산 4 - 테스트

영넌 2023. 9. 5. 23:39

파이썬 단위 테스트

표준 라이브러리 unittest 사용

unittest와 TestCase를 상속한 클래스를 구현하고 test 메소드 생성

테스트 케이스가 많아질수록 테스트 하는 함수의 신뢰도 상승

import unittest
import deep

def numerical_diff(f, x, eps=1e-4):
    x0 = deep.Variable(x.data - eps)
    x1 = deep.Variable(x.data + eps)
    y0 = f(x0)
    y1 = f(x1)
    return (y1.data - y0.data) / (2 * eps)

class SquareTest(unittest.TestCase):
    def test_forward(self):
        x = deep.Variable(np.array(2.0))
        y = deep.square(x)
        expected = np.array(4.0)
        self.assertEqual(y.data, expected)

    def test_backward(self):
        x = deep.Variable(np.array(3.0))
        y = deep.square(x)
        y.backward()
        expected = np.array(6.0)
        self.assertEqual(x.grad, expected)

    #미분의 기댓값 자동화
    #수치 미분으로 구한 결과와 역전파로 구한 결과 비교
    def test_gradient_check(self):
        x = deep.Variable(np.random.rand(1))
        y = deep.square(x)
        y.backward()
        num_grad = numerical_diff(square, x)
        flg = np.allclose(x.grad, num_grad)
        self.assertTrue(flg)
* np.allclose(a,b)

ndarray 인스턴스인 a와 b의 값이 가까운지 판정
가까움에 대한 기준은 인수 rtol과 atol로 지정
| a - b | <= ( atol + rtol * | b |) 수식을 만족하면  True 반환


* CI (Continuous Integration) 서비스 - 지속적 통합

깃허브 저장소에서 코드를 push하고 pull request를 병합하고, 매시간 자동으로 테스트가 실행되도록 설정해놓은 것
소스 코드를 지속해서 테스트하여 코드의 신뢰성을 유지함
Comments