一、理论
二、代码
TextRNN(tf2.0实现,主要使用其中的keras包)
run.py
model = MyModel(config)
model.build(input_shape=(None, sentence_len)) # 句子长度
代码中具体参数可参考:传送门
model.py
from tensorflow.keras.layers import Dense, Embedding, LSTM, Dropout, Flatten**
### model类
class MyModel(tf.keras.Model):
def __init__(self, config):
super(MyModel, self).__init__()
self.config = config
self.embedding = Embedding(self.vocab_size, self.embedding_dim,
input_length=self.sentence_len,
weights=[self.embedding_pretrained],trainable=False)
### LSTM层。
# units:LSTM隐藏层
# return_sequences:Ture返回全部step的hidden state值,False返回最后一个,
!当True时增加Flatten层,False去掉Flatten层。!
self.RNN = LSTM(units=self.hidden_size,return_sequences=True,activation='relu',)
### BiLSTM 双向LSTM层。
#self.biRNN = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True,
activation='relu',))
###
### 多层BiLSTM层
#self.biRNN = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True
activation='relu',))
#self.dropout = Dropout(self.dropout)
#self.biRNN2 = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True
activation='relu',))
#self.dropout = Dropout(self.dropout)
###
self.dropout = Dropout(self.dropout)
self.flatten = Flatten()
self.out_put = Dense(units=self..num_classes, activation='softmax')
def build(self, input_shape):
super(MyModel, self).build(input_shape)
def call(self, x):
x = self.embedding(x)
x = self.RNN(x)
x = self.dropout(x)
x = self.flatten(x)
x = self.out_put(x)
return x