DonHurry

step23. νŒ¨ν‚€μ§€λ‘œ 정리 λ³Έλ¬Έ

DeZero/πŸ—»μ œ2κ³ μ§€

step23. νŒ¨ν‚€μ§€λ‘œ 정리

_도녁 2023. 1. 24. 00:01

πŸ“’ λ³Έ ν¬μŠ€νŒ…μ€ λ°‘λ°”λ‹₯λΆ€ν„° μ‹œμž‘ν•˜λŠ” λ”₯λŸ¬λ‹3을 기반으둜 μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³ , 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±ν•˜λŠ” ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ ꡐ재 ꡬ맀λ₯Ό κ°•λ ₯ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.

 

 

이번 λ‹¨κ³„μ—μ„œλŠ” μ§€κΈˆκΉŒμ§€μ˜ μ½”λ“œλ₯Ό νŒ¨ν‚€μ§€λ‘œ μ •λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€. dezero 디렉터리λ₯Ό λ§Œλ“€κ³  λͺ¨λ“ˆλ“€μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. 파이썬 νŒŒμΌμ€ λͺ¨λ“ˆμ΄ 되고, λͺ¨λ“ˆλ“€μ„ 디렉터리에 λͺ¨μœΌλ©΄ νŒ¨ν‚€μ§€κ°€ λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ§Œλ“€μ–΄μ§€λŠ” dezero νŒ¨ν‚€μ§€κ°€ ν˜„μž¬ λ§Œλ“€κ³  μžˆλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μš°μ„ μ€ core_simple.pyλΌλŠ” νŒŒμΌμ„ λ§Œλ“€κ³  step22의 ν΄λž˜μŠ€μ™€ ν•¨μˆ˜λ“€μ„ κ·ΈλŒ€λ‘œ λ³΅μ‚¬ν•©λ‹ˆλ‹€. λ‚˜μ€‘μ—λŠ” μ΅œμ’… ν˜•νƒœμΈ core.py둜 κ΅μ²΄ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€.

 

μ½”μ–΄νŒŒμΌμΈ dezero/core_simple.py에 μ—°μ‚°μžλ“€μ„ μ˜€λ²„λ‘œλ“œν•΄μ£ΌλŠ” ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

def setup_variable():
    Variable.__add__ = add
    Variable.__radd__ = add
    Variable.__mul__ = mul
    Variable.__rmul__ = mul
    Variable.__neg__ = neg
    Variable.__sub__ = sub
    Variable.__rsub__ = rsub
    Variable.__truediv__ = div
    Variable.__rtruediv__ = rdiv
    Variable.__pow__ = pow

 

μ•žμ„  ν•¨μˆ˜λ“€μ€ dezero/__init__.py νŒŒμΌμ—μ„œ ν˜ΈμΆœν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ€ λͺ¨λ“ˆμ„ importν•  λ•Œ κ°€μž₯ λ¨Όμ € μ‹€ν–‰λ©λ‹ˆλ‹€. μ΄λ•Œ 33λ‹¨κ³„μ—μ„œλΆ€ν„°λŠ” core.py둜 λŒ€μ²΄ν•  μ˜ˆμ •μ΄λ―€λ‘œ core_simple.py와 core.py 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜μ—¬ import ν•  수 μžˆλ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€. μš°μ„  core.pyλ₯Ό importν•˜λŠ” 뢀뢄은 λΉ„μ›Œλ‘λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

is_simple_core = True

if is_simple_core:
    from dezero.core_simple import Variable
    from dezero.core_simple import Function
    from dezero.core_simple import using_config
    from dezero.core_simple import no_grad
    from dezero.core_simple import as_array
    from dezero.core_simple import as_variable
    from dezero.core_simple import setup_variable
else:
    pass

setup_variable()

 

이제 λ‹€μŒκ³Ό 같이 dezero νŒ¨ν‚€μ§€λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 검색 경둜 μΆ”κ°€ μ½”λ“œλŠ” dezero 디렉터리λ₯Ό import ν•˜κΈ° μœ„ν•΄ μΌμ‹œμ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. 후에 pip install λ“±μœΌλ‘œ DeZeroκ°€ νŒ¨ν‚€μ§€λ‘œ μ„€μΉ˜λœλ‹€λ©΄, 파이썬 검색 κ²½λ‘œμ— μΆ”κ°€λ˜κΈ° λ•Œλ¬Έμ— μˆ˜λ™μœΌλ‘œ 경둜λ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. μ•žμœΌλ‘œλŠ” dezero 디렉터리에 μžˆλŠ” λͺ¨λ“ˆλ“€μ„ ν™•μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.

# Add import path for the dezero directory
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)  # variable(16.0
print(x.grad)  # 8.0