如何计算卷积自动编码器的降维/瓶颈?

时间:2020-07-13 10:32:25

标签: python parameters conv-neural-network autoencoder dimensionality-reduction

因此,我从Github repo那里获得了自动编码器设置

编码器和解码器如下所示:

我试图找到如何计算尺寸缩减并阅读不同类型的论文,但它们只会使我感到困惑。

我知道卷积层是如何工作的-但无法理解为什么我们必须增加输入数量。

这里args.local_z_size = 256

所以Encoder在我看来是这样的:

  • L1:201-> 256
  • L2:256-> 256
  • L3:256-> 512
  • L4:512-> 512

L4之后,他们使用重新参数化技巧,仅将均值用作解码器的输入。

解码器:

  • L1:256-> 201
  • L2:201-> 201
  • L3:201-> 201
  • L4:201-> 201

那么如果Input = 201且潜在尺寸为256,怎么能减小尺寸? 有人可以通过这个例子向我解释吗?有人可以告诉我如何计算瓶颈吗?

class Encoder(nn.Module):
def __init__(self, args):
    super(Encoder, self).__init__()
    
    self.EncoderOutput = collections.namedtuple("EncoderOutput", ["local_dist", "local_sample"])
    
    self.local_net = nn.Sequential(
        custom_nn.Transpose((1, 2)),
        
        custom_nn.CausalConv1d(201, args.local_z_size, kernel_size = 3, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(args.local_z_size),
        
        custom_nn.CausalConv1d(args.local_z_size, args.local_z_size, kernel_size = 3, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(args.local_z_size),
        
        custom_nn.CausalConv1d(args.local_z_size, 2*args.local_z_size, kernel_size = 3, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(2*args.local_z_size),
        
        nn.Conv1d(2*args.local_z_size, 2*args.local_z_size, kernel_size = 1, stride = 1),
        custom_nn.Transpose((1, 2)),
    )
    self.light_dropout = nn.Dropout(0.3)
    
    self.Sigmoid = nn.Sigmoid()

def forward(self, input):
    # input is a tensor of batch x time x features
    assert len(input.size()) == 3
    
    local_out = self.local_net(input)
    
    local_dist = output_to_dist(local_out)
    # local sample has siye batch x sample size x time
    local_z_sample = local_dist.rsample()
    
    return self.EncoderOutput(local_dist=local_dist, local_sample=local_z_sample)


class Decoder(nn.Module):
def __init__(self, args):
    super(Decoder, self).__init__()
    
    self.fc = nn.Sequential(
        custom_nn.Transpose((1,2)),
        nn.Conv1d(args.local_z_size, 201, kernel_size = 1, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(201),
        
        nn.Conv1d(201, 201, kernel_size = 1, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(201),
        
        nn.Conv1d(201, 201, kernel_size = 1, stride = 1),
        nn.Tanh(),
        nn.BatchNorm1d(201),
        
        nn.Conv1d(201, 201, kernel_size=1, stride=1),
        nn.Sigmoid(),
        custom_nn.Transpose((1,2)),
    )

def forward(self, input):        
    out = self.fc(input)
    
    return out

0 个答案:

没有答案
相关问题