► Pretrained되어 있는 모델을 load를 하면 Freeze(bias=False)되어 있는 것도 있고 Trainable한 파라미터(bias=True) 인 것도 있다.
어떤 문제를 해결할 것이냐에 따라 Freeze가 유용할수도 있고 아닐 수도 있다. 이번 글에서는 Freeze를 하는 방법에 대해 소개와 동시에 필요한 layer만 Trainable하게 설정하는 방법을 알아보겠다.
→ 특정 layer만을 Trainable 하게하는 방법은 다음과 같다.
1. 모든 layer에 대해 False로 설정 (=Freeze).
2. 그 후 원하는 layer들에 대해서만 True로 설정.
1. 모델로드
→ DETR모델 활용중
from transformers import DetrForObjectDetection
model_DETR= DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
2. 모델 파라미터 수 확인
total_params = sum(p.numel() for p in model_DETR.parameters())
print("Total Parameters:", total_params)
total_trainable_params = sum(p.numel() for p in model_DETR.parameters() if p.requires_grad)
print("Total Trainable Parameters:", total_trainable_params)
total_fixed_params = sum(p.numel() for p in model_DETR.parameters() if not p.requires_grad)
print("Total Fixed Parameters:", total_fixed_params)
3. 모든 layer에 대해 Freeze 수행.
► 모든 파라미터를 학습가능하지 않은, 고정된 파라미터로 설정.
for params in model_DETR.parameters():
params.requires_grad = False
4. 특정 layer에 대해 True 수행.
► 학습 가능한 파라미터로 변경.
→ 코드를 해석하자면 다음과 같다. DETR의 모든 파라미터를 for문을 통해 출력하는데 그중에서 'class_labels_classifier' 라는 모든 포함된 모든 파라미터들의 이름에 대해 True로 하겠다는 것이다.
for name, params in model_DETR.named_parameters():
# class_labels_classifier 이 포함되어 있는것들만 True로 변경.
if 'class_labels_classifier' in name:
print(name)
params.requires_grad = True
5. 알맞게 Trainable한 파라미터로 변경 되었는지 확인 사살.
► 이미 4번 과정에서 변한것을 확인하였지만 필자는. 모델의 학습이 딱 돌아가는 코드 전에 한번도 확인을 위해 넣어둔다.
→ 학습가능한 파라미터는 Ture임으로 출력이 된다.
for name, params in model_DETR.named_parameters():
if params.requires_grad: # 학습가능한 파라미터는 TRUE임.
#print('name of layer: ',name)
#print('parmas size :',params.size())
#print(parmas) # 이부분을 출력하면 weight, bias가 출력됨.
print(name)
참고 하면 좋은 글 : Pretrained model을 가져오는데 Weight, bias 를 초기 값으로 설정해서 불러오고 싶을 때.
https://put-idea.tistory.com/117
[Huggingface] 가중치 없이 모델 로드 및 모델 구조 변경
1. 가중치 없이 모델 로드 ► 우리는 허깅페이스에서 weight, bias가 최적화 되어있는 pretrained된 모델을 사용한다. 하지만 모델의 weight, bias를 제외하고 아키텍쳐만 필요할 때가 있다. Hugging Face에서
put-idea.tistory.com
'인공지능 (기본 딥러닝) > 딥러닝 및 파이토치 기타 정리' 카테고리의 다른 글
[LoRA] Low-Rank Adaptation of Large Language models (0) | 2024.08.22 |
---|---|
[import os] 파일 호출, 삭제, 생성 명령어. (0) | 2024.05.26 |
[Pytorch, Huggingface] Pretrained Model 의 특정 Layer 만 추출 (1) | 2024.04.26 |
[Huggingface] 가중치 없이 모델 로드 및 모델 구조 변경 (0) | 2024.04.23 |
[Convolution 의 Group 파라미터] torch.nn.Conv3d(group=1) (0) | 2024.02.03 |