안녕하세요. LSTM으로 진행했던 Many-to-One Regression 문제를
Seq2Seq로 진행해보려고 합니다.
코드를 구현해보면서 궁금한점이 있습니다.
제가 사용한 encoder, decoder code는 아래와 같습니다.
class lstm_encoder(nn.Module):
def init(self, input_size, hidden_size, num_layers = 1):
super(lstm_encoder, self).init()
self.input_size = input_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size = input_size, hidden_size = hidden_size, num_layers = num_layers, batch_first=True)
def forward(self, x_input):
# x_input = [ batch_size x timeSteps x n_features ]
lstm_out, hidden = self.lstm(x_input)
# lstm_out = [ batch_size x timeSteps x hidden_size ]
# hidden = (hx, cx)= ([ n_layers x batch_size x timeSteps ], [ n_layers x batch_size x timeSteps ])
return lstm_out, hidden
class lstm_decoder(nn.Module):
def init(self, ouput_size, hidden_size, num_layers = 1):
super(lstm_decoder, self).init()
self.ouput_size = ouput_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(ouput_size , hidden_size = hidden_size, num_layers = num_layers, batch_first=True)
self.linear = nn.Linear(hidden_size, ouput_size)
def forward(self, x_input, encoder_hidden):
# x_input = [ batch_size x target_size ]
lstm_out, hidden = self.lstm(x_input.unsqueeze(1), encoder_hidden) # encoder_hidden_states = context vector
# lstm_out = [ batch_size x timeSteps x hidden_size ]
# hidden = (hx, cx)= ([ n_layers x batch_size x timeSteps ], [ n_layers x batch_size x timeSteps ])
output = self.linear(lstm_out)
output = output.squeeze(1)
return output, hidden
질문입니다.
기존의 NLP문제나 제가 봤던 다른 예제 code는 대부분
A도메인의 n개의 feature로 ---------> B도메인의 n개의 feature를 예측하는 문제를 신경망으로 구현했더라구요.
seq2seq 학습을 진행할때, encoder에 들어가는 데이터의 feature 개수와 decoder에 넣어주는(?),예측하고 싶은(?) 데이터의 feature 개수가 동일해야 학습을 진행할 수 있나요?
저는 A도메인의 feature 14개로 --------> B도메인의 feature 7개를 예측하는 신경망을 seq2seq로 구현해보는 시도를 하고 있는데, many-to-one 형태의 예측 신경망을 구현하는게 seq2seq로 되는 문제일까요?