def __init__(self, training, sequence_length=None, vocabulary_size=None,
train_embeddings=SequentialTextEmbeddingClassifier.TRAIN_EMBEDDINGS,
language_model=LANGUAGE_MODEL, rnn_type=RNN_TYPE, rnn_units=RNN_UNITS, bidirectional=BIDIRECTIONAL,
dropout=DROPOUT, learning_rate=LEARNING_RATE):
from keras.models import Sequential
from keras.layers import Bidirectional, Dense, Dropout, GRU, LSTM
from keras.optimizers import Adam
label_names, sequence_length, vocabulary_size = self.parameters_from_training(sequence_length, vocabulary_size,
training, language_model)
embedder = TextSequenceEmbedder(vocabulary_size, sequence_length, language_model)
model = Sequential()
model.add(self.embedding_layer(embedder, sequence_length, train_embeddings, mask_zero=True, name="embedding"))
rnn_class = {"lstm": LSTM, "gru": GRU}[rnn_type]
for i, units in enumerate(rnn_units, 1):
name = "rnn-%d" % i
return_sequences = i < len(rnn_units)
if bidirectional:
rnn = Bidirectional(rnn_class(units, return_sequences=return_sequences), name=name)
else:
rnn = rnn_class(units, return_sequences=return_sequences, name=name)
model.add(rnn)
model.add(Dropout(dropout, name="dropout-%d" % i))
model.add(Dense(len(label_names), activation="softmax", name="softmax"))
optimizer = Adam(lr=learning_rate)
model.compile(optimizer=optimizer, loss="sparse_categorical_crossentropy", metrics=["accuracy"])
self.rnn_units = rnn_units
self.bidirectional = bidirectional
self.dropout = dropout
super().__init__(model, embedder, label_names)
评论列表
文章目录