Реализация выбора наиболее уверенного выхода с функциональным API Keras - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над проблемой классификации текста.Сейчас я пытаюсь улучшить результаты, используя несколько выходов из моделей, обученных на разных подмножествах набора данных, то есть используя «упаковку».Каждая модель состоит из комбинации сверточных и рекуррентных слоев и имеет вывод softmax с тремя значениями.

Недавно я попытался использовать функцию API Average ().Но он просто усредняет все результаты от лучших до худших.Другие варианты, такие как Maximum (), все еще не помогают достаточно, потому что, насколько я знаю, максимизация каждого значения портит эффект «softmax».

def MultiInputClassifier(input_length, input_num, class_num, classifiers):
inputs_list = []
outputs_list = []

for i in range(input_num):
    inputs = Input(shape=(input_length,), name='input_{}'.format(i))
    inputs_list.append(inputs)

    model_output = classifiers[i](inputs)
    outputs_list.append(model_output)

preds = Average()(outputs_list)
model = Model(inputs=inputs_list, outputs=preds, name='final_model')
model.compile(optimizer='nadam', loss='categorical_crossentropy', metrics=['accuracy'])
return model

Возможно, решением было бы выбрать наиболее уверенноговывод в каждом конкретном случае.Итак, есть ли способ выбрать весь выходной сигнал, найдя максимальное значение по всем осям?

Если у нас есть [0.2, 0.7, 0.1] и (0.3, 0.6, 0.1], мы выберем просто (0,2, 0,7, 0,1].

1 Ответ

0 голосов
/ 26 апреля 2019

при условии, что ваши выводы

output_1 = [0.2, 0.7, 0.1] 
output_2 = [0.3, 0.6, 0.1]

вы можете собрать их в массив:

outputs = np.array([output_1, output_2])

и затем выберите строку с максимальным значением

outputs[np.where(outputs == np.max(outputs))[0],:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...