pytorchを - autoencodingため再使用して分類CNNモデル

funmath :

私は手持ちのビットを必要とするので、私は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:」を取得しています。缶誰かの助け私を?何が私が間違っているのでしょうか?私はそのクラスのインスタンスを開始すると、私はpretrained CNNの分類モデルを渡すことになるとself.encoderは私がモデルから興味を持って層を取るの世話をする必要があります(conv_layerのもの)。ときに私は:

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: 
シャイ:

あなたはこの質問に報奨金を持っているので、それを閉じることはできません。しかし、正確に同じ質問が既に尋ねに答えたこのスレッド

基本的に、あなたのコード内のインデントの問題を抱えている:あなたのforward方法は、それがあるようにインデントされた内部のあなたの__init__方法、代わりの一部であることのAutoencoderクラス。

見てください、私の他の答えを詳細については。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8258&siteId=1