Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 contributor

Users who have contributed to this file

68 lines (59 sloc) 2.14 KB
# @Author : bamtercelboo
# @Datetime : 2018/07/19 22:35
# @File : model_LSTM.py
# @Last Modify Time : 2018/07/19 22:35
# @Contact : bamtercelboo@{gmail.com, 163.com}
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
import random
import torch.nn.init as init
from DataUtils.Common import seed_num
torch.manual_seed(seed_num)
random.seed(seed_num)
"""
Neural Networks model : LSTM
"""
class LSTM(nn.Module):
def __init__(self, args):
super(LSTM, self).__init__()
self.args = args
self.hidden_dim = args.lstm_hidden_dim
self.num_layers = args.lstm_num_layers
V = args.embed_num
D = args.embed_dim
C = args.class_num
self.embed = nn.Embedding(V, D, padding_idx=args.paddingId)
# pretrained embedding
if args.word_Embedding:
self.embed.weight.data.copy_(args.pretrained_weight)
# lstm
self.lstm = nn.LSTM(D, self.hidden_dim, dropout=args.dropout, num_layers=self.num_layers)
if args.init_weight:
print("Initing W .......")
# n = self.lstm.input_size * self.lstm
init.xavier_normal(self.lstm.all_weights[0][0], gain=np.sqrt(args.init_weight_value))
init.xavier_normal(self.lstm.all_weights[0][1], gain=np.sqrt(args.init_weight_value))
# linear
self.hidden2label = nn.Linear(self.hidden_dim, C)
# dropout
self.dropout = nn.Dropout(args.dropout)
self.dropout_embed = nn.Dropout(args.dropout_embed)
def forward(self, x):
embed = self.embed(x)
embed = self.dropout_embed(embed)
x = embed.view(len(x), embed.size(1), -1)
# lstm
lstm_out, _ = self.lstm(x)
# lstm_out, self.hidden = self.lstm(x, self.hidden)
lstm_out = torch.transpose(lstm_out, 0, 1)
lstm_out = torch.transpose(lstm_out, 1, 2)
# pooling
lstm_out = F.tanh(lstm_out)
lstm_out = F.max_pool1d(lstm_out, lstm_out.size(2)).squeeze(2)
lstm_out = F.tanh(lstm_out)
# linear
logit = self.hidden2label(lstm_out)
return logit
You can’t perform that action at this time.