• 1000 и читал разные статьи, но они меня только запутали.
Я знаю, как работает сверточный слой, но не могу asp объяснить, почему мы должны увеличивать количество входов.
Здесь args.local_z_size = 256
Итак, кодировщик для меня выглядит так:
- 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 и скрытый размер ist 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