def build_models(self): ''' build all models. in this model source and target share embeddings ''' self.train_models['embedding'] = natsEmbedding( vocab_size = self.batch_data['vocab_size'], emb_dim = self.args.emb_dim, share_emb_weight = True ).to(self.args.device) self.train_models['encoder'] = EncoderRNN( self.args.emb_dim, self.args.src_hidden_dim, self.args.nLayers, 'lstm', device = self.args.device ).to(self.args.device) self.train_models['encoder2decoder'] = natsEncoder2Decoder( src_hidden_size = self.args.src_hidden_dim, trg_hidden_size = self.args.trg_hidden_dim, rnn_network = 'lstm', device = self.args.device ).to(self.args.device) self.train_models['decoderRNN'] = torch.nn.LSTMCell( self.args.emb_dim+self.args.trg_hidden_dim, self.args.trg_hidden_dim ).to(self.args.device) self.train_models['attnEncoder'] = AttentionEncoder( self.args.src_hidden_dim, self.args.trg_hidden_dim, attn_method='luong_general', repetition='temporal' ).to(self.args.device) self.train_models['attnDecoder'] = AttentionDecoder( self.args.trg_hidden_dim, attn_method='luong_general' ).to(self.args.device) self.train_models['wrapDecoder'] = torch.nn.Linear( self.args.src_hidden_dim*2+self.args.trg_hidden_dim*2, self.args.trg_hidden_dim, bias=True ).to(self.args.device) self.train_models['genPrb'] = torch.nn.Linear( self.args.emb_dim+self.args.src_hidden_dim*2+self.args.trg_hidden_dim, 1 ).to(self.args.device) # decoder to vocab self.train_models['decoder2proj'] = torch.nn.Linear( self.args.trg_hidden_dim, self.args.emb_dim, bias=False ).to(self.args.device)
def build_models(self): ''' build all models. in this model source and target share embeddings ''' self.base_models['embedding_base'] = natsEmbedding( vocab_size=self.batch_data['vocab_size'], emb_dim=self.args.emb_dim, share_emb_weight=self.args.share_emb_weight ).to(self.args.device) self.base_models['encoder_base'] = natsEncoder( emb_dim=self.args.emb_dim, hidden_size=self.args.src_hidden_dim, rnn_network=self.args.rnn_network, device=self.args.device ).to(self.args.device) self.train_models['encoder'] = natsEncoder( emb_dim=self.args.src_hidden_dim*2, hidden_size=self.args.src_hidden_dim, rnn_network=self.args.rnn_network, device=self.args.device ).to(self.args.device) self.train_models['encoder2decoder'] = natsEncoder2Decoder( src_hidden_size=self.args.src_hidden_dim, trg_hidden_size=self.args.trg_hidden_dim, rnn_network=self.args.rnn_network ).to(self.args.device) self.train_models['pgdecoder'] = PointerGeneratorDecoder( input_size=self.args.emb_dim, src_hidden_size=self.args.src_hidden_dim, trg_hidden_size=self.args.trg_hidden_dim, attn_method=self.args.attn_method, repetition=self.args.repetition, pointer_net=self.args.pointer_net, attn_decoder=self.args.attn_decoder, rnn_network=self.args.rnn_network, device=self.args.device ).to(self.args.device) # decoder to vocab if self.args.share_emb_weight: self.train_models['decoder2proj'] = torch.nn.Linear( self.args.trg_hidden_dim, self.args.emb_dim, bias=False).to(self.args.device) else: self.train_models['decoder2vocab'] = torch.nn.Linear( self.args.trg_hidden_dim, self.batch_data['vocab_size']).to(self.args.device)