메타 러닝의 경우 가지고 있는 Few 한 label data를 Support set과 query set으로 나눠 평가한다.
나눌 때, 랜덤하게 나누게 되는데 나중에 평가할 때(새로운 데이터가 들어 왔을 때)는 어떤 식으로 접근해야하는가?
1. 실전 추론 방식
-. 지금 가지고 있는 라벨 모두를 support로 두고, 새로운 데이터를 query로 예측하여 진행하는 방법 --> 일반적인 방법
-. 학습 당시 성능이 좋았던 support set만 가지고, 새로운 query에 대해 예측하는 평가
: 데이터 셋에 노이즈가 있다면 좋은 방식일 것 같은데, bias 되는 문제에 대해 보수적일 것 같음
-. 여러 support set을 만들고 결과치에 대해 앙상블로 진행하는 방법 ---> 안정적이지만 시간 소요 多
2. GPT 코드(핵심 부분만)
-. Build prototypes 를 가지고, 클래스별 프로토타입 제작
--> 후에 프로토 타입과 새로운 이미지 간 거리값(유클리드, 코사인 등등) 이용하여 분류 진행
# ============================================
# 2) 프로토타입 생성
# ============================================
@torch.no_grad()
def build_prototypes(
emb_support: torch.Tensor,
y_support: torch.Tensor,
class_order: Optional[List[int]] = None,
) -> Tuple[torch.Tensor, List[int]]:
"""
emb_support: [Ns, D] support 임베딩
y_support: [Ns] 라벨(정수 인덱스)
class_order: 클래스 인덱스의 고정 순서(없으면 자동 정렬)
return:
- prototypes: [C, D]
- classes: 실제 클래스 인덱스 리스트 길이 C
"""
device = emb_support.device
classes = sorted(y_support.unique().tolist()) if class_order is None else class_order
# 클래스별 평균(프로토타입)
protos = []
for c in classes:
idx = (y_support == c).nonzero(as_tuple=True)[0]
proto = emb_support.index_select(dim=0, index=idx).mean(dim=0)
protos.append(proto)
prototypes = torch.stack(protos, dim=0).to(device) # [C, D]
return prototypes, classes'파이썬 > 코드 TEST' 카테고리의 다른 글
| (CLIP)(OWL-VIT) CLIP보다 좋은 VLM? (0) | 2025.08.28 |
|---|---|
| (AutoEncoder)(Resnet) Resnet을 이용한 학습 코드 (0) | 2025.08.22 |
| (OPEN AI)(CLIP) CLIP 활용을 위한 성능 TEST (2) | 2025.08.21 |
| (CLIP)WINCLIP - Text 구조(CPE) (0) | 2025.08.20 |
| (CLIP)(VLM) CLIP 실사용 - CLIP 모델 불러오기 (0) | 2025.08.20 |
댓글