Есть много библиотек, но я нахожу эту очень гибкой. https://github.com/keras-team/keras-tuner
Просто установите с помощью пипса.
Ваша обновленная модель, не стесняйтесь выбирать диапазон поиска.
from tensorflow import keras
from tensorflow.keras import layers
from kerastuner.tuners import RandomSearch
def build_model(hp):
model = keras.Sequential()
model.add(layers.Embedding(input_dim=hp.Int('input_dim',
min_value=5000,
max_value=10000,
step = 1000),
output_dim=hp.Int('output_dim',
min_value=200,
max_value=800,
step = 100),
input_length = 400))
model.add(layers.Convolution1D(
filters=hp.Int('filters',
min_value=32,
max_value=512,
step = 32),
kernel_size=hp.Int('kernel_size',
min_value=3,
max_value=11,
step = 2),
padding='same',
activation='relu')),
model.add(layers.BatchNormalization())
model.add(layers.MaxPooling1D())
model.add(layers.Flatten())
model.add(layers.Dropout(0.4))
model.add(layers.Dense(units=hp.Int('units',
min_value=64,
max_value=256,
step=32),
activation='relu'))
model.add(layers.Dropout(0.4))
model.add(layers.Dense(y_train[0], activation='softmax'))
model.compile(
optimizer=keras.optimizers.Adam(
hp.Choice('learning_rate',
values=[1e-2, 1e-3, 1e-4])),
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
tuner = RandomSearch(
build_model,
objective='val_accuracy',
max_trials=5,
executions_per_trial=3,
directory='my_dir',
project_name='helloworld')
tuner.search_space_summary()
## The following lines are based on your model
tuner.search(x, y,
epochs=5,
validation_data=(val_x, val_y))
models = tuner.get_best_models(num_models=2)
Вы можете попробовать заменить слои Conv1D слоями LSTM и посмотреть, улучшите ли вы производительность.
LSTM(units = 512)
https://keras.io/layers/recurrent/
Если вы хотите извлечь Более значимые функции. Один из подходов, которые я нашел многообещающим, заключается в извлечении предварительно обученных функций BERT, а затем в обучении с использованием CNN / LSTM.
Отличный репозиторий для начала работы - https://github.com/UKPLab/sentence-transformers
Как только вы получите вложение предложения из BERT / X LNet, вы можете использовать эти функции для обучения другой CNN, аналогичной той, которую вы используете, за исключением, возможно, избавления от слоя внедрения, поскольку это дорого.