2017-11-02 3 views
1

私はモデルをPytorchでトレーニングしています。 10エポックごとに、私は電車を評価し、列車全体とテストデータセットでエラーをテストしています。何らかの理由で、評価関数が自分のGPUにメモリ不足を引き起こしています。私はトレーニングと評価のために同じバッチサイズを持っているので、これは奇妙です。 net.forward()メソッドが繰り返し呼び出され、すべての隠し値がメモリに格納されているためだと思いますが、これを回避する方法がわかりません。Pytorchで評価中にメモリが不足しています

def evaluate(self, data): 
    correct = 0 
    total = 0 
    loader = self.train_loader if data == "train" else self.test_loader 
    for step, (story, question, answer) in enumerate(loader): 
     story = Variable(story) 
     question = Variable(question) 
     answer = Variable(answer) 
     _, answer = torch.max(answer, 1) 

     if self.config.cuda: 
      story = story.cuda() 
      question = question.cuda() 
      answer = answer.cuda() 

     pred_prob = self.mem_n2n(story, question)[0] 
     _, output_max_index = torch.max(pred_prob, 1) 
     toadd = (answer == output_max_index).float().sum().data[0] 
     correct = correct + toadd 
     total = total + captions.size(0) 

    acc = correct/total 
    return acc 
+0

データ読み込み部分を共有してください。 –

答えて

5
私は評価中にtrueに揮発性のセットを使用することをお勧め

story = Variable(story, volatile=True) 
    question = Variable(question, volatile=True) 
    answer = Variable(answer, volatile=True) 

このようにグラデーションや操作履歴が保存されていない、あなたは多くのメモリを節約します。 また、あなたは削除し、バッチ処理の終了ができます

del story, question, answer, pred_prob 

いけない評価モードにモデルを設定するのを忘れ。たとえば、このように

model.eval() 
関連する問題