Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mqtt
- 모델 구조 변경
- 논문리뷰
- 파라미터 수
- 주식
- vsocde 익스텐션
- 주식 용어정리
- 모델 freeze
- Video Understanding
- 가상환경
- Instruction dataset
- layer 추출
- 논문 작성
- def train
- 강화학습
- def validation
- 특정 layer 추출
- 논문 작성 요령
- cnn
- Foundation Transformers
- 파라미터 수 확인
- mPLUG-2
- 특정 layer 동결
- MLLM
- Multimodal Large Language Model
- 가중치 없이 모델 로드
- KOSMOS-2
- DeepNet
- pretrained model layer
- 모델 동결
Archives
- Today
- Total
시작은 미약하였으나 , 그 끝은 창대하리라
[Pytorch, Huggingface] Pretrained Model 의 특정 Layer 만 Freeze 하기 본문
인공지능/딥러닝 및 파이토치 기타 정리
[Pytorch, Huggingface] Pretrained Model 의 특정 Layer 만 Freeze 하기
애플파ol 2024. 4. 28. 16:22► 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
'인공지능 > 딥러닝 및 파이토치 기타 정리' 카테고리의 다른 글
[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 |
[파이썬 디버거] import pdb;pdb.set_trace() (0) | 2023.12.27 |
[형변환] Tensor to Numpy / Numpy to Tensor (0) | 2023.12.23 |
Comments