
671
19
밑바닥부터 만드는 Learner 클래스
Normalize
클래스는 단순히 통계적 정보를 저장하고 적용하는 방법만 구현합니다 (
to
_
device
가 왜 필요한지를 알고 싶다면, 해당 라인을 주석 처리할 때 무슨 일이 일어나는지 직접
실험해보세요 ).
class Normalize:
def __init__(self, stats): self.stats=stats
def __call__(self, x):
if x.device != self.stats[0].device:
self.stats = to_device(self.stats, x.device)
return (x-self.stats[0])/self.stats[1]
노트북에서는 만든 즉시 검증하기가 쉽습니다.
>>> norm = Normalize(stats)
>>> def tfm_x(x): return norm(x).permute((0,3,1,2))
>>> t = tfm_x(x
)
>>> t.mean((0,2,3)),t.std((0,2,3))
(tensor([0.3732, 0.4907, 0.5633]), tensor([1.0212, 1.0311, 1.0131]))
tfm
_
x
는
Normalize
를 적용하며
permute
메서드로 축의 순서를
NHWC
에서
NCHW
로 바꾸는 작
업도 하죠 (
13
장 참조 ).
PIL ...