因此,我从Github repo那里获得了自动编码器设置
编码器和解码器如下所示:
我试图找到如何计算尺寸缩减并阅读不同类型的论文,但它们只会使我感到困惑。
我知道卷积层是如何工作的-但无法理解为什么我们必须增加输入数量。
这里args.local_z_size = 256
所以Encoder在我看来是这样的:
L4之后,他们使用重新参数化技巧,仅将均值用作解码器的输入。
解码器:
那么如果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