Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新使用分类CNN模型进行自动编码-pytorch_Python_Pytorch_Conv Neural Network_Autoencoder - Fatal编程技术网

Python 重新使用分类CNN模型进行自动编码-pytorch

Python 重新使用分类CNN模型进行自动编码-pytorch,python,pytorch,conv-neural-network,autoencoder,Python,Pytorch,Conv Neural Network,Autoencoder,我是pytorch的新手,所以我需要一点手感。我试图重新使用一个旧的CNN分类模型——在自动编码器中将已经训练好的卷积层重新用作编码器,然后训练解码器层。下面的代码是我所拥有的 class Autoencoder(nn.Module): def __init__(self, model, specs): super(Autoencoder, self).__init__() self.encoder = nn.Sequential( *list(model

我是pytorch的新手,所以我需要一点手感。我试图重新使用一个旧的CNN分类模型——在自动编码器中将已经训练好的卷积层重新用作编码器,然后训练解码器层。下面的代码是我所拥有的

class Autoencoder(nn.Module):
  def __init__(self, model, specs):

    super(Autoencoder, self).__init__()

    self.encoder = nn.Sequential(
        *list(model.conv_layer.children())
        )

    self.decoder = nn.Sequential(
        nn.ConvTranspose2d(in_channels=C7, out_channels=C6, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),
        nn.ConvTranspose2d(in_channels=C6, out_channels=C5, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),
        nn.ConvTranspose2d(in_channels=C5, out_channels=C4, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),
        nn.ConvTranspose2d(in_channels=C4, out_channels=C3, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),
        nn.ConvTranspose2d(in_channels=C3, out_channels=C2, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),
        nn.ConvTranspose2d(in_channels=C2, out_channels=C1, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True), 
        nn.ConvTranspose2d(in_channels=C1, out_channels=C0, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True), 
        nn.ConvTranspose2d(in_channels=C0, out_channels=3, kernel_size=pooling, padding=0),
        nn.ReLU(inplace=True),       
        )
    for param in self.encoder.parameters():
      param.requires_grad = False

    for p in self.decoder.parameters():
      if p.dim() > 1:
        nn.init.kaiming_normal_(p)
        pass

    def forward(self, x):
      x = self.encoder(x)
      x = self.decoder(x)
      return x


然而,我得到了一个“NotImplementedError”。我做错了什么?当我启动该类的实例时,我将传递预训练的CNN分类模型,self.encoder应负责从模型中获取我感兴趣的层(conv_层中的层)。当我:

model = pretrainedCNNmodel
autoencoder = Autoencoder(model, specs)
print(autoencoder)
这张照片看起来不错,它有所有的层次和我所希望的一切,但是当我尝试在上面训练时,我得到了“NotImplementedError:”

编辑 以下是整个错误:


---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-20-9adc467b2472> in <module>()
      2 optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=L2_lambda)
      3 
----> 4 train(x, train_loader, test_loader, optimizer, criterion)

2 frames
<ipython-input-5-b25edb14cf5f> in train(model, train_loader, test_loader, optimizer, criterion)
     15       data, target = data.cuda(), target.cuda()
     16       optimizer.zero_grad()
---> 17       output = model(data)
     18       loss = criterion(output, target)
     19       loss.backward()

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    530             result = self._slow_forward(*input, **kwargs)
    531         else:
--> 532             result = self.forward(*input, **kwargs)
    533         for hook in self._forward_hooks.values():
    534             hook_result = hook(self, input, result)

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in forward(self, *input)
     94             registered hooks while the latter silently ignores them.
     95         """
---> 96         raise NotImplementedError
     97 
     98     def register_buffer(self, name, tensor):

NotImplementedError: 

---------------------------------------------------------------------------
NotImplementedError回溯(最后一次调用)
在()
2 optimizer=torch.optim.Adam(model.parameters(),lr=learning\u rate,weight\u decay=L2\u lambda)
3.
---->4列(x、列装载机、测试装载机、优化器、标准)
2帧
列车内(模型、列车装载机、测试装载机、优化器、标准)
15数据,target=data.cuda(),target.cuda()
16优化器0_grad()
--->17输出=模型(数据)
18损失=标准(输出、目标)
19.损失向后()
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in_u_________(self,*input,**kwargs)
530结果=self.\u slow\u forward(*输入,**kwargs)
531其他:
-->532结果=自我转发(*输入,**kwargs)
533用于钩住自身。\u向前\u钩住.values():
534钩子结果=钩子(自身、输入、结果)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py前进(self,*输入)
94个已注册的钩子,而后者会默默地忽略它们。
95         """
--->96升起未执行错误
97
98 def寄存器缓冲区(自身、名称、张量):
未实现错误:

由于您在这个问题上有悬赏,所以无法关闭。但是,在中已经提出并回答了完全相同的问题

基本上,代码中存在缩进问题:
forward
方法缩进,使其位于
\uuuu init\uuuu
方法中,而不是
自动编码器
类的一部分


请查看以了解更多详细信息。

请显示导致错误的代码。传递给train函数的确切内容是什么?检查
x
是否实际是一个模型实例。这是否回答了您的问题?谢谢,成功了。我不敢相信是这样的。我到处寻找,错误就在我面前。一旦我被允许如果我们愿意分配赏金,我会给你的