개인 공부 공간/딥러닝
밑바닥부터 시작하는 딥러닝3 - STEP 19
Hoon Kang
2021. 3. 15. 18:14
변수 이름 지정
다양한 변수를 구분짓기 위해 변수에 이름을 지정해줄 수 있도록 Variable
클래스 코드에 수정이 필요하다.
class Variable:
def __init__(self, data, name=None):
if data is not None:
if not isinstance(data, np.ndarray):
raise TypeError('{}은(는) 지원하지 않습니다.'.format(type(data)))
self.data = data
self.name = name
self.grad = None
self.creator = None
self.generation = 0
....
이제 x = Variable(np.array(1.0), 'input_x')
라고 작성하면 변수명은 input_x
가 된다.
ndarray 인스턴스 변수
STEP 1에서 언급했듯이 Variable
은 데이터를 담는 상자 역할을 한다. 하지만 이용자 입장에서는 그 상자 안에 담겨있는 데어티이다. 그래서 이번 단계에서는 Variable
이 데이터처럼 보이도록 즉, 상자를 투명하게 해주는 장치를 구현하였다. 다르게 말하면 Variable
인스턴스를 ndarray
인스턴스처럼 보이도록 하였다.
class Variable:
....
@property
def shape(self):
return self.data.shape
shape
메서드를 구현해 실제 데이터의 형태를 반환하도록 하였다. 여기서 핵심은 @property
를 이용해 shape
메서드를 인스턴스 변수처럼 사용할 수 있게 된 부분이다.
x = Variable(np.array([[1,2,3], [4,5,6]]))
print(x.shape)
실행 결과
(2, 3)
len 함수와 print 함수
Variable
클래스를 확장하여 파이썬의 len
함수와도 함께 사용할 수 있도록 수정하였다.
class Variable:
....
def __len__(self):
return len(self.data)
이제 Variable
인스턴스에 대해서도 len
함수를 사용할 수 있게 되었다.
x = Variable(np.array([[1,2,3], [4,5,6]]))
print(len(x))
실행 결과
2
마지막으로 Variable
인스턴스를 print
함수에 건네면 안에 담긴 ndarray
인스턴스의 내용을 출력하는 기능을 추가하였다.
class Variable:
....
def __repr__(self):
if self.data is None:
return 'variable(None)'
p = str(self.data).replace('\n', '\n' + ' ' * 9)
return 'variable(' + p + ')'
x = Variable(np.array([[1,2,3], [4,5,6]]))
print(repr(x))
실행 결과
variable([[1 2 3]
[4 5 6]])
출처:- 사이토 고키, 『밑바닥부터 시작하는 딥러닝3』, 개앞맵시, 한빛미디어(2020)