def translate(enc_input='thisissungkim.iloveyou.', predict_len=100, temperature=0.9): input_var = str2tensor(enc_input) encoder_hidden = encoder.init_hidden() encoder_outputs, encoder_hidden = encoder(input_var, encoder_hidden) hidden = encoder_hidden predicted = '' dec_input = str2tensor(SOS_token) for c in range(predict_len): output, hidden = decoder(dec_input, hidden) # Sample from the network as a multi nominal distribution output_dist = output.data.view(-1).div(temperature).exp() top_i = torch.multinomial(output_dist, 1)[0] # Stop at the EOS if top_i is EOS_token: break predicted_char = chr(top_i) predicted += predicted_char dec_input = str2tensor(predicted_char) return enc_input, predicted
def train(src, target): loss = 0 src_var = str2tensor(src) target_var = str2tensor(target, eos=True) # Add the EOS token encoder_hidden = encoder.init_hidden() encoder_outputs, encoder_hidden = encoder(src_var, encoder_hidden) hidden = encoder_hidden context = cuda_variable(torch.zeros(1, decoder.hidden_size)) for c in range(len(target_var)): # First, we feed SOS. Others, we use teacher forcing. token = target_var[c - 1] if c else str2tensor(SOS_token) output, context, hidden, attention = decoder( token, context, hidden, encoder_outputs) loss += criterion(output, target_var[c]) encoder.zero_grad() decoder.zero_grad() loss.backward() optimizer.step() return loss.data[0] / len(target_var)
def test(): encoder_hidden = encoder.init_hidden() word_input = str2tensor('hello') encoder_outputs, encoder_hidden = encoder(word_input, encoder_hidden) print(encoder_outputs) decoder_hidden = encoder_hidden word_target = str2tensor('pytorch') for c in range(len(word_target)): decoder_output, decoder_hidden = decoder(word_target[c], decoder_hidden) print(decoder_output.size(), decoder_hidden.size())
def test(): encoder_hidden = encoder.init_hidden() word_input = str2tensor('hello') encoder_outputs, encoder_hidden = encoder(word_input, encoder_hidden) print(encoder_outputs) decoder_hidden = encoder_hidden word_target = str2tensor('pytorch') for c in range(len(word_target)): decoder_output, decoder_hidden = decoder( word_target[c], decoder_hidden) print(decoder_output.size(), decoder_hidden.size())
def train(src, target): src_var = str2tensor(src) target_var = str2tensor(target, eos=True) # Add the EOS token encoder_hidden = encoder.init_hidden() encoder_outputs, encoder_hidden = encoder(src_var, encoder_hidden) hidden = encoder_hidden loss = 0 for c in range(len(target_var)): # First, we feed SOS # Others, we use teacher forcing token = target_var[c - 1] if c else str2tensor(SOS_token) output, hidden = decoder(token, hidden) loss += criterion(output, target_var[c]) encoder.zero_grad() decoder.zero_grad() loss.backward() optimizer.step() return loss.data[0] / len(target_var)