2017-09-24 43 views
0

我想提取VGG16模型中最後一層的激活。爲此,我在模型上使用了一個裝飾器,如下所示。使用pregrained vgg16模型的CUDNN錯誤

當我將一個cuda張量傳遞給模型時,我得到一個CUDNN_STATUS_INTERNAL_ERROR和下面的回溯。

任何人都知道我錯了哪裏?

回溯

File "/media/data1/iftachg/frame_glimpses/parse_files_to_vgg.py", line 80, in get_activation 
    return model(image) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/modules/module.py", line 206, in __call__ 
    result = self.forward(*input, **kwargs) 
    File "/media/data1/iftachg/frame_glimpses/partial_vgg.py", line 24, in forward 
    x = self.vgg16.features(x) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/modules/module.py", line 206, in __call__ 
    result = self.forward(*input, **kwargs) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/modules/container.py", line 64, in forward 
    input = module(input) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/modules/module.py", line 206, in __call__ 
    result = self.forward(*input, **kwargs) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/modules/conv.py", line 237, in forward 
    self.padding, self.dilation, self.groups) 
    File "/media/data1/iftachg/miniconda2/lib/python2.7/site-packages/torch/nn/functional.py", line 39, in conv2d 
    return f(input, weight, bias) 
RuntimeError: CUDNN_STATUS_INTERNAL_ERROR 

class partial_vgg(nn.Module): 

    def __init__(self): 
     super(partial_vgg, self).__init__() 
     self.vgg16 = models.vgg16(pretrained=True).cuda() 
     for param in self.vgg16.parameters(): 
      param.requires_grad = False 

    def forward(self, x): 

     x = self.vgg16.features(x) 
     x = x.view(x.size(0), -1) 
     for l in list(self.vgg16.classifier.children())[:-3]: 
      x = l(x) 
     return x 
+2

不知道你的錯誤,但我認爲可能有一個更簡單的方法來做你想做的事情。看看我的答案,它解釋瞭如何使用預訓練模型並從中創建新模型/僅提取它的一部分以構建新模型:https://stackoverflow.com/questions/44146655/how-to-convert -pretrained-FC-層到CONV層合pytorch/44410334#44410334 – mexmex

回答

1

顯然cudnn錯誤是非常無益的,有一個與代碼本身沒有問題 - 這就是我試圖在圖形處理器訪問已被使用。

1

這看起來像一個張力塑形錯誤。如上所述,CUDNN錯誤消息幾乎是無用的。要獲得更直觀的錯誤消息,請在CPU上運行您的代碼。

net.cpu()