Що означає вихід моделі model.predict від Keras?


14

Я створив модель 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 значень у масиві. Я не розумію, що означають ці значення та що передбачена мітка для кожної пари питань?


1
Я думаю, у вас є проблеми у вашій мережі .. ймовірності повинні бути в масштабі 0-1 .. але у вас є 1,99!, Я думаю, у вас щось не так ..
Ghanem

Відповіді:


8

Вихід нейронної мережі за замовчуванням ніколи не буде двійковим - тобто нулями або одиницями. Мережа працює з безперервними значеннями (не дискретні), щоб вільніше оптимізувати втрати в рамках градієнтного спуску.

Подивіться тут на подібне запитання, яке також показує деякий код.

Без будь-якого виправлення та масштабування, вихід вашої мережі, ймовірно, впаде десь у діапазоні вашого вводу, з точки зору його номінальної вартості. У вашому випадку це здається приблизно між 0 і 2.

Тепер ви можете написати функцію, яка перетворює ваші значення вище в 0 або 1, виходячи з деякого порогу. Наприклад, масштабуйте значення, що знаходяться в діапазоні [0, 1], тоді, якщо значення нижче 0,5, поверніть 0, якщо вище 0,5, поверніть 1.


Дякую, я теж думав використовувати порогове значення для класифікації міток. Але яка повинна бути основа, на якій визначається порогове значення?
Dookoto_Sea

@Dookoto_Sea ви повинні вирішити це самостійно
Jérémy Blain

@Dookoto_Sea Зауважте, що якщо ваша етикетка дорівнює 0 або 1, ваше значення повинно бути в цьому діапазоні, маючи масштаби прогнозування значень [0, 2], інтригуючий, вам потрібно змінити вихід своєї моделі
Jérémy Blain

7

Якщо це проблема класифікації, слід змінити мережу, щоб вона мала 2 вихідних нейрона.

Ви можете перетворити мітки в однокольорові кодовані вектори за допомогою

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

Потім переконайтесь, що у вашому вихідному шарі є два нейрони з функцією активації softmax.

model.add(Dense(num_classes, activation='softmax'))

Це призведе model.predict(x_test_reshaped)до масиву списків. Де внутрішній список - це ймовірність примірника, що належить до кожного класу. Це додасть до 1 і, очевидно, вирішеною міткою повинен бути вихідний нейрон з найбільшою ймовірністю.

Керас включений до їх бібліотеки, тому вам не потрібно робити це порівняння самостійно. Ви можете отримати етикетку класу безпосередньо, скориставшись model.predict_classes(x_test_reshaped).


3
"Якщо це проблема класифікації, ви повинні змінити свою мережу, щоб вона мала два вихідних нейрона." .. Вибачте Джа, але він цього не повинен робити, він може робити це з одним нейроном і сигмоїдом замість функції softmax.
Ghanem

@Minion, обидва способи є по суті еквівалентними, порогове значення, яке в іншому випадку потрібно зробити з одним вихідним нейроном, неявно вбудовано в мережу. Таким чином забезпечуючи двійковий вихід.
JahKnows

1
Так, я коу .. Я прокоментував це лише тому, що він згадав: "повинен змінити вашу мережу, щоб було 2 вихідних нейрона". .. thanx
Ghanem

1

Прогнози ґрунтуються на тому, що ви подаєте в якості тренувальних результатів та функції активації.

Наприклад, із входом 0-1 та функцією активації сигмоїдів для виводу з бінарною втратою кросцентропії ви отримаєте ймовірність значення 1. Залежно від вартості неправильного рішення в будь-якому напрямку, ви зможете вирішити, як ви розглядайте ці ймовірності (наприклад, передбачте категорію "1", якщо ймовірність становить> 0,5 або, можливо, вже тоді, коли> 0,1).

З того, що ви описуєте, ви мали вхід 0-1 і, ймовірно, передбачали лінійну активацію для свого вихідного шару (можливо, із середньоквадратичною втратою помилки?). Це означає, що ви припустили проблему регресії, де вихід є безпосередньо передбачуваним числом (яке може бути будь-яким реальним числом в ). Я припускаю, що це не те, що ви задумали, і ви можете хотіти того, що Я згадував у першому абзаці замість цього.(,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.