728x90
반응형
이번 단계에서는 Variable 클래스를 더 쉽게 사용할 수 있도록 개선할 것이다.
1. 변수 이름 지정
앞으로 수많은 변수를 처리해야 하므로, 변수에 '이름'을 붙여줄 것이다.
class Variable:
def __init__(self, data, name=None):
if data is not None:
if not isinstance(data, np.ndarray):
raise TypeError('{} is not supported'.format(type(data)))
self.data = data
self.name = name
self.grad = None
self.creator = None
self.generation = 0
#생략
Variable클래스에 name 인스턴스 변수를 추가하였다. 초기화 인수 name = None을 추가하고 인스턴스 변수 name에 설정하여, 이름이 주어지지 않으면 None값이 할당된다. 예를 들어, x = Variable(np.array(1.0), 'input_x')라고 작성하면 x의 name은 input_x가 된다.
2. ndarray 인스턴스 변수
Variable은 데이터를 담는 '상자' 역할을 하지만, 사용자 입장에서는 상자가 아닌 그 안의 '데이터'가 중요하다. 따라서 Variable 상자를 투명하게 하는 장치를 만들 것이다.
class Variable:
#생략
@property
def ndim(self): #차원 수
return self.data.ndim
@property
def size(self): #원소 수
return self.data.size
@property
def dtype(self): #데이터 타입
return self.data.type
x.Variable(np.array([[1, 2, 3], [4, 5, 6]])
print(x.shape) #(2, 3)
#메서드를 호출하는 x.shape()대신 인스턴스 변수처럼 x.shape로 호출 가능
@property를 추가함으로써 shape, size, dtype메서드를 인스턴스 변수처럼 사용할 수 있다.
3. len 함수와 print 함수
1) len함수
class Variable:
#생략
def __len__(self):
return len(self.data)
__len__과 같은 특수 메서드를 구현하면 Variable 인스턴스에 대해서도 len함수를 사용할 수 있다.
2) print함수
class Variable:
#생략
def __repr__(self):
if self.data is None:
return 'variable(None)'
p = str(self.data).replace('\n', '\n' + ' ' * 9)
return 'variable(' + p + ')'
str(self.dat)로 ndarray인스턴스를 문자열로 변환한 후, 줄바꿈이 있으면 줄을 바꾼 후 variable( 에 맞게 공백 9개를 추가하여 여러줄에 걸친 출력도 위치가 가지런하게 만들었다.
728x90
반응형
'AI > 딥러닝 프레임워크 개발' 카테고리의 다른 글
23~24단계) 패키지로 정리 , 복잡한 함수의 미분 (0) | 2021.06.29 |
---|---|
20~22단계) 연산자 오버로드 (0) | 2021.06.19 |
17~18단계) 메모리 관리 방식 , 순환 참조 , 메모리 절약 모드 (0) | 2021.06.19 |
15~16단계) 복잡한 계산 그래프의 이론 및 구현 (0) | 2021.06.15 |
11~14단계) 가변 길이 인수 대응 ( 순전파 , 역전파 ) (0) | 2021.06.15 |
댓글