오늘은 아침부터 좀 달렸더니 15분 컷했다. 앞으로 조금씩 뛰는 시간을 줄여나갈 생각이다.
그리고 공부했던 것 중 모르는 거를 정리해나갈거다. 넋이 나가거나 인스타할 시간에 숨 좀 크게 쉬고 하루, 이틀치씩 잠깐 잠깐씩 핵심어만 뽑아보고 그걸 상세설명으로 조금씩 이해해 나갈거다.
또 오늘은 토이 프젝에서 맡았던 API KEY 관리를 UI상에서 어떻게 하는 지도 cursor ai로 해결해볼거다.
https://colab.research.google.com/drive/1zjOSxjWQ09sK6FOU-fJ7isryTgaijpg4#scrollTo=DYodSamweDYp
Google Colab Notebook
Run, share, and edit Python notebooks
colab.research.google.com
1. 임포트 및 설정: 이 노트북은 데이터 처리, 시각화, PyTorch를 사용한 딥러닝을 위해 필요한 라이브러리를 임포트합니다. numpy, torch, torchvision, matplotlib 등이 포함됩니다.
2. FashionMNIST 데이터셋 로드: torchvision.datasets.FashionMNIST를 사용하여 FashionMNIST 데이터셋을 로드합니다. 데이터셋은 학습용과 테스트용으로 나뉘며, 이미지를 텐서로 변환하는 변환이 적용됩니다.
3. 데이터 탐색: 데이터셋의 타입, 크기를 확인하고, 랜덤 샘플과 레이블을 시각화하여 탐색합니다.
4. DataLoader 사용: DataLoader를 사용하여 데이터셋을 배치로 나누고, 셔플하며, 반복합니다. 배치의 형태가 올바른지 확인합니다.
5. ImageFolder 데이터셋: Google Drive에 연결하여 피자, 스테이크, 스시 이미지로 구성된 커스텀 데이터셋에 접근하고, torchvision.datasets.ImageFolder를 사용하여 로드합니다. 이 데이터셋도 FashionMNIST와 유사하게 탐색합니다.
7. DataFrame 데이터셋 클래스: Pandas DataFrame을 사용하여 테이블 형식의 데이터를 처리하기 위한 또 다른 커스텀 데이터셋 클래스를 생성합니다. 이는 Seaborn의 Titanic과 Tips 데이터셋을 위해 설계되었습니다.
데이터셋 만들기
#### FashionMNIST 로드
```python
training_data = datasets.FashionMNIST(
root='fashion_data',
train=True,
download=True,
transform=ToTensor()
)
test_data = datasets.FashionMNIST(
root='fashion_data',
train=False,
download=True,
transform=ToTensor()
)
```
### 랜덤 샘플 시각화
figure = plt.figure(figsize=(8,8))
cols, rows = 3, 3
for i in range(1, cols * rows +1):
rand_sample_idx = torch.randint(len(training_data), size=(1,)).item()
img, label = training_data[rand_sample_idx]
figure.add_subplot(rows, cols, i)
plt.imshow(img, cmap="gray")
plt.title(labels_map[label])
plt.axis("off")
plt.show()
### 커스텀 데이터셋 클래스
class CustomDataset(Dataset):
def __init__(self, data_path:str, transform=None):
self.transform = transform
self.lst_path = list(Path(data_path).glob('*/*.jpg'))
self.index_to_class = self.__get_classes(data_path)
self.class_to_index = {class_name: i for i, class_name in enumerate(self.index_to_class)}
def __get_classes(self, data_path):
return sorted(entry.name for entry in os.scandir(data_path) if entry.is_dir())
def __len__(self) -> int:
return len(self.lst_path)
def __getitem__(self, index:int):
feature_path = self.lst_path[index]
img = Image.open(feature_path)
target_name = feature_path.parent.stem
if self.transform:
img = self.transform(img)
return img, self.class_to_index[target_name]
### DataFrame 데이터셋 클래스
class DfDataset(Dataset):
# 데이터 길이
def __init__(self,df,target_name,transform=None):
# 생성 함수의 특징: 딱 한번만 실행!
# self.df = df
# self.target_name= target_name
self.transform = transform
self.features_df = df.drop(target_name,axis=1)
self.target_df = df[target_name]
def __len__(self):
return len(self.df)
# 인덱스 이용, feature, target 추출
def __getitem__(self,idx):
# feature은 survived을 제외한 컬럼
# target은 survived
# features = self.df.iloc[idx].drop(self.target_name)
# target = self.df.iloc[idx][self.target_name]
features = self.features_df.iloc[idx]
target = self.target_df.iloc[idx]
if self.transform is not None:
features = self.transform(features)
return features, target
data = sns.load_dataset("titanic")
df_dataset = DfDataset(data,'survived')
len(df_dataset)
feature,data = df_dataset[0]
feature,data
Remind
- shuffle은 시계열 데이터에선 하면 안됨
- 폴더명이 타겟 이름으로 되어있어야 한다.
- os.walk: 모든 디렉토리 다 돌아다니면서 볼 때
- path_to_target.parent.stem
- 이미지 전처리: transform
- next(iter()) = for문 (for f,t in l = f,t == next(iter(l)) )
- magic method는 별도로 만들어야 한다.
'SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
26일차 [ Multi Classification Model (pytorch)] (0) | 2025.02.20 |
---|---|
25일차 [ 선형회귀모델 ] (0) | 2025.02.19 |
23일차 [ pytorch (중요) ] (0) | 2025.02.17 |
23일차 [ DL 개요 ] (0) | 2025.02.17 |
22일차 [ AutoML / XAI / Pipeline ] (0) | 2025.02.14 |