영넌 개발로그
[밑시딥3] 미분 자동 계산 4 - 테스트 본문
파이썬 단위 테스트
표준 라이브러리 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를 병합하고, 매시간 자동으로 테스트가 실행되도록 설정해놓은 것
소스 코드를 지속해서 테스트하여 코드의 신뢰성을 유지함
'코딩 > ML , Deep' 카테고리의 다른 글
[밑시딥 3] 자연스러운 코드로 2 - 복잡한 계산 그래프 (0) | 2023.09.06 |
---|---|
[밑시딥3] 자연스러운 코드로 1 - 가변 길이 인수, 같은 변수 반복 사용 (0) | 2023.09.06 |
[밑시딥3] 미분 자동 계산 3 - 함수를 더 편리하게 (0) | 2023.08.16 |
[밑시딥3] 미분 자동 계산 2 - 역전파 (0) | 2023.08.16 |
Comments