def test(): encoder_test = sm.EncoderRNN(10, 10, 2) decoder_test = sm.AttnDecoderRNN('general', 10, 10, 2) if torch.cuda.is_available(): encoder_test.cuda() decoder_test.cuda() encoder_hidden = encoder_test.init_hidden() word_input = cuda_variable(torch.LongTensor([1, 2, 3])) encoder_outputs, encoder_hidden = encoder_test(word_input, encoder_hidden) print(encoder_outputs.size()) word_target = cuda_variable(torch.LongTensor([1, 2, 3])) decoder_attns = torch.zeros(1, 3, 3) decoder_hidden = encoder_hidden decoder_context = cuda_variable(torch.zeros(1, decoder_test.hidden_size)) for c in range(len(word_target)): decoder_output, decoder_context, decoder_hidden, decoder_attn = \ decoder_test(word_target[c], decoder_context, decoder_hidden, encoder_outputs) print(decoder_output.size(), decoder_hidden.size(), decoder_attn.size()) decoder_attns[0, c] = decoder_attn.squeeze(0).cpu().data
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 encoder = sm.EncoderRNN(N_CHARS, HIDDEN_SIZE, N_LAYERS) decoder = sm.DecoderRNN(HIDDEN_SIZE, N_CHARS, N_LAYERS) if torch.cuda.is_available(): decoder.cuda() encoder.cuda() print(encoder, decoder) test() params = list(encoder.parameters()) + list(decoder.parameters()) optimizer = torch.optim.Adam(params, lr=0.001) criterion = nn.CrossEntropyLoss() train_loader = DataLoader(dataset=TextDataset(), batch_size=BATCH_SIZE, shuffle=True,