- 변수 이름 지정
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)
'Deep learning > 모델 구현' 카테고리의 다른 글
30. 테일러 급수 미분 (0) | 2021.10.12 |
---|---|
29. 연산자 오버로드 (0) | 2021.10.10 |
27. 메모리 관리 (0) | 2021.10.04 |
26. 복잡한 계산 그래프 (0) | 2021.10.04 |
25. 가변 길이 인수(역전파) (0) | 2021.10.04 |