이상으로 역전파 활성/비활성을 구분 짓는 구조가 만들어졌습니다. 이 구조를 활용하면 다음과 같이 모드를 전환할 수 있습니다.
Config.enable_backprop = True
x = Variable(np.ones((100, 100, 100)))
y = square(square(square(x)))
y.backward()
Config.enable_backprop = False
x = Variable(np.ones((100, 100, 100)))
y = square(square(square(x)))
일부러 큰 다차원 배열을 준비해보았습니다. 형상이 (100, 100, 100)인 턴서입니다. 이 텐서에 square함수를 세번 적용합니다(그러면 원소별 제곱이 이루어집니다). 이때 Config. enable_backprop이 True면 중간 계산 결과가 (적어도 역전파가 완료되기 전까지는) 계속 유지되어 그만큼 메모리를 차지합니다. 한편 Config.enable_backprop이 False면 중간 계산 결과는 사용 후 곧바로 삭제됩니다(정확하게는 다른 객체에서의 참조가 없어지는 시점에 메모리에서 삭제됩니다).
이상으로 역전파 모드를 전환하는 구조가 완성되었습니다. 이어서 모드 전환을 더 쉽게 해주는 구조를 만들어볼까 합니다.
댓글 없음:
댓글 쓰기