inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part3]

실제 캐글(Kaggle) 문제 풀고, 제출해보며, 성능 개선 기법 익히기3

Prepare dataset 부분에서 코드 오류가 납니다 ㅠㅠ

469

minsubrother

작성한 질문수 31

0

첨부해주신 코드를 복사 붙여넣기 했는데, 오류가 나네요.. ㅠㅠ

오류명은 :

---> 21 class CustomDataset(Dataset):

22 def init(self, file_list, transform=None):

23 self.file_list = file_list

TypeError: str() argument 'encoding' must be str, not tuple

dataset_train = CustomDataset(train_list, transform=transforms_for_train)
dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test)
dataset_test = CustomDataset(test_list, transform=transforms_for_val_test)

CustomDataset 클래스를 통해, train, valid, test를 만들어주는 과정에서, str() arguments를 받아야 한다는 것 같은데.. 왜 오류가 나는지 잘 모르겠습니다.

from torchvision import transforms

input_size = 224
transforms_for_train =  transforms.Compose([
    transforms.RandomResizedCrop(input_size, scale=(0.5, 1.0)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.RandomRotation(10),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

transforms_for_val_test = transforms.Compose([
    transforms.Resize(input_size),
    transforms.CenterCrop(input_size),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

#class Dataset
class CustomDataset(Dataset):
    def __init__(self, file_list, transform=None):
        self.file_list = file_list
        self.transform = transform

    def __len__(self):
        return len(self.file_list)

    def __getitem__(self, idx):
        img_path = self.file_list[idx]
        if img_path.split('/')[-1][-3:] == 'jpg':
            img = Image.open(img_path)
            if self.transform is not None:
                img_transform = self.transform(img)
                label = img_path.split('/')[-1].split('.')[0]
                if label == 'dog':
                    label = 1
                elif label == 'cat':
                    label = 0
        return img_transform, label

dataset_train = CustomDataset(train_list, transform=transforms_for_train)
dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test)
dataset_test = CustomDataset(test_list, transform=transforms_for_val_test)

# from torch.utils.data import DataLoader # 데이터 로더 클래스
#
# train_batches = DataLoader(dataset=dataset_train, batch_size=8, shuffle=True)
# val_batches = DataLoader(dataset=dataset_valid, batch_size=8, shuffle=False)
# test_batches = DataLoader(dataset=dataset_test, batch_size=8, shuffle=False)

질문1).png강의 내용과 같이 len(train_list), len(val_list)가 잘 출력이 됨을 볼 수 있고, Reference 항목에서 특정 img의 사이즈를 출력해볼 떄도, (500, 374) 라고 잘 출력됨을 알 수 있었습니다.

train할 데이터와 test 데이터는 강의 중에 배운 os 명령어 및 with zip 명령어를 사용해서

질문3).png

<오류 화면 입니다.>

질문2).png

전체 작성한 코드 첨부드립니다.

import zipfile

Dataset = 'dogs-vs-cats-redux-kernels-edition'

with zipfile.ZipFile('../BecomeProfessional/' + Dataset + ".zip", "r") as z:
    z.extractall(".")
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from PIL import Image
import torch
import torch.nn as nn
from torch.utils.data import DataLoader, Subset
from torchvision import datasets, transforms
from sklearn.model_selection import train_test_split
from copy import deepcopy
import matplotlib.pyplot as plt
import os, shutil
import random
import os

#device 설정
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)

seed = 42 # seed값 설정
random.seed(seed) # 파이썬 난수 생성기
os.environ['PYTHONHASHSEED'] = str(seed) # 해시 시크릿값 고정
np.random.seed(seed) # 넘파이 난수 생성기

torch.manual_seed(seed) # 파이토치 CPU 난수 생성기
torch.backends.cudnn.deterministic = True # 확정적 연산 사용 설정
torch.backends.cudnn.benchmark = False # 벤치마크 기능 사용 해제
torch.backends.cudnn.enabled = False # cudnn 기능 사용 해제

if device == 'cuda':
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
original_data_path = './Dog_Cat/'
os.makedirs('dogsvscats', exist_ok=True)
import zipfile
with zipfile.ZipFile(os.path.join(original_data_path, 'train.zip')) as train_zip:
    train_zip.extractall('./Dog_Cat/dogsvscats')
with zipfile.ZipFile(os.path.join(original_data_path, 'test.zip')) as test_zip:
    test_zip.extractall('./Dog_Cat/dogsvscats')
import glob
print(glob.glob('./Dog_Cat/dogsvscats/train/*'))

출력: ./Dog_Cat/dogsvscats/train\\cat.11346.jpg', './Dog_Cat/dogsvscats/train\\cat.11347.jpg', './Dog_Cat/dogsvscats/train\\cat.11348.jpg', './Dog_Cat/dogsvscats/train\\cat.11349.jpg', ' .... (엄청 많이 출력됩니다)

train_dir = './Dog_Cat/dogsvscats/train'
test_dir = './Dog_Cat/dogsvscats/test'
all_train_files = glob.glob(os.path.join(train_dir, '*.jpg'))
test_list = glob.glob(os.path.join(test_dir, '*.jpg'))
train_labels = [path.split('/')[-1].split('.')[0] for path in all_train_files]
train_list, val_list = train_test_split(all_train_files, test_size=0.1, stratify=train_labels, random_state=seed)
print(len(train_list), len(val_list))

출력: 22500 2500

train_list[0]

출력: './Dog_Cat/dogsvscats/train\\cat.4814.jpg'

img = Image.open('./Dog_Cat/dogsvscats/train/cat.4814.jpg')
img.size

출력: (500, 374)

import IPython
image1 = IPython.display.Image(filename='./Dog_Cat/dogsvscats/train/cat.4814.jpg')
display(image1)


from torchvision import transforms

input_size = 224
transforms_for_train =  transforms.Compose([
    transforms.RandomResizedCrop(input_size, scale=(0.5, 1.0)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.RandomRotation(10),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

transforms_for_val_test = transforms.Compose([
    transforms.Resize(input_size),
    transforms.CenterCrop(input_size),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

#class Dataset
class CustomDataset(Dataset):
    def __init__(self, file_list, transform=None):
        self.file_list = file_list
        self.transform = transform

    def __len__(self):
        return len(self.file_list)

    def __getitem__(self, idx):
        img_path = self.file_list[idx]
        if img_path.split('/')[-1][-3:] == 'jpg':
            img = Image.open(img_path)
            if self.transform is not None:
                img_transform = self.transform(img)
                label = img_path.split('/')[-1].split('.')[0]
                if label == 'dog':
                    label = 1
                elif label == 'cat':
                    label = 0
        return img_transform, label

dataset_train = CustomDataset(train_list, transform=transforms_for_train)
dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test)
dataset_test = CustomDataset(test_list, transform=transforms_for_val_test)

오류 발생

질문2).png

머신러닝 인공신경망 딥러닝 머신러닝 배워볼래요? 인공신경망 딥러닝 pytorch vision-transformer

답변 1

0

잔재미코딩 DaveLee

안녕하세요. 답변 도우미입니다.

사실 너무 코드가 길고, 에러만 봐서는 어디가 문제인지 바로 이해를 하기가 어려운데요. 또 해당 코드는 이미지 파일들과도 면밀히 연결되어 있어서, 바로 무엇이 잘못되었는지 알기가 어려운 것 같아요. 우선 어떤 파일인지도 파악이 쉽지 않은데요. 다음과 같은 저희가 드린 주피터 노트북 파일명등이실까요?

101_DOGS_VS_CATS_REDUX_KERNEL_ADVANCE_20220919_05439

해당 파일들은 모두 고성능을 요구해서, google colab 에 그대로 파일채로 업로드를 하신 후, 구글 colab 상에서 실행을 해보셔야 하는데요. 보여주신 코드화면을 보니, 구글 코랩이 아니고, 일반 에디터인 것 같아요.

제안드리는 방안은, 복사/붙여넣기도 많은 코드상 실수의 가능성이 있어서, 구글 코랩에 파일채로 업로드를 해서, 영상과 함께 개인별 설정이 필요한 부분을 재설정하셔서 해보시면 좋을 것 같습니다. 혹시 그래도 안되신다면, dream@fun-coding.org 로 메일로 설명해주시면, 다시 확인해보겠습니다.

감사합니다.

import torch가 안되는 경우는 어떻게 하나요?

0

17

1

강의 필기는 어떻게 하나요?

0

85

1

섹션 5퀴즈 4번 문제 보기 오류로 보임

0

63

1

섹션17 81번이랑 82번 강의가 중복되는 것 같아서 질문드립니다.

0

88

2

강의교안이 안 옵니다

0

80

1

17-2강 Transfer learning 실습 관련 질문

0

134

2

13섹션 강의자료가 없네요^^

0

92

1

강의자료가 없네요.

0

107

2

LSTM 모델 학습 관련한 질문입니다.

0

127

1

MSE LOSS 관련

0

132

1

test시 minibatch 사용?

0

133

1

Average Test loss 계산식 문의

0

101

1

파이토치 설치

0

247

1

[Pytorch 기울기의 누적 곱? 누적 합?]

0

135

1

3d 텐서에서의 축 구분 질문

0

119

1

항상 tensor([0., 0., 0.]) 형식으로만 나오는 이유

0

111

1

강의자료 PDF 다운로드에 관하여

0

132

1

[실무에서 판다스 copy()메서드의 깊은복사 얕은복사 조정 소요가 생길까?]

0

116

1

섹션 다양한 Optimizer 정리하기 중 딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 강의에서 오류가 발생합니다.

0

149

1

마지막에 confusion matrix 작성할때

0

157

1

아나콘다를 사용하지 않고 파이토치 사용하는 방법

0

853

1

test data 의 loss 계산식 문의

0

288

1

차원 출력 관련 문의

0

245

1

섹션 7-4 당뇨병

0

388

3