Deep learning/모델 구현
28. 변수 사용성 개선
jwjwvison
2021. 10. 10. 20:10
- 변수 이름 지정
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 # 세대 수를 기록하는 변수
- ndarray 인스턴스 변수
variable은 데이터를 담는 상자 역할을 한다. 그러나 사용하는 사람 입장에서 중요한 것은 상자가 아니라 그 안의 데이터 이다. 그래서 Variable이 데이터인 것처럼 보이게 하는 장치, 즉 상자를 투명하게 해주는 장치를 만들겠다.
여기서는 Variable 인스턴스에 넘파이의 ndarray 인스턴스에 있는 shape 인스턴스 변수를 사용할 수 있게 하겠다.
@property
def shape(self):
return self.data.shape
이와 같이 메서드 호출이 아닌 인스턴스 변수로 데이터의 형상을 얻을 수 있다. 같은 방법으로 ndarray의 다른 인스턴스 변수들을 Variable에 추가할 수 있다. 여기에서는 다음 세 인스턴스 변수를 더 추가하겠다.
@property
def ndim(self): #차원수
return self.data.ndim
@property
def size(self): #원소수
return self.data.size
@property
def dtype(self): #데이터 타입
return self.data.dtype
- len 과 print 함수
def __len__(self): return len(self.data) 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],[7,8,10]]))
print(x.shape)
print(len(x))
print(x)