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))
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)
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))
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 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)