Я хотел бы найти минимальное количество вложений с наименьшим количеством ненулевых элементов, чтобы ограничить количество ненулевых весов в модели.
Моя архитектура теперь:
def build_model(max_len, num_words, num_classes):
I = layers.Input(shape=(max_len, ), name='Input')
E = layers.Embedding(input_dim=num_words,
output_dim=num_classes,
embeddings_initializer='he_uniform',
name='Embeddings')(I)
P = layers.GlobalAvgPool1D(name='Pool')(E)
O = layers.Softmax(name='Softmax')(P)
return models.Model(inputs=[I], outputs=[O])
модель выглядит следующим образом:
Layer (type) Output Shape Param #
=================================================================
Input (InputLayer) (None, 271) 0
_________________________________________________________________
Embeddings (Embedding) (None, 271, 26) 1358786
_________________________________________________________________
Pool (GlobalAveragePooling1D (None, 26) 0
_________________________________________________________________
Softmax (Softmax) (None, 26) 0
=================================================================
Я пытаюсь обнулить некоторые веса после нескольких итераций, чтобы сохранить только самые большие из них
model = build_model(MAX_LEN, NUM_TOKENS, NUM_CLASSES)
model.summary()
model.compile(optimizers.Adam(lr=0.1), 'sparse_categorical_crossentropy', metrics=['accuracy'])
total_params = NUM_TOKENS * NUM_CLASSES
need_params = 200
num_iterations = 16
decay = (total_params / need_params) ** (1 / num_iterations)
for i in range(num_iterations):
wipe_out = int(total_params * (1 - 1 / decay ** (i + 1)))
model.fit(X, y, batch_size=512, epochs=i * 16, verbose=False)
weights = model.layers[1].get_weights()[0]
idx = np.argpartition(np.abs(weights), k, axis=None)
weights.flat[idx[:wipe_out]] = 0
model.layers[1].set_weights([weights])
, но при обучении модельобновляет эти нулевые веса до ненулевых значений.Есть ли способ ограничить обновление нулевых значений или какую-то маску, которая будет разрешать изменение только ненулевых значений (по значениям, а не по встраиваниям по строкам)?
Не могли бы вы помочь мне свстраивания, оптимизатор или регуляризатор для построения модели, содержащей не более 200 ненулевых элементов в матрице встраивания, которая будет иметь относительно высокую точность?
Проблема в том, что у меня есть список «необработанных названий должностей» и «категоризированных»рабочие роли ", я пытаюсь назначить каждому слову расстояние для каждой из категорий, чтобы затем сгруппировать их и выбрать категорию с наибольшим весом.Основная проблема заключается в минимизации количества ненулевых элементов в матрице встраивания