Як працює параметр validation_split параметру функції Keras?


17

Розподіл валідації в функції Кераса Послідовна модель фіксується таким чином : https://keras.io/models/sequences/ :

validation_split: плаваю між 0 і 1. Фракція навчальних даних, які використовуватимуться як дані перевірки. Модель буде виділяти цю частину навчальних даних, не буде тренуватись на ній, а також оцінюватиме втрати та будь-які показники моделі на цих даних наприкінці кожної епохи. Дані перевірки вибираються з останніх зразків у наданих даних x та y перед перемішуванням.

Зверніть увагу на останній рядок:

Дані перевірки вибираються з останніх зразків у наданих даних x та y перед перемішуванням.

Чи означає це, що дані перевірки завжди фіксуються та беруться з нижньої частини основного набору даних?

Чи може бути здійснено випадковий вибір заданої частини даних з основного набору даних?

Відповіді:


17

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

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

Однак для деяких наборів даних отримання останніх кількох екземплярів не є корисним, особливо якщо набір даних перегрупується на основі класу. Тоді розподіл ваших занять буде скасовано. Таким чином, вам знадобиться якийсь випадковий спосіб витягти підмножину даних, щоб отримати збалансований розподіл класів у наборі для навчання та валідації. Для цього я завжди люблю використовувати функцію sklearn наступним чином

from sklearn.model_selection import train_test_split

# Split the data
x_train, x_valid, y_train, y_valid = train_test_split(data, labels, test_size=0.33, shuffle= True)

Це приємна проста у використанні функція, яка робить те, що ви хочете. Змінні dataта labelsє стандартними нутрийними матрицями, причому перший вимір є екземплярами.


1
Я не мав на увазі отримання різних тестових наборів після кожної епохи. Я запитував про отримання даних з кінця набору даних, оскільки багато даних можуть бути впорядковані відповідно до класу (як ви згадали). Я знаю про це, train_test_splitі тепер ви підтверджуєте, що це кращий метод, оскільки він випадково отримає дані тесту / перевірки з набору даних.
rnso

@rnso, на жаль, Керас не пропонує такий варіант. Я здогадуюсь, це насправді не в межах того, що вони хочуть запропонувати. Зробило б реалізацію трохи заплутаною наявність двох різних методів вводу з випадковими в імені.
JahKnows

Чи не ви змішали визначення валідації та тестових даних, використовуючи цей train_test_spli?
bagustris

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