inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지

4-3 cross validation 강의

305

arokim37

작성한 질문수 8

1

안녕하세요! 늘 친절하게 설명해주셔서 감사드립니다.

4-3 강의 코드에서

validation_loss = []

for fold, (train_idx, val_idx) in enumerate(kfold.split(trainset)):
    
    train_subsampler = torch.utils.data.SubsetRandomSampler(train_idx) # index 생성
    val_subsampler = torch.utils.data.SubsetRandomSampler(val_idx) # index 생성
    
    # sampler를 이용한 DataLoader 정의
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, sampler=train_subsampler) 
    valloader = torch.utils.data.DataLoader(trainset, batch_size=32, sampler=val_subsampler)
    
    # 모델
    model = Regressor()
    optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-7)
    
    for epoch in range(400): # 400번 학습을 진행한다.

        for data in trainloader: # 무작위로 섞인 32개 데이터가 있는 배치가 하나 씩 들어온다.

            inputs, values = data # data에는 X, Y가 들어있다.

            optimizer.zero_grad() # 최적화 초기화

            outputs = model(inputs) # 모델에 입력값 대입 후 예측값 산출
            loss = criterion(outputs, values) # 손실 함수 계산
            loss.backward() # 손실 함수 기준으로 역전파 설정 
            optimizer.step() # 역전파를 진행하고 가중치 업데이트

    train_rmse = evaluation(trainloader) # 학습 데이터의 RMSE
    val_rmse = evaluation(valloader)
    print("k-fold", fold," Train Loss: %.4f, Validation Loss: %.4f" %(train_rmse, val_rmse)) 
    validation_loss.append(val_rmse)

validation_loss = np.array(validation_loss)
mean = np.mean(validation_loss)
std = np.std(validation_loss)
print("Validation Score: %.4f, ± %.4f" %(mean, std))    

 

위 코드에서 이중 for 문이 있는데 제가 생각하기에는

첫번째 for 문

for fold, (train_idx, val_idx) in enumerate(kfold.split(trainset)):

여기서 dataset에 있는 모든 데이터가 DataLoader에 담겨야지

다음 for문인 for epoch in range(400): # 400번 학습을 진행이 되어야하는 거 같은데

 

위 코드 대로라면

첫번째 for문 for fold, (train_idx, val_idx) in enumerate(kfold.split(trainset)) 에서

train_idx, val_idx가 하나씩만 들어오게 되고 다음 for 문인 400번 학습 진행하는 for epoch in range(400): # 400번 학습을 진행한다. 가 오는데 제가 잘못이해한건가 싶어 질문드립니다.

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

답변 1

0

딥러닝호형

안녕하세요.

for fold, (train_idx, val_idx) in enumerate(kfold.split(trainset)): 이 부분에서 모든 데이터가 담겨 있으면 안됩니다.

데이터를 나누어 검증을 하는 것이므로 폴드의 개수만큼 인덱스를 나누어 사용하는 것입니다.

즉, 이 for문에서 폴드 개수 만큼 데이터 셋을 나누고 차례대로 나눠진 데이터를 받아 400번씩 epoch을 돌게 됩니다.

예를 들어 폴드가 3개면 400번씩 3번 돌아서 각각 검증 손실값이 3번 나오게 됩니다 :)

수업자료 제공 부탁드립니다.

0

95

2

코드가 어디에 있는지 모르겠습니다.

0

95

2

논문 구현

0

188

2

overfitting이 나는 이유가 궁금합니다.

1

171

2

분류 성능이 잘 안 나오는 이유

0

218

1

AutoEncoder 차원 질문

1

250

2

사전 학습 모델에서의 layer 변경에 대한 질문

1

221

1

7강 폴더 만들

0

260

1

4-3강 cross-validation에서의 best model 선정 기준

0

450

1

regression 문제에 대한 결과 시각화

0

213

1

Loss function 관련하여 질문드립니다.

0

957

1

early stopping 코드 문의

0

327

1

예측 그래프

0

355

1

데이터 불균형

1

364

1

8강 전이 학습 질문

0

397

2

data의 gpu처리 질문

0

242

1

nn.Linear(1024, 10) 관련 질문드립니다.

0

288

1

학습과 평가시 Loss 함수가 다른 이유

0

249

1

전처리 관련해서 질문 있습니다.

0

225

1

데이터 엔지니어의 역량을 기르려면 어떻게 해야할까요?

0

935

2

역전파 내용 중 미분 관련 질문 드립니다

1

282

1

8강 전이학습에서 kernel size 관련 질문 드립니다.

1

959

1

이미지분류-합성곱신경망(CNN) 피쳐맵 질문입니다.

1

586

1

14강 데이터 불균형 RandomRotation

1

482

1