Source code for langml.baselines.clf.textcnn

# -*- coding: utf-8 -*-

from langml import TF_KERAS
if TF_KERAS:
    import tensorflow.keras as keras
    import tensorflow.keras.layers as L
else:
    import keras
    import keras.layers as L

from langml.baselines import BaselineModel, Parameters
from langml.tensor_typing import Models


[docs]class TextCNNClassifier(BaselineModel): def __init__(self, params: Parameters): self.params = params
[docs] def build_model(self) -> Models: x_in = L.Input(shape=(None, ), name='Input-Token') x = x_in x = L.Embedding(self.params.vocab_size, self.params.embedding_size, name='embedding')(x) convs = [] for kernel_size in [3, 4, 5]: conv = L.Conv1D(filters=self.params.filter_size, kernel_size=kernel_size, strides=1, padding='same', activation='relu')(x) conv = L.MaxPooling1D()(conv) conv = L.GlobalMaxPool1D()(conv) convs.append(conv) x = L.Concatenate()(convs) x = L.Dropout(0.2)(x) o = L.Dense(self.params.tag_size, name='tag', activation='softmax')(x) model = keras.Model(x_in, o) model.summary() model.compile(keras.optimizers.Adam(self.params.learning_rate), loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model