機械学習について最近勉強し始めたのですが、クロスバリデーションについて質問です。
トレーニングデータ60,000を48,000の訓練データ12,000のバリデーションデータに分けました。以下のコードで学習を進めてみたのですが、バリデーションのlossが変化しません。結果的にはトレーニングのlossを引き継いでいるようなlossが出ています。どのように変えればクロスバリデーションの学習が進むでしょうか?
pytorch
1def train(net, trainloader, NUM_EPOCHS): 2 train_loss = [] 3 for epoch in range(NUM_EPOCHS): 4 running_loss = 0.0 5 for data in trainloader: 6 img, _ = data # we do not need the image labels 7 # add noise to the image data 8 img_noisy = img + NOISE_FACTOR * torch.randn(img.shape) 9 # clip to make the values fall between 0 and 1 10 img_noisy = np.clip(img_noisy, 0., 1.) 11 img_noisy = img_noisy.to(device) 12 optimizer.zero_grad() 13 outputs = net(img_noisy) 14 loss = criterion(outputs, img_noisy) 15 # backpropagation 16 loss.backward() 17 # update the parameters 18 optimizer.step() 19 running_loss += loss.item() 20 21 loss = running_loss / len(trainloader) 22 train_loss.append(loss) 23 print('Epoch {} of {}, Train Loss: {:.3f}'.format( 24 epoch+1, NUM_EPOCHS, loss)) 25 return train_loss 26 27def val(net, valloader, NUM_EPOCHS): 28 val_loss = [] 29 for epoch in range(NUM_EPOCHS): 30 running_loss = 0.0 31 for data in valloader: 32 img, _ = data # we do not need the image labels 33 img_noisy = img + NOISE_FACTOR * torch.randn(img.shape) 34 # clip to make the values fall between 0 and 1 35 img_noisy = np.clip(img_noisy, 0., 1.) 36 img_noisy = img_noisy.to(device) 37 outputs = net(img_noisy) 38 loss = criterion(outputs, img_noisy) 39 # update the parameters 40 running_loss += loss.item() 41 loss = running_loss / len(valloader) 42 print('Epoch {} of {}, Val Loss: {:.3f}'.format( 43 epoch+1, NUM_EPOCHS, loss)) 44 return val_loss
あなたの回答
tips
プレビュー