【发布时间】:2021-04-23 06:27:03
【问题描述】:
我正在尝试使用 LSTM 自动编码器来重新创建其输入。到目前为止,我有:
class getSequence(nn.Module):
def forward(self, x):
out, _ = x
return out
class getLast(nn.Module):
def forward(self, x):
out, states = x
states = states[len(states) - 1]
return states
class AEncoder(nn.Module):
def __init__(self, input_size, first_layer, second_layer, n_layers):
super(AEncoder, self).__init__()
self.n_layers = n_layers
self.encode = nn.Sequential(nn.LSTM(input_size, first_layer, batch_first=True),
getSequence(),
nn.ReLU(True),
nn.LSTM(first_layer, second_layer),
getLast())
self.decode = nn.Sequential(nn.LSTM(second_layer, first_layer),
getSequence(),
nn.ReLU(True),
nn.LSTM(first_layer, input_size),
getSequence())
def forward(self, x):
x = x.float()
x = self.encode(x)
x = x.repeat(32, 1, 1) # repeating last hidden state of self.encode
x = self.decode(x)
return x
在研究过程中,我看到一些人在self.decode 的末尾添加了一个时间分布的密集层。如果最后一层特定于使用自动编码器的其他任务,我会感到困惑,如果是这样,如果我只是尝试重新创建输入,我可以忽略该层吗?
【问题讨论】:
标签: deep-learning pytorch recurrent-neural-network autoencoder