def test_vector_out(self):
        decdim = 50
        outvocsize = 17
        outemb = IdxToOneHot(outvocsize)
        outembdim = outvocsize
        decrnus = [GRU(dim=outvocsize, innerdim=decdim)]
        dec = SeqDecoder([outemb]+decrnus, innerdim=decdim*2, outconcat=True, inconcat=False)

        ctxdata = np.random.random((1, decdim)).astype("float32")
        seqdata = np.asarray([[2, 3, 4]])
        pred = dec.predict(ctxdata, seqdata)
        self.assertEqual(pred.shape, (1, 3, outvocsize))

        dec = SeqDecoder([outemb]+decrnus, innerdim=decdim*2, softmaxoutblock=False, outconcat=True, inconcat=False)
        pred = dec.predict(ctxdata, seqdata)
        self.assertEqual(pred.shape, (1, 3, decdim*2))
Exemple #2
0
class TestAttentionRNNDecoder(TestCase):
    def setUp(self):
        vocsize = 10
        innerdim = 50
        encdim = 30
        seqlen = 5
        batsize = 77
        self.att = Attention(AttGen(BilinearDistance(innerdim, encdim)),
                             WeightedSumAttCon())
        self.decwatt = SeqDecoder(
            [IdxToOneHot(vocsize), GRU(dim=vocsize+encdim, innerdim=innerdim)],
            inconcat=True,
            attention=self.att,
            innerdim=innerdim
        )
        self.decwoatt = SeqDecoder(
            [IdxToOneHot(vocsize), GRU(dim=vocsize+encdim, innerdim=innerdim)],
            inconcat=True,
            innerdim=innerdim
        )
        self.attdata = np.random.random((batsize, seqlen, encdim)).astype("float32")
        self.data = np.random.random((batsize, encdim)).astype("float32")
        self.seqdata = np.random.randint(0, vocsize, (batsize, seqlen))
        self.predshape = (batsize, seqlen, vocsize)

    def test_shape(self):
        pred = self.decwatt.predict(self.attdata, self.seqdata)
        self.assertEqual(pred.shape, self.predshape)

    def test_shape_wo_att(self):
        pred = self.decwoatt.predict(self.data, self.seqdata)
        self.assertEqual(pred.shape, self.predshape)

    def test_attentiongenerator_param_in_allparams(self):
        inps, outps = self.decwatt.autobuild(self.attdata, self.seqdata)
        allparams = outps[0].allparams
        self.assertIn(self.att.attentiongenerator.dist.W, allparams)

    def test_attentiongenerator_param_not_in_params_of_dec_wo_att(self):
        _, outps = self.decwoatt.autobuild(self.data, self.seqdata)
        allparams = outps[0].allparams
        self.assertNotIn(self.att.attentiongenerator.dist.W, allparams)
Exemple #3
0
    def test_vector_out(self):
        decdim = 50
        outvocsize = 17
        outemb = IdxToOneHot(outvocsize)
        outembdim = outvocsize
        decrnus = [GRU(dim=outvocsize, innerdim=decdim)]
        dec = SeqDecoder([outemb] + decrnus,
                         innerdim=decdim * 2,
                         outconcat=True,
                         inconcat=False)

        ctxdata = np.random.random((2, decdim)).astype("float32")
        seqdata = np.asarray([[2, 3, 4], [2, 3, 4]])
        pred = dec.predict(ctxdata, seqdata)
        self.assertEqual(pred.shape, (2, 3, outvocsize))

        dec = SeqDecoder([outemb] + decrnus,
                         innerdim=decdim * 2,
                         softmaxoutblock=False,
                         outconcat=True,
                         inconcat=False)
        pred = dec.predict(ctxdata, seqdata)
        self.assertEqual(pred.shape, (2, 3, decdim * 2))
Exemple #4
0
class TestSimpleRNNDecoder(TestCase):
    def setUp(self):
        self.batsize = 70
        self.vocsize = 27
        self.encdim = 44
        self.hdim = 33
        self.statedim = 50
        self.seqlen = 30
        self.encodings_data = np.random.random((self.batsize, self.encdim)).astype("float32")
        self.sequence_data = np.random.randint(0, self.vocsize, (self.batsize, self.seqlen))
        self.dec = SeqDecoder(
            [IdxToOneHot(self.vocsize), GRU(dim=self.vocsize+self.encdim, innerdim=self.hdim), LSTM(dim=self.hdim, innerdim=self.statedim)],
            inconcat=True,
            innerdim=self.statedim
        )

    def test_rnndecoder_output_shape(self):
        outvals = self.dec.predict(self.encodings_data, self.sequence_data)
        self.assertEqual(outvals.shape, (self.batsize, self.seqlen, self.vocsize))
Exemple #5
0
class TestSimpleRNNDecoder(TestCase):
    def setUp(self):
        self.batsize = 70
        self.vocsize = 27
        self.encdim = 44
        self.hdim = 33
        self.statedim = 50
        self.seqlen = 30
        self.encodings_data = np.random.random(
            (self.batsize, self.encdim)).astype("float32")
        self.sequence_data = np.random.randint(0, self.vocsize,
                                               (self.batsize, self.seqlen))
        self.dec = SeqDecoder([
            IdxToOneHot(self.vocsize),
            GRU(dim=self.vocsize + self.encdim, innerdim=self.hdim),
            LSTM(dim=self.hdim, innerdim=self.statedim)
        ],
                              inconcat=True,
                              innerdim=self.statedim)

    def test_rnndecoder_output_shape(self):
        outvals = self.dec.predict(self.encodings_data, self.sequence_data)
        self.assertEqual(outvals.shape,
                         (self.batsize, self.seqlen, self.vocsize))
class TestAttentionRNNDecoder(TestCase):
    def setUp(self):
        vocsize = 10
        innerdim = 50
        encdim = 30
        seqlen = 5
        batsize = 77
        self.att = Attention(LinearSumAttentionGenerator(indim=innerdim + encdim), WeightedSumAttCon())
        self.decwatt = SeqDecoder(
            [IdxToOneHot(vocsize), GRU(dim=vocsize+encdim, innerdim=innerdim)],
            inconcat=True,
            attention=self.att,
            innerdim=innerdim
        )
        self.decwoatt = SeqDecoder(
            [IdxToOneHot(vocsize), GRU(dim=vocsize+encdim, innerdim=innerdim)],
            inconcat=True,
            innerdim=innerdim
        )
        self.attdata = np.random.random((batsize, seqlen, encdim)).astype("float32")
        self.data = np.random.random((batsize, encdim)).astype("float32")
        self.seqdata = np.random.randint(0, vocsize, (batsize, seqlen))
        self.predshape = (batsize, seqlen, vocsize)

    def test_shape(self):
        pred = self.decwatt.predict(self.attdata, self.seqdata)
        self.assertEqual(pred.shape, self.predshape)

    def test_shape_wo_att(self):
        pred = self.decwoatt.predict(self.data, self.seqdata)
        self.assertEqual(pred.shape, self.predshape)

    def test_attentiongenerator_param_in_allparams(self):
        self.decwatt.predict(self.attdata, self.seqdata)
        allparams = self.decwatt.output.allparams
        self.assertIn(self.att.attentiongenerator.W, allparams)

    def test_attentiongenerator_param_not_in_params_of_dec_wo_att(self):
        self.decwoatt.predict(self.data, self.seqdata)
        allparams = self.decwoatt.output.allparams
        self.assertNotIn(self.att.attentiongenerator.W, allparams)