Esempio n. 1
0
    def __init__(self,
                 attn_model,
                 embedding,
                 hidden_size,
                 output_size,
                 n_layers=1,
                 dropout=0.1):
        super(LuongAttnDecoderRNN, self).__init__()

        # Keep for reference
        self.attn_model = attn_model
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.n_layers = n_layers
        self.dropout = dropout

        # Define layers
        self.embedding = embedding
        self.embedding_dropout = nn.Dropout(dropout)
        self.gru = nn.GRU(hidden_size,
                          hidden_size,
                          n_layers,
                          dropout=(0 if n_layers == 1 else dropout))
        self.concat = nn.Linear(hidden_size * 2, hidden_size)
        self.out = nn.Linear(hidden_size, output_size)

        # attention layer
        self.attn = Attn(attn_model, hidden_size)
Esempio n. 2
0
    def __init__(self, rnn_type, attn_model, embedding_dim, hidden_dim, output_size, n_layers=1, dropout=0.5):
        super(LuongAttnDecoderRNN, self).__init__()

        # Keep for reference
        self.rnn_type = rnn_type
        self.attn_model = attn_model
        self.hidden_dim = hidden_dim
        self.output_size = output_size
        self.vocab_size = output_size
        self.n_layers = n_layers
        self.dropout = dropout
        self.embedding_dim = embedding_dim

        # Define layers
        self.embeddings = nn.Embedding(output_size, embedding_dim)
        self.embedding_dropout = nn.Dropout(dropout)
        if self.rnn_type in ['LSTM', 'GRU']:
            self.rnn = getattr(nn, self.rnn_type)(embedding_dim, hidden_dim, n_layers, dropout=dropout)

        self.concat = nn.Linear(hidden_dim * 2, hidden_dim)
        self.out = nn.Linear(hidden_dim, output_size)

        # Choose attention model
        print(attn_model)
        if attn_model != 'none':
            self.attn = Attn(attn_model, hidden_dim)
Esempio n. 3
0
    def __init__(self,
                 rnn_type,
                 embedding_dim,
                 hidden_dim,
                 vocab_size,
                 max_seq_len,
                 n_layers=1,
                 dropout=0.1,
                 word_dropout=None):
        super(CustomAttnDecoderRNN, self).__init__()
        self.hidden_dim = hidden_dim  # same hidden dim
        self.embedding_dim = embedding_dim  # same emb dim
        self.max_seq_len = max_seq_len
        self.vocab_size = vocab_size
        self.rnn_type = rnn_type
        self.n_layers = n_layers
        if self.rnn_type in ['CustomLSTM', 'CustomGRU']:
            #self.rnn = getattr(nn, rnn_type)(embedding_dim, hidden_dim, n_layers, dropout=dropout)
            if self.rnn_type == 'CustomGRU':
                #cell = CustomGRUCell(embedding_dim, hidden_dim)
                self.rnn = CustomGRU(CustomGRUCell,
                                     embedding_dim,
                                     hidden_dim,
                                     n_layers,
                                     dropout=dropout)
        else:
            raise

        self.attn = Attn('concat', hidden_dim)
        ##self.attn = Attn('concat', hidden_dim, max_seq_len)
        self.rnn2out = nn.Linear(hidden_dim, vocab_size)
        self.drop = nn.Dropout(dropout)
        self.dropout = dropout
        self.word_dropout = word_dropout
    def __init__(self, hidden_size, output_size, dropout_p=0.1):
        super(AttnDecoder, self).__init__()

        self.attn_model = Attn('general', 64)
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.dropout_p = dropout_p

        self.embedding = nn.Embedding(output_size, hidden_size)
        self.dropout = nn.Dropout(dropout_p)
        self.attn = Attn('concat', hidden_size)
        self.lstm = nn.LSTM(input_size=hidden_size,
                            hidden_size=hidden_size,
                            num_layers=1,
                            dropout=dropout_p)
        self.out = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax()
Esempio n. 5
0
 def __init__(self, hidden_size, output_size, method, num_layers=1):
     super(Decoder, self).__init__()
     self.hidden_size = hidden_size
     self.output_size = output_size
     self.num_layers = num_layers
     self.method = method
     self.embedding = nn.Embedding(output_size, hidden_size)
     self.lstm = nn.LSTM(input_size=hidden_size,
                         hidden_size=hidden_size,
                         num_layers=num_layers,
                         batch_first=True)
     self.lstm = self.lstm.to(device)
     self.attn = Attn(method, hidden_size)
     self.concat = nn.Linear(hidden_size * 2, hidden_size)
     self.tanh = nn.Tanh()
     self.out = nn.Linear(hidden_size, output_size)
     self.softmax = nn.LogSoftmax(dim=1)
Esempio n. 6
0
    def __init__(self,
                 attn_model,
                 embedding_dim,
                 hidden_size,
                 output_size,
                 unit='gru',
                 n_layers=1,
                 dropout=0.1,
                 embedding=None,
                 latent_dim=300,
                 bidirectional=True):
        super(DecoderRNN, self).__init__()

        self.unit = unit
        self.softmax = F.softmax
        self.n_layers = n_layers
        self.attn_model = attn_model
        self.latent_dim = latent_dim
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.bidirectional = bidirectional
        self.embedding_dropout = nn.Dropout(dropout)
        self.dropout = (0 if n_layers == 1 else dropout)
        self.out = nn.Linear(self.hidden_size, self.output_size)

        if embedding:
            self.embedding = embedding
        if unit == 'gru':
            self.rnn = nn.GRU(embedding_dim,
                              hidden_size,
                              n_layers,
                              dropout=self.dropout)
        else:
            self.rnn = nn.LSTM(embedding_dim,
                               hidden_size,
                               n_layers,
                               dropout=self.dropout)

        self.concat = nn.Linear(hidden_size * 2, hidden_size)
        if attn_model:
            self.attn = Attn(attn_model, hidden_size)
Esempio n. 7
0
 def __init__(self, rnn_type, embedding_dim, hidden_dim, output_size, n_layers=1, dropout=0.1):
     super(BahdanauAttnDecoderRNN, self).__init__()
     
     # Define parameters
     self.rnn_type = rnn_type
     self.hidden_size = hidden_dim
     self.output_size = output_size
     self.vocab_size = output_size
     self.n_layers = n_layers
     self.dropout = dropout
     self.embedding_dim = embedding_dim
     
     # Define layers
     self.embeddings = nn.Embedding(output_size, embedding_dim)
     self.embedding_dropout = nn.Dropout(dropout)
     self.attn = Attn('concat', hidden_dim)
     #self.gru = nn.GRU(hidden_size, hidden_size, n_layers, dropout=dropout_p)
     if self.rnn_type in ['LSTM', 'GRU']:
         #self.rnn = getattr(nn, rnn_type)(embedding_dim, hidden_dim, n_layers, dropout=dropout)
         self.rnn = getattr(nn, self.rnn_type)(embedding_dim+hidden_dim, hidden_dim, n_layers, dropout=dropout)
     #self.out = nn.Linear(hidden_dim, output_size)
     self.out = nn.Linear(hidden_dim*2, output_size)
Esempio n. 8
0
    def __init__(self,
                 input_size,
                 hidden_size,
                 batch_size,
                 learning_rate,
                 method,
                 num_layers=1):
        dataset = Seq2SeqDataset()
        self.data_loader = DataLoader(dataset=dataset,
                                      batch_size=batch_size,
                                      shuffle=True)
        self.vocab = dataset.vocab
        self.output_size = len(self.vocab)
        self.char2index, self.index2char = self.data_index()

        self.input_size = input_size
        self.hidden_size = hidden_size
        self.batch_size = batch_size
        self.learning_rate = learning_rate
        self.num_layers = 1
        self.method = method

        self.device = 'cuda:0' if torch.cuda.is_available() else 'cpu'
        self.attn = Attn(method, hidden_size)
        self.encoder = Encoder(input_size, hidden_size, self.output_size,
                               self.num_layers)
        self.decoder = Decoder(hidden_size, self.output_size, method,
                               self.num_layers)

        self.attn = self.attn.to(self.device)
        self.encoder = self.encoder.to(self.device)
        self.decoder = self.decoder.to(self.device)

        self.loss_function = NLLLoss()
        self.encoder_optim = torch.optim.Adam(self.encoder.parameters(),
                                              lr=self.learning_rate)
        self.decoder_optim = torch.optim.Adam(self.decoder.parameters(),
                                              lr=self.learning_rate)
Esempio n. 9
0
        return loss.data[0], decoder_outputs

    def train(self):
        for j in range(self.num_epoch):
            for i, (x_data, y_data) in enumerate(self.data_loader):
                loss, result = self.step(x_data, y_data)
            _, x = self.step(['Be fair.'], ['Sois équitable !'])

            print('Epoch' , j)
            print(x)
            print('-------> ', self.convert2ind('Sois équitable !').cpu().numpy()[0])



trans = Translate()
encoder_input = trans.convert2ind('Lâche')
encoder_output, (hidden_state, cell_state) = trans.encoder(encoder_input)

attn = Attn('general', trans.hidden_size)
energy = attn(hidden_state, encoder_output)
print(energy)
print(energy.size())