2017-10-17 163 views
0

私のニューラルネットワークで希薄状態を作成するためには、正規化としてL1ノルムを追加する必要があります。私は分類にネットワークを訓練したいと思います。私は希薄状態を作成するために正則化者としてL1ノルムを追加する必要があります。私は分類のためにネットワークを訓練する必要があります。そして、私はpytorchから始めています。 hereのように自分でL1ノルムを構築しようとしましたが、うまくいきませんでした。Pytorchの正則化者としてのL1ノルム

誰かが私を助けることができますか?

model.add(Dense(64, input_dim=64, 
      kernel_regularizer=regularizers.l2(0.01), 
      activity_regularizer=regularizers.l1(0.01))) 

しかし、私のネットワークは

upconv = nn.ConvTranspose2d(inner_nc, outer_nc, 
            kernel_size=4, stride=2, 
            padding=1, bias=use_bias) 
     down = [downrelu, downconv] 
     up = [uprelu, upconv, upnorm] 
     model = down + up 

おかげ

答えて

1

以下のコードに応じてPyTorchで作成されました:私は、私はKerasにこのようないろいろ書いをやりたい、ConvTranspose2d後にこの正則を置く必要がありますあなたはこれを考え直している。あなたのKerasコードからわかるように、レイヤのアクティベーションにL1ペナルティを課しています。最も簡単な方法は、単に以下のような何かをすることです:

activations_to_regularise = upconv(input) 
output = remaining_netowrk(activations_to_regularise) 

次にあなたが

を得るように、標的に対する出力を評価し、また客観的にL1損失を組み込むために、あなたの通常の損失関数を持っています
total_loss = criterion(output, target) + 0.01 * activations_to_regularise.abs() 
1

pytorchでは、次の(と仮定すると、あなたのネットワークがnetと呼ばれます)を行うことができます。

def l1_loss(x): 
    return torch.abs(x).sum() 

to_regularise = [] 
for param in net.parameters(): 
    to_regularise.append(param.view(-1)) 
l1 = l1_weight*l1_loss(torch.cat(to_regularise)) 
関連する問題