Implementing inference functions
This commit is contained in:
parent
4d3ef41a07
commit
9af9347531
|
|
@ -110,33 +110,37 @@ class RecurrentModel(pl.LightningModule):
|
||||||
def encode(self, lX, l_pad, batch_size=128):
|
def encode(self, lX, l_pad, batch_size=128):
|
||||||
"""
|
"""
|
||||||
Returns encoded data (i.e, RNN hidden state at second feed-forward layer - linear1). Dimensionality is 512.
|
Returns encoded data (i.e, RNN hidden state at second feed-forward layer - linear1). Dimensionality is 512.
|
||||||
|
# TODO: does not run on gpu..
|
||||||
:param lX:
|
:param lX:
|
||||||
|
:param l_pad:
|
||||||
|
:param batch_size:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
l_embed = {lang: [] for lang in lX.keys()}
|
with torch.no_grad():
|
||||||
for lang in sorted(lX.keys()):
|
l_embed = {lang: [] for lang in lX.keys()}
|
||||||
for i in range(0, len(lX[lang]), batch_size):
|
for lang in sorted(lX.keys()):
|
||||||
if i+batch_size > len(lX[lang]):
|
for i in range(0, len(lX[lang]), batch_size):
|
||||||
batch = lX[lang][i:len(lX[lang])]
|
if i+batch_size > len(lX[lang]):
|
||||||
else:
|
batch = lX[lang][i:len(lX[lang])]
|
||||||
batch = lX[lang][i:i+batch_size]
|
else:
|
||||||
max_pad_len = define_pad_length(batch)
|
batch = lX[lang][i:i+batch_size]
|
||||||
batch = pad(batch, pad_index=l_pad[lang], max_pad_length=max_pad_len)
|
max_pad_len = define_pad_length(batch)
|
||||||
X = torch.LongTensor(batch)
|
batch = pad(batch, pad_index=l_pad[lang], max_pad_length=max_pad_len)
|
||||||
_batch_size = X.shape[0]
|
X = torch.LongTensor(batch)
|
||||||
X = self.embed(X, lang)
|
_batch_size = X.shape[0]
|
||||||
X = self.embedding_dropout(X, drop_range=self.drop_embedding_range, p_drop=self.drop_embedding_prop,
|
X = self.embed(X, lang)
|
||||||
training=self.training)
|
X = self.embedding_dropout(X, drop_range=self.drop_embedding_range, p_drop=self.drop_embedding_prop,
|
||||||
X = X.permute(1, 0, 2)
|
training=self.training)
|
||||||
h_0 = Variable(torch.zeros(self.n_layers * self.n_directions, _batch_size, self.hidden_size).to(self.device))
|
X = X.permute(1, 0, 2)
|
||||||
output, _ = self.rnn(X, h_0)
|
h_0 = Variable(torch.zeros(self.n_layers * self.n_directions, _batch_size, self.hidden_size).to(self.device))
|
||||||
output = output[-1, :, :]
|
output, _ = self.rnn(X, h_0)
|
||||||
output = F.relu(self.linear0(output))
|
output = output[-1, :, :]
|
||||||
output = self.dropout(F.relu(self.linear1(output)))
|
output = F.relu(self.linear0(output))
|
||||||
l_embed[lang].append(output)
|
output = self.dropout(F.relu(self.linear1(output)))
|
||||||
for k, v in l_embed.items():
|
l_embed[lang].append(output)
|
||||||
l_embed[k] = torch.cat(v, dim=0)
|
for k, v in l_embed.items():
|
||||||
return l_embed
|
l_embed[k] = torch.cat(v, dim=0).cpu().numpy()
|
||||||
|
return l_embed
|
||||||
|
|
||||||
def training_step(self, train_batch, batch_idx):
|
def training_step(self, train_batch, batch_idx):
|
||||||
lX, ly = train_batch
|
lX, ly = train_batch
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,7 @@ class RecurrentGen(ViewGen):
|
||||||
l_pad = self.multilingualIndex.l_pad()
|
l_pad = self.multilingualIndex.l_pad()
|
||||||
data = self.multilingualIndex.l_devel_index()
|
data = self.multilingualIndex.l_devel_index()
|
||||||
# trainer = Trainer(gpus=self.gpus)
|
# trainer = Trainer(gpus=self.gpus)
|
||||||
# self.model.eval()
|
self.model.eval()
|
||||||
time_init = time()
|
time_init = time()
|
||||||
l_embeds = self.model.encode(data, l_pad, batch_size=256)
|
l_embeds = self.model.encode(data, l_pad, batch_size=256)
|
||||||
transform_time = round(time() - time_init, 3)
|
transform_time = round(time() - time_init, 3)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue