Я построил модель LSTM для прогнозирования повторяющихся вопросов в официальном наборе данных Quora. Метки теста - 0 или 1. 1 означает, что пара вопросов дублируется. После построения модели с использованием model.fit
, я тестирую модель, используя model.predict
данные теста. Вывод представляет собой массив значений примерно так:
[ 0.00514298]
[ 0.15161049]
[ 0.27588326]
[ 0.00236167]
[ 1.80067325]
[ 0.01048524]
[ 1.43425131]
[ 1.99202418]
[ 0.54853892]
[ 0.02514757]
Я показываю только первые 10 значений в массиве. Я не понимаю, что означают эти значения и каков прогнозируемый ярлык для каждой пары вопросов?
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
источник
источник
Ответы:
Выход нейронной сети по умолчанию никогда не будет двоичным, т. Е. Нулями или единицами. Сеть работает с непрерывными значениями (не дискретными), чтобы более свободно оптимизировать потери в рамках градиентного спуска.
Посмотрите здесь на похожий вопрос, который также показывает некоторый код.
Без какой-либо настройки и масштабирования выход вашей сети, скорее всего, попадет где-то в диапазон вашего ввода, с точки зрения его номинального значения. В вашем случае это примерно от 0 до 2.
Теперь вы можете написать функцию, которая превращает ваши значения выше в 0 или 1, основываясь на некотором пороге. Например, масштабируйте значения, чтобы они находились в диапазоне [0, 1], затем, если значение ниже 0,5, верните 0, если выше 0,5, верните 1.
источник
Если это проблема классификации, вы должны изменить свою сеть, чтобы иметь 2 выходных нейрона.
Вы можете конвертировать метки в однозначно закодированные векторы, используя
Затем убедитесь, что ваш выходной слой имеет два нейрона с функцией активации softmax.
Это приведет к тому, что вы
model.predict(x_test_reshaped)
будете массивом списков. Где внутренний список - это вероятность того, что экземпляр принадлежит каждому классу. Это добавит до 1, и очевидно, что выбранная метка должна быть выходным нейроном с наибольшей вероятностью.Keras включил это в свою библиотеку, поэтому вам не нужно делать это сравнение самостоятельно. Вы можете получить метку класса напрямую с помощью
model.predict_classes(x_test_reshaped)
.источник
Прогнозы основаны на том, что вы вводите в качестве результатов обучения и функции активации.
Например, с входом 0-1 и функцией активации сигмоида для выхода с двоичной потерей кроссентропии вы получите вероятность 1. В зависимости от стоимости ошибочного решения в любом направлении вы можете затем решить, как вы разобраться с этими вероятностями (например, прогнозировать категорию «1», если вероятность составляет> 0,5 или, возможно, уже, когда она> 0,1).
источник