【发布时间】:2018-07-18 07:09:03
【问题描述】:
我正在尝试实现一个 seq2seq 编码器-解码器,它可以从英语句子中重构相同的英语句子。解码器工作正常(受过教师训练,强制它重建有效句子),但编码器为任何句子返回相同的隐藏编码。
我正在使用 pytorch,我想知道这是否是一个常见问题。这可能是什么原因?
hidden_size = 300
output_size = vocabularySize
class EncoderLSTM(nn.Module):
def __init__(self,emb_dim=vocabularySize):
super(EncoderLSTM,self).__init__()
self.lstm = nn.LSTM(emb_dim,hidden_size)
def forward(self,X,h):
X=X.view(1,1,-1)
#print(X.shape,h[0].shape,h[1].shape)
st,h2=self.lstm(X,h)
#print(st.shape)
return h2
def initHidden(self):
result = (Variable(torch.zeros(1, 1,hidden_size)),Variable(torch.zeros(1, 1, hidden_size)))
return result
...
hidden = encoder.initHidden()
for i in range(target_length):
encoder_input=target_variable[0][target_length-1-i]
hidden = encoder.forward(encoder_input,hidden)
...
for i in range(1,target_length):
pred,hidden = decoder.forward(decoder_input,hidden)
target = target_variable[0][i].unsqueeze(0)
values,ids = target.data.topk(1)
target_id = Variable(torch.from_numpy(np.array([ids[0][0]])).long())
loss+= criterion(pred[0],target_id)
...
loss/=target_length
encoder_optimizer.zero_grad()
decoder_optimizer.zero_grad()
loss.backward()
encoder_optimizer.step()
decoder_optimizer.step()
【问题讨论】: