Skip to content

Commit a1041f4

Browse files
adolphk-ykljshou
authored andcommitted
update sequence tagging task workflow (#62)
1 parent f83ec28 commit a1041f4

File tree

16 files changed

+2335
-50
lines changed

16 files changed

+2335
-50
lines changed

LearningMachine.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ def train(self, optimizer, loss_fn):
301301
else:
302302
logging.info("Epoch %d batch idx: %d; lr: %f; since last log, loss=%f; %s" % \
303303
(epoch, i, lr_scheduler.get_lr(), np.mean(all_costs), result))
304+
304305
show_result_cnt = 0
305306
# The loss and other metrics printed during a training epoch are just the result of part of the training data.
306307
all_costs = []

Model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ def forward(self, inputs_desc, length_desc, *param_list):
391391
return representation_output
392392

393393
def is_cuda(self):
394-
return next(self.parameters()).data.is_cuda
394+
return list(self.parameters())[-1].data.is_cuda
395395

396396
def update_use_gpu(self, new_use_gpu):
397397
self.use_gpu = new_use_gpu

block_zoo/Embedding.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def forward(self, inputs, use_gpu=False):
160160
# emb = self.embeddings[input_cluster](input, lengths[input]).float()
161161
# else:
162162
# emb = self.embeddings[input_cluster](input).float()
163-
if self.embeddings[input_cluster].weight.device.type == 'cpu':
163+
if list(self.embeddings[input_cluster].parameters())[0].device.type == 'cpu':
164164
emb = self.embeddings[input_cluster](input.cpu()).float()
165165
else:
166166
emb = self.embeddings[input_cluster](input).float()

block_zoo/embedding/CNNCharEmbedding.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,16 @@ def __init__(self, layer_conf):
6868
self.char_embeddings = nn.Embedding(layer_conf.vocab_size, layer_conf.embedding_matrix_dim, padding_idx=self.layer_conf.padding)
6969
nn.init.uniform_(self.char_embeddings.weight, -0.001, 0.001)
7070

71-
self.filters = Variable(torch.randn(layer_conf.output_channel_num, layer_conf.input_channel_num,
72-
layer_conf.window_size, layer_conf.embedding_matrix_dim).float(),
73-
requires_grad=True)
71+
self.char_cnn = nn.Conv2d(1, layer_conf.output_channel_num, (layer_conf.window_size, layer_conf.embedding_matrix_dim),
72+
stride=self.layer_conf.stride, padding=self.layer_conf.padding)
7473
if layer_conf.activation:
7574
self.activation = eval("nn." + self.layer_conf.activation)()
7675
else:
7776
self.activation = None
7877
if self.is_cuda():
79-
self.filters = self.filters.cuda()
80-
if self.activation:
78+
self.char_embeddings = self.char_embeddings.cuda()
79+
self.char_cnn = self.char_cnn.cuda()
80+
if self.activation and hasattr(self.activation, 'weight'):
8181
self.activation.weight = torch.nn.Parameter(self.activation.weight.cuda())
8282

8383
def forward(self, string):
@@ -97,24 +97,19 @@ def forward(self, string):
9797
9898
"""
9999
string_reshaped = string.view(string.size()[0], -1) #[batch_size, seq_len * char num in words]
100+
100101
char_embs_lookup = self.char_embeddings(string_reshaped).float() # [batch_size, seq_len * char num in words, embedding_dim]
101-
if self.is_cuda():
102-
if self.filters.device == torch.device('cpu'):
103-
self.filters = self.filters.cuda()
104-
char_embs_lookup = char_embs_lookup.cuda(device=self.filters.device)
105102
char_embs_lookup = char_embs_lookup.view(-1, string.size()[2], self.layer_conf.embedding_matrix_dim) #[batch_size * seq_len, char num in words, embedding_dim]
106103

107104
string_input = torch.unsqueeze(char_embs_lookup, 1) # [batch_size * seq_len, input_channel_num=1, char num in words, embedding_dim]
108-
109-
string_conv = F.conv2d(string_input, self.filters, stride=self.layer_conf.stride, padding=self.layer_conf.padding) # [batch_size * seq_len, output_channel_num, char num in word related, 1]
110-
string_conv = torch.squeeze(string_conv, 3).permute(0, 2, 1) # [batch_size * seq_len, char num in word related, output_channel_num]
105+
string_conv = self.char_cnn(string_input).squeeze()
111106
if self.activation:
112107
string_conv = self.activation(string_conv)
113108

114-
string_maxpooling = torch.max(string_conv, 1)[0]
115-
string_out = string_maxpooling.view(string.size()[0], string.size()[1], -1)
109+
string_maxpooling = F.max_pool1d(string_conv, string_conv.size(2)).squeeze()
110+
string_out = string_maxpooling.view(string.size()[0], -1, self.layer_conf.output_channel_num)
116111

117-
return string_out.cpu()
112+
return string_out
118113

119114

120115
if __name__ == '__main__':

0 commit comments

Comments
 (0)