Ejemplo n.º 1
0
        print_loss_total += loss
        plot_loss_total += loss

        if iter % print_every == 0:
            print_loss_avg = print_loss_total / print_every
            print_loss_total = 0
            print('%s (%d %d%%) %.4f' % (timeSince(start, iter / n_iters),
                                        iter, iter / n_iters * 100, print_loss_avg))

        if iter % plot_every == 0:
            plot_loss_avg = plot_loss_total/plot_every
            plot_losses.append(plot_loss_avg)
            plot_loss_total = 0
        
    showPlot(plot_losses)
    
    plt.savefig('base-lstm-loss')
    torch.save(encoder.state_dict(), 'encoder.pth')
    torch.save(decoder.state_dict(), 'decoder.pth')

if __name__ == "__main__":
    hidden_size = 256
    n_iters = 910000
    teacher_forcing_ratio = 0.5

    input_lang, output_lang, pairs = loader.prepareData('eng', 'fra', True)

    encoder = seq2seq.Encoder(input_lang.n_words, hidden_size).to(device)
    decoder = seq2seq.Decoder(hidden_size, output_lang.n_words).to(device)

    trainiters(encoder, decoder, n_iters)
Ejemplo n.º 2
0
		translate(pair, output_sentence)

		ref = pair[1].split()
		hyp = output_words
		scores.append(sentence_bleu([ref], hyp, smoothing_function = cc.method3) * 100.)
	print("BLEU: {:.4}".format(sum(scores)/len(test_pairs)))

if __name__ == "__main__":
	"""
	Evaluation is mostly the same as training,
	but there are no targets so we simply feed the decoder's predictions back to itself for each step.
	Every time it predict a word, we add it to the output string
	and if it predicts the EOS token we step there.
	"""
	config = argparser()

	input_lang, output_lang, pairs = loader.prepareData(config.srcLang, config.tgtLang, True)

	encoder = seq2seq.LSTMEncoder(input_size = input_lang.n_words, embedding_size \
	= config.embedding_size, hidden_size = config.hidden_size).to(device)
	decoder = seq2seq.LSTMDecoder(output_size = output_lang.n_words, embedding_size \
	= config.embedding_size, hidden_size = config.hidden_size).to(device)

	encoder.load_state_dict(torch.load(config.encoder))
	encoder.eval()
	decoder.load_state_dict(torch.load(config.decoder))
	decoder.eval()

	evaluateiters(pairs, encoder, decoder)