HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
장지원 페이지/
📕
2024 UGRP
/
Member Page
Member Page
/
장지원
장지원
/
#30. ToDo

#30. ToDo

태그
연구
날짜
Nov 5, 2024
상태
완료
설문 조사 연구자님들께 보내보기
⇒ 예술 치료사 분들의 한 게 더 신뢰성 있을 듯
  1. test set 만들기 ⇒ 사람이 test할 거, gpt가 test할 거, 우리가 test할 거 모두 동일해야 할 듯
    1. 꼼수: test set을 우리가 test하는 것에만 쉽게 ㅋㅋ
  1. 11.12까지는 적어도 하나씩은 테스트 완료하기
  1. 11.12까지 연구 동기 까지 작성하기
    1. 12월 까지는 마무리 하고 첨삭받기
     
    연구의 attribute
    • 데이터 셋을 점진적으로 바꿔서 학습 시켜 보는 것
    • double LoRA(?)
    • 감정 데이터 셋 제공
     
    ⇒ 내일 UGRP 가기 전에 double LoRA(?) 테스트 해보기
     
    담주까지 ToDo
    • 파인튜닝 메소드, 파라미터 fix 시키고 데이터 셋 test
      • emoset → form
      • emoset+form → form
      • emoset(GAN) → form
      • emoset(GAN)+form → form
      • emoset(GAN)+crawling → form
      • emoset(GAN)+crawling+form → form
    • 데이터 셋, 파라미터 fix 시키고, 파인튜닝 메소드 test
      • original fine tuning
      • adpter
      • LoRA
    • 파인튜닝 메소드, 데이터 셋 fix 시키고, 파라미터 test
      • LoRA’s param tuning
     

    감정 그림 그리기 설문조사(UGRP)(응답).xlsx
    23.1KB
     
    폴더: (id는 이름 대신 숫자로 매핑 해둠)
    데이터 48개
    happiness: 29
    surprise: 2
    sadness: 6
    disgust: 4
    fear: 4
    anger: 3
     
    huggingfacehuggingfaceJANGJIWON/UGRP_sketchset · Datasets at Hugging Face
    JANGJIWON/UGRP_sketchset · Datasets at Hugging Face

    JANGJIWON/UGRP_sketchset · Datasets at Hugging Face

    We’re on a journey to advance and democratize artificial intelligence through open source and open science.

    huggingfacehuggingface
     
    double LoRA..
    코드
    import torch import os from transformers import AutoModelForImageClassification, AutoImageProcessor from datasets import load_dataset from torch.utils.data import DataLoader, Dataset from torch.optim import Adam import torch.nn as nn from sklearn.preprocessing import LabelEncoder from peft import get_peft_model, LoraConfig import requests import io from torchvision import transforms from tqdm import tqdm from sklearn.model_selection import train_test_split # ViT 모델 로드 및 전처리 함수 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224", use_fast=True) model = AutoModelForImageClassification.from_pretrained( "google/vit-base-patch16-224", num_labels=8, ignore_mismatched_sizes=True ).to(device) # 전처리 함수 def preprocess_image(image): transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), ]) return transform(image) class CustomDataset(Dataset): def __init__(self, dataset, transform=None): self.dataset = dataset self.transform = transform self.label_encoder = LabelEncoder() labels = [item['label'] for item in dataset] self.label_encoder.fit(labels) def __len__(self): return len(self.dataset) def __getitem__(self, idx): item = self.dataset[idx] img = item['image'] label = item['label'] if self.transform: img = self.transform(img) label = self.label_encoder.transform([label])[0] return img, torch.tensor(label, dtype=torch.long) # 모델 가중치 로드 및 데이터셋 확인 model_url = "https://huggingface.co/JANGJIWON/UGRP1.0/resolve/main/model_epoch_3_accuracy_23.17.pth" response = requests.get(model_url) model_weights = io.BytesIO(response.content) # 첫 번째 LoRA 구성 및 적용 config1 = LoraConfig( r=8, lora_alpha=32, lora_dropout=0.1, target_modules=["query", "key", "value"] ) model = get_peft_model(model, config1) try: model.load_state_dict(torch.load(model_weights, map_location='cpu', weights_only=True), strict=False) except RuntimeError as e: print(f"Error loading state_dict: {e}") # 두 번째 LoRA 구성 및 적용 config2 = LoraConfig( r=4, lora_alpha=16, lora_dropout=0.05, target_modules=["query", "key", "value"] ) model = get_peft_model(model, config2) # 데이터셋 준비 dataset = load_dataset("JANGJIWON/test", split="train") # Convert the dataset to a list of dictionaries for splitting dataset_list = [dict(item) for item in dataset] # Split the dataset into train and test sets (80% train, 20% test) train_data, test_data = train_test_split(dataset_list, test_size=0.2, random_state=42) # Create datasets and dataloaders train_dataset = CustomDataset(train_data, transform=preprocess_image) test_dataset = CustomDataset(test_data, transform=preprocess_image) train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True, num_workers=2) test_loader = DataLoader(test_dataset, batch_size=16, shuffle=False, num_workers=2) # 옵티마이저 및 손실 함수 설정 learning_rate = 1 # 조금 더 높은 학습률로 설정 optimizer = Adam(model.parameters(), lr=learning_rate) criterion = nn.CrossEntropyLoss() # 모델 훈련 num_epochs = 3 model.train() for epoch in range(num_epochs): running_loss = 0.0 correct = 0 total = 0 for images, labels in tqdm(train_loader): images, labels = images.to(device), labels.to(device) optimizer.zero_grad() outputs = model(images) loss = criterion(outputs.logits, labels) loss.backward() optimizer.step() running_loss += loss.item() _, predicted = torch.max(outputs.logits, 1) total += labels.size(0) correct += (predicted == labels).sum().item() epoch_accuracy = 100 * correct / total print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {running_loss:.4f}, Accuracy: {epoch_accuracy:.2f}%') # 테스트 수행 및 정확도 계산 model.eval() correct = 0 total = 0 with torch.no_grad(): for images, labels in test_loader: # Use test_loader here images, labels = images.to(device), labels.to(device) outputs = model(images) _, predicted = torch.max(outputs.logits, 1) total += labels.size(0) correct += (predicted == labels).sum().item() accuracy = 100 * correct / total print(f'Final Test Accuracy after second LoRA tuning: {accuracy:.2f}%')
     
    결과: 28.95%
     

    Today: test set 나누기
    amusement에서 다섯 개 happiness에서 다섯 개
     
    1. LoRA paper 찾아오기