23. 패키지로 정리¶
- 모듈: 모듈은 파이썬 파일. 특히 다른 파이썬 프로그램에서 임포트 하여 사용하는 것을 가정하고 만들어진 파이썬 파일을 모듈이라고 함
- 패키지: 여러 모듈을 묶은 것. 패키지를 만들려면 디렉터리를 만들고 그 안에 모듈(파이썬 파일)을 추가함
- 라이브러리: 여러 패키지를 묶은 것. 그래서 하나 이상의 디렉터리로 구성됨. 때로는 패키지를 가리켜 라이브러리라고 함
23.1 파일 구성~ 23.2 코어 클래스로 옮기기¶
In [1]:
import numpy as np
from dezero.core_simple import Variable
x = Variable(np.array(1.0))
print(x)
23.3 연산자 오버로드¶
- setup_variable은 Variable의 연산자들을 오버로드 해주는 함수. 이 함수를 호출하면 Variable의 연산자들이 설정됨. dezero/init.py 파일에서 설정함.
- init.py 모듈을 임포트할 때 가장 먼저 실행되는 파일.
...¶
23.5 dezero 임포트¶
In [2]:
if 'file' in globals():
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import numpy as np
from dezero import Variable
x = Variable(np.array(1.0))
y = (x+3)**2
y.backward()
print(y)
print(x.grad)
- 우선
if '__file__' in globals():
라는 문장에서 file이라는 전역 변수가 정의되어 있는지 확인함. - 터미널에서 python 명령으로 실행한다면 file 변수가 정의되어 있음. 이 경우 현재 파일이 위치한 디렉터리의 부모 디렉터리를 모듈 검색 경로에 추가함.
- 이로써 파이썬 명령어를 어디든 실행하든 dezero 디렉터리의 파일들은 제대로 임포트할 수 있게됨
24. 복잡한 함수의 미분¶
- DeZero는 이제 대표적인 연산자들(+, -, -, /, **)을 지원함. 따라서 평소 파이썬 프로그래밍을 하듯 코딩가능함. 이 혜택은 복잡한 수식을 코딩할 때 피부로 와닿음
- 이번 단계에서 다루는 함수들은 최적화 문제에서 자주 사용되는 테스트 함수. 최적화 문제의 테스트 함수란 다양한 최적화 기법이 '얼마나 좋은가'를 평가하는 데 사용되는 함수를 뜻함.
24.1 Sphere 함수¶
- Sphere 함수를 수식으로 표현하면 $z=x^2+y^2$. 우리가 할 일은 그 미분을 계산하는 것
- (x, y) = (1.0, 1.0)인 경우를 미분
In [3]:
import numpy as np
from dezero import Variable
def sphere(x, y):
z = x ** 2 + y ** 2
return z
x = Variable(np.array(2.0))
y = Variable(np.array(1.0))
z = sphere(x, y)
z.backward()
print(x.grad, y.grad)
24.2 matyas 함수¶
- $z=0.26(x^2 + y^2)-0.48xy$
- 차원이 x, y, z뿐인 3차원 공간에서의 Sphere 함수.
In [4]:
def matyas(x, y):
z = 0.26*(x**2 + y**2)-0.48*x*y
return z
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = matyas(x, y)
z.backward()
print(x.grad, y.grad)
24.3 Goldstein-Price 함수¶
- $f(x, y) = [1+(x+y+1)^2(19-14x+3x^2-14y+6xy+3y^2)][30+(2x-3y)^2(18-32x+12x^2+48y-36xy+27y^2)]$
In [5]:
def goldstein(x, y):
z = (1 + (x + y + 1)**2 * (19 - 14*x + 3*x**2 - 14*y + 6*x*y + 3*y**2)) * \
(30 + (2*x - 3*y)**2 * (18 - 32*x + 12*x**2 + 48*y - 36*x*y + 27*y**2))
return z
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = goldstein(x, y)
z.backward()
print(x.grad, y.grad)
- 이제 복잡한 계산도 가능함(엄밀히 말하면 복잡한 계산 그래프라도 올바르게 역전파가 가능함)
- 다음 단계에서부터 더 고급 계산도 처리할 수 있도록 DeZero를 확장해감
In [ ]:
'기계학습 > 밑바닥딥러닝3 오독오독 씹기' 카테고리의 다른 글
Chapter 3. 고차 미분 계산(step 25~26)/ 계산 그래프 시각화 (0) | 2021.01.26 |
---|---|
Chapter 2. 자연스러운 코드로(step 17~19)/ 연산자 오버로드 (0) | 2021.01.04 |
Chapter 2. 자연스러운 코드로(step 17~19) (0) | 2020.12.29 |
Chapter 2. 자연스로운 코드로(step 16) (0) | 2020.12.16 |
Chapter 2. 자연스러운 코드로(step 11~14) (0) | 2020.12.07 |