본문 바로가기
AI/딥러닝 프레임워크 개발

19단계) 변수 사용성 개선

by 채채씨 2021. 6. 19.
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
반응형

댓글