2017-10-17 7 views
0

내 신경망에서 희소성 조건을 생성하기 위해 정규 규칙으로 L1 표준을 추가해야합니다. 나는 분류에 내 네트워크를 훈련시키고 싶습니다. 희박 조건을 만들기 위해 정규직으로 L1 규범을 추가해야합니다. 나는 분류에 대한 네트워크를 훈련 할 필요가있다. 그리고 나는 파이 토치 (pytorch)로 시작하고 있는데, 나는 이것을 할 수있는 방법이 없다. here처럼 나 자신이 L1 규범을 만들려고했지만 너무 효과가 없었습니다.Pytorch의 정규화 자로서의 L1 norm

나를 도와 줄 사람이 있습니까?

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에서 만든 : 나는 ConvTranspose2d 후이 regularizer를 넣어 필요, 나는 Keras이 같은가 someting을하고 싶습니다 너는 이것을 지나치게 생각하고있다. 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))