Оптимизация использования оперативной памяти при обучении модели обучения - PullRequest
0 голосов
/ 06 июня 2018

Я впервые работаю над созданием и обучением модели глубокого обучения.У меня не было никаких знаний о предмете до начала проекта, и поэтому мои знания ограничены даже сейчас.

Раньше я запускал модель на своем ноутбуке, но после реализации хорошо работавших OHE и SMOTE я просто не могзапустить его на моем собственном устройстве больше из-за MemoryError (8 ГБ ОЗУ).Поэтому в настоящее время я использую модель на 30 ГБ ОЗУ RAM, что позволяет мне делать гораздо больше, подумал я.

Кажется, в моем коде есть какие-то ужасные недостатки, и мне интересно, можно ли их решить.Одним из примеров является то, что при использовании pandas.concat в ОЗУ моей модели используются повышенные частоты от 3 ГБ до 11 ГБ, что выглядит очень экстремально, после чего я отбрасываю несколько столбцов с резким увеличением RAm до 19 ГБ, но фактически возвращается к 11 ГБ после завершения вычислений (в отличие от concat).Я также заставил себя прекратить использование SMOTE на данный момент только потому, что использование ОЗУ увеличилось бы слишком сильно.

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

Я думал о разделении кода на несколько частей (для предварительной обработки и обучения), но для этого мне нужно было бы хранить массивные наборы данных в рассоле, который может достигать только 4 ГБ.(поправьте меня если я ошибаюсь).Я также думал об использовании предварительно обученных моделей, но я действительно не понимал, как этот процесс работает и как использовать его в Python.

PS: Я бы тоже хотел вернуть свой SMOTE, если это возможно

Спасибо всем заранее!

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Давайте проанализируем шаги:

Шаг 1: OHE Для вашего OHE единственная зависимость между точками данных состоит в том, что должно быть ясно, какие категории существуют в целом.Таким образом, OHE можно разбить на два этапа, оба из которых не требуют, чтобы все точки данных находились в оперативной памяти.

Шаг 1.1: определение категорий Поток считывает ваши точки данных, собирая все категории.Нет необходимости сохранять прочитанные вами точки данных.

Шаг 1.2: преобразование данных После шага 1.1 каждая точка данных может быть независимо преобразована.Так что поток читать, конвертировать, поток писать.Вам всегда нужна только одна или несколько точек данных в памяти.

Шаг 1.3: выбор функции Может быть стоит взглянуть на выбор функций, чтобы уменьшить объем памяти и повысить производительность.Этот ответ утверждает, что это должно произойти до SMOTE.

Методы выбора признаков, основанные на энтропии, зависят от всех данных.В то время как вы, вероятно, также можете объединить что-то, что является потоком, один подход, который работал хорошо для меня в прошлом, это удаление функций, которые имеют только одна или две точки данных, поскольку эти функции определенно имеют низкую энтропию и, вероятно, мало помогают классификатору.Это можно сделать снова, как Шаг 1.1 и Шаг 1.2

Шаг 2: SMOTE Я недостаточно знаю SMOTE, чтобы дать ответ, но, возможно, проблема уже решена сама, если вы сделаете выбор функций.В любом случае сохраните полученные данные на диск, чтобы вам не нужно было повторно вычислять для каждого тренинга.

Шаг 3: тренировка Посмотрите, можно ли тренировку проводить партиями или в потоковом режиме (в основном онлайн) или простос меньшим количеством выборочных данных.

Что касается сохранения на диск: используйте формат, который можно легко передавать, например, csv или другой формат с возможностью разделения.Не используйте рассол для этого.

0 голосов
/ 06 июня 2018

Немного перпендикулярно вашему фактическому вопросу, если ваша высокая загрузка ОЗУ вызвана наличием всего набора данных в памяти для обучения, вы могли бы устранить такой объем памяти, считывая и сохраняя только один пакет за раз: читайте пакет, тренируйтесь наэтот пакет, читать следующий пакет и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...