示例#1
0
文件: encoder.py 项目: dksifoua/NMT
 def setUp(self) -> None:
     self.embedding_size = 10
     self.vocab_size = 30
     self.hidden_size = 32
     self.n_layers = 4
     self.dropout = 0.5
     self.recurrent_dropout = 0.5
     self.encoder = EncoderLayerBiLSTM(embedding_size=self.embedding_size, hidden_size=self.hidden_size,
                                       vocab_size=self.vocab_size, n_layers=self.n_layers,
                                       dropout=self.dropout, recurrent_dropout=self.recurrent_dropout)
示例#2
0
 def setUp(self) -> None:
     self.embedding_size = 10
     self.vocab_size = 30
     self.hidden_size = 32
     self.n_layers = 4
     self.dropout = 0.5
     self.embedding_dropout = 0.5
     self.recurrent_dropout = 0.5
     self.seq2seq = SeqToSeqBadhanauAttentionLSTM(
         encoder=EncoderLayerBiLSTM(
             embedding_size=self.embedding_size,
             hidden_size=self.hidden_size,
             vocab_size=self.vocab_size,
             n_layers=self.n_layers,
             dropout=self.dropout,
             recurrent_dropout=self.recurrent_dropout),
         decoder=BadhanauDecoderLayerLSTM(
             embedding_size=self.embedding_size,
             hidden_size=self.hidden_size,
             vocab_size=self.vocab_size,
             n_layers=self.n_layers,
             dropout=self.dropout,
             embedding_dropout=self.embedding_dropout,
             recurrent_dropout=self.recurrent_dropout,
             attention_layer=BadhanauAttentionLayer(
                 hidden_size=self.hidden_size)),
         device=torch.device('cpu'),
         pad_index=0)
示例#3
0
 def test_build_model(self):
     with self.assertRaises(ValueError):
         self.seq2seq = SeqToSeqBiLSTM(
             encoder=EncoderLayerBiLSTM(
                 embedding_size=self.embedding_size,
                 hidden_size=self.hidden_size,
                 vocab_size=self.vocab_size,
                 n_layers=self.n_layers,
                 dropout=self.dropout,
                 recurrent_dropout=self.recurrent_dropout),
             decoder=DecoderLayerLSTM(
                 embedding_size=self.embedding_size,
                 hidden_size=self.hidden_size + 1,
                 vocab_size=self.vocab_size,
                 n_layers=self.n_layers + 1,
                 embedding_dropout=self.embedding_dropout,
                 recurrent_dropout=self.recurrent_dropout),
             device=torch.device('cpu'))
示例#4
0
 def test_build_model(self):
     with self.assertRaises(ValueError):
         self.seq2seq = SeqToSeqBadhanauAttentionLSTM(
             encoder=EncoderLayerBiLSTM(
                 embedding_size=self.embedding_size,
                 hidden_size=self.hidden_size,
                 vocab_size=self.vocab_size,
                 n_layers=self.n_layers,
                 dropout=self.dropout,
                 recurrent_dropout=self.recurrent_dropout),
             decoder=BadhanauDecoderLayerLSTM(
                 embedding_size=self.embedding_size,
                 hidden_size=self.hidden_size + 1,
                 vocab_size=self.vocab_size,
                 n_layers=self.n_layers + 1,
                 dropout=self.dropout,
                 embedding_dropout=self.embedding_dropout,
                 recurrent_dropout=self.recurrent_dropout,
                 attention_layer=BadhanauAttentionLayer(
                     hidden_size=self.hidden_size + 2)),
             device=torch.device('cpu'),
             pad_index=0)
示例#5
0
文件: encoder.py 项目: dksifoua/NMT
class TestEncoderLayerBiLSTM(unittest.TestCase):

    def setUp(self) -> None:
        self.embedding_size = 10
        self.vocab_size = 30
        self.hidden_size = 32
        self.n_layers = 4
        self.dropout = 0.5
        self.recurrent_dropout = 0.5
        self.encoder = EncoderLayerBiLSTM(embedding_size=self.embedding_size, hidden_size=self.hidden_size,
                                          vocab_size=self.vocab_size, n_layers=self.n_layers,
                                          dropout=self.dropout, recurrent_dropout=self.recurrent_dropout)

    def test_build_model(self):
        with self.assertRaises(ValueError):
            _ = EncoderLayerBiLSTM(embedding_size=self.embedding_size, hidden_size=self.hidden_size,
                                   vocab_size=self.vocab_size, n_layers=self.n_layers,
                                   dropout=-0.1, recurrent_dropout=1.1)

    def test_load_embeddings(self):
        with self.assertRaises(ValueError):
            embeddings = torch.FloatTensor(np.random.randn(12, 54))
            self.encoder.load_embeddings(embeddings=embeddings)
        embeddings = torch.FloatTensor(np.random.randn(self.vocab_size, self.embedding_size))
        self.encoder.load_embeddings(embeddings=embeddings)

    def test_fine_tune_embeddings(self):
        self.encoder.fine_tune_embeddings(fine_tune=True)
        for param in self.encoder.embeddings.parameters():
            self.assertTrue(param.requires_grad)

    def test_forward(self):
        seq_len, batch_size = 1, 16
        input_sequences = torch.randint(low=0, high=self.vocab_size, size=(seq_len, batch_size))
        sequence_lengths = torch.randint(low=1, high=seq_len + 1, size=(batch_size,))
        sequence_lengths, sorted_indices = torch.sort(sequence_lengths, dim=0, descending=True)
        input_sequences = input_sequences[:, sorted_indices]
        with self.assertRaises(ValueError):
            _, (_, _) = self.encoder(input_sequences=torch.randint(low=0, high=self.vocab_size,
                                                                   size=(seq_len, batch_size + 1)),
                                     sequence_lengths=torch.randint(low=1, high=seq_len + 1, size=(batch_size,)))
        outputs, (h_state, c_state) = self.encoder(input_sequences=input_sequences, sequence_lengths=sequence_lengths)
        self.assertEqual(outputs.size(), torch.Size([seq_len, batch_size, self.hidden_size]))
        self.assertEqual(h_state.size(), torch.Size([self.n_layers, batch_size, self.hidden_size]))
        self.assertEqual(c_state.size(), torch.Size([self.n_layers, batch_size, self.hidden_size]))
示例#6
0
 def setUp(self) -> None:
     self.embedding_size = 10
     self.vocab_size = 30
     self.hidden_size = 32
     self.n_layers = 4
     self.dropout = 0.5
     self.embedding_dropout = 0.5
     self.recurrent_dropout = 0.5
     self.seq2seq = SeqToSeqBiLSTM(
         encoder=EncoderLayerBiLSTM(
             embedding_size=self.embedding_size,
             hidden_size=self.hidden_size,
             vocab_size=self.vocab_size,
             n_layers=self.n_layers,
             dropout=self.dropout,
             recurrent_dropout=self.recurrent_dropout),
         decoder=DecoderLayerLSTM(embedding_size=self.embedding_size,
                                  hidden_size=self.hidden_size,
                                  vocab_size=self.vocab_size,
                                  n_layers=self.n_layers,
                                  embedding_dropout=self.embedding_dropout,
                                  recurrent_dropout=self.recurrent_dropout),
         device=torch.device('cpu'))
示例#7
0
文件: encoder.py 项目: dksifoua/NMT
 def test_build_model(self):
     with self.assertRaises(ValueError):
         _ = EncoderLayerBiLSTM(embedding_size=self.embedding_size, hidden_size=self.hidden_size,
                                vocab_size=self.vocab_size, n_layers=self.n_layers,
                                dropout=-0.1, recurrent_dropout=1.1)