-
Pytorch 함수2CS 공부/AI 2023. 3. 15. 18:03
hook
패키지화된 코드에서 다른 프로그래머가 custom 코드를 중간에 실행시킬 수 있도록 만들어놓은 인터페이스
-프로그램의 실행 로직을 분석하거나
- 프로그램에 추가적인 기능을 제공하고 싶을 때
module에 적용하는 hook
- forward hook, backward hook
- register_forward_pre_hook, register_forward_hook, register_backward_hook, register_full_backward_hook
tensor에 적용하는 hook
- backward hook만 있음
- register_hookTORCH.TENSOR.REGISTER_HOOK
backward hook 을 등록
hook는 Tensor에 대한 기울기가 계산될 때마다 호출됨register_forward_pre_ hook
모듈에 정방향 사전 후크를 등록
forward()가 호출되기 전에 후크가 매번 호출됨register_hook (tensor에서만 가능)
Tensor의 경우에는 backward hooka만 가능
(Tensor의 gradient가 계산될 때마다 hook 호출됨. hook은 gradient를 바꿀 수는 없지만 새로운 gradient를 생성 가능하며, 기존 grad 대신 사용 가능함.)
그냥 model 함수 자체에서는 불가능
model.(변수명).register_hook(hook) 해야함register_parameter
모듈에 매개변수를 추가합니다.
register_parameter(이름,매개변수)apply
custom 함수를 모델에 적용하고 싶을 때 모델에 속하는 모든 module에 일일이 함수를 적용해야할까? NOPE!
- 모델의 모든 module들을 순차적으로 입력받아서 처리
- 일반적으로 가중치 초기화(Weight Initialization)에 많이 사용됨
- Postorder Traversal 방식으로 module들에 함수를 적용
- 입력: 모듈 단위ex1)
model = Model() #apply를 이용해 모든 Parameter 값을 1로 만들기 def weight_initialization(module): module_name = module.__class__.__name__ if module_name.split('_')[0]=='Function': module.W=torch.nn.Parameter(torch.tensor([1.]),requires_grad=True) # apply는 apply가 적용된 module을 return returned_module = model.apply(weight_initialization)
setattr()
setattr(object, name, value)
object에 존재하는 속성의 값을 바꾸거나, 새로운 속성을 생성하여 값을 부여partial
031 기존 함수로 새로운 함수를 만들려면? ― functools.partial
functools.partial()은 하나 이상의 인수가 이미 채워진 새 버전의 함수를 만들 때 사용하는 함수이다. ## 문제 다음은 입력한 인수의 합과 곱을 choice값에…
wikidocs.net
'CS 공부 > AI' 카테고리의 다른 글
DataLoader (0) 2023.03.16 Dataset (0) 2023.03.15 torch 함수 (1) 2023.03.14 파이썬 AI 개발 환경 준비 (0) 2023.03.02 AI 프로그래밍 (0) 2023.01.12