Недостаточно памяти для обработки команды матлаб

Обновлено: 06.07.2024

Я работаю над распознаванием активности, но получаю out of memory error после обработки одного видео.

Максимально возможный массив от 444 до 84 мб, что означает, что он не может обрабатывать более одного видео. Использование clear all; и close all; мы можем просто очистить память Matlab, но как мы очистим пространство виртуальной памяти (ram) без закрытия matlab?

Любая помощь приветствуется.

Если вам приходится делать все одновременно, там, вероятно, недостаточно памяти. Однако я предполагаю, что вы хотите последовательно их обрабатывать. Как упоминалось в этом вопросе, вам, возможно, придется прибегнуть к закрытию matlab и перезапуску.

Это может звучать ужасно, но с небольшой работой вы можете облегчить боль.

Вот шаги, которые вы можете предпринять:

  1. Убедитесь, что ваш прогресс записан на диске удобным способом, например, файл.mat со списком номеров, которые все еще необходимо обработать.
  2. Напишите функцию обертки. Эта функция должна:
    • Открыть список
    • Убедитесь, что следующий элемент из списка обработан
    • Если в списке осталось что-то, откройте новый сеанс Matlab, в котором эта функция вызывается, и закрывает существующий сеанс

Последняя часть может быть нелегко найти, но предположим, что функция, которую вы хотите вызвать, является magic(5) , тогда это будет примерно так:

Если время выполнения не является проблемой для вас, вы можете попробовать использовать matfile , который позволит вам получать/загружать/сохранять ваши данные на вашем жестком диске, а не в ОЗУ, но, как и следовало ожидать, процесс может быть медленным.

Еще один вариант, который я пробовал при работе над своей проблемой, - это преобразовать мои данные в single точность, это должно сократить потребление памяти наполовину. Для видео и изображений я считаю, что большая часть работы выполнима с использованием single а не double точности. Конечно, если бы вы могли, то дальнейшее использование их в uint8 уменьшит потребление на 8.

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

Я знаю, что это довольно распространенная проблема, но все решения, которые я пробовал, потерпели неудачу.

В основном я хочу обучить большую нейронную сеть, и я получаю ошибку "Недостаточно памяти".

Мой обучающий набор представляет собой матрицу 729 x 3456 двойников, а нейронная сеть - это так называемый "автокодер" со слоями этих размеров

В моем коде, в первую очередь, я делаю

где я использую функцию trainscg, потому что читаю, что она использует меньше памяти.
Затем я инициализирую весы и смещения в соответствии с некоторыми значениями (которые я уже вычислил), установите "transferFcn" и начните обучение.

Я попробовал очистить рабочее пространство как можно больше, и я также попытался поставить

перед тренировкой, так как я читаю, это может помочь. Во всяком случае, у меня все еще есть "Недостаточно памяти", даже если я увеличиваю значение до 60.

Вот вывод команды "memory", выполняемый, когда рабочая область содержит только набор тренировок и четыре числа (размер слоев)

Что еще я могу сделать для решения проблемы?

спросил(а) 2015-04-19T16:49:00+03:00 6 лет, 7 месяцев назад

checking memory size of data in Matlab

Вы можете проверить тип данных ваших данных и память, используемую этим типом данных. Попробуйте использовать тот, который требует минимальной памяти. Например: double принимает 8 байтов, а single - 4 байта для одного и того же номера. Вы можете использовать команду whos, чтобы проверить использование памяти.

checking memory and CPU usage

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

S-Function Builder утечка памяти
Здравствуйте! Недавно стал изучать матлаб в то числе мне больше требуется использовать Simulink при.

Вектор, утечка памяти, функция создания и выделение памяти
Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при.

Утечка памяти
Здравствуйте, прошу помощи в обнаружении проблемы.

Yair Altman. Accelerating MATLAB Performance.
1001 tips to speed up MATLAB programs. 2015
Глава 9:
Memory-Related Techniques

SSC, нет, не то. cla и cla reset работают одинаково, и в обоих случаях воруют память вот 2 кода, функция 1:
.
п.с. если вам не сложно, очень бы хотелось, чтобы вы тоже потестировали. возможно, просто у меня неудачная версия matlab стоит и надо переставить или в чем другом проблема? смущает, что кроме меня никто этим вопросом не задавался ) Запустил 1 пример на 2012b .
В диспетчере задач действительно память используемая MATLAB постепенно увеличивается.
Пока вразумительного ничего сказать не могу. Попробую завтра немного поизменять программу.

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

Добавлено через 4 часа 25 минут
Nick07, рекомендованную вами книгу перевел и прочитал, но в ней, к сожалению, нет ответа на поставленный мной вопрос в теме. там изложены общие положения устройства памяти и обмена памяти между приложением и диском, что известно из любого учебника по архитектуре вычислительных сетей, приведены функции matlab , дающие информацию о том, как проверять память (примерно тоже можно посмотреть и в диспетчере задач), даны общие рекомендации (не создавать излишних копий переменных, не делать слишком длинные массивы), решения чисто моей прикладной задачи (почему график берет все больше и больше памяти. возможно что-то я пропустил, если знаете, как воспользоваться книгой прошу подсказать. заранее спасибо.

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

Как я уже писал, первые запуски Вашей тестовой задачи показали, что по мере ряда запусков на построение графиков объем памяти, занимаемый MATLAB по данным "Диспетчера задач" увеличивается.
Запустив одну из своих задач я увидел примерно то же самое.
Однако процесс изменения размеров памяти навел меня на некоторые сомнения в получаемом результате.
На основании этого я проделал следующий эксперимент:
Перезагрузил MATLAB и не запуская никаких задач (кроме загруженного редактора m файлов), понаблюдал в
"Диспетчере задач" за изменением объема памяти занимаемой MATLAB в течении 20-30 мин.
Выяснилось следующее, объем памяти изменялся от 310 МБ до 281МБ. Тоесть MATLAB живет своей жизнью.
Вопрос к знатокам - может кто-нибудь знает, что MATLAB такое в фоне делает?

Исходя из полученных данных более внимательно и большее время понаблюдал за изменениями памяти
занимаемой MATLAB при выполнении Вашей тестовой задачи.
При работе Вашей задачи занимаемая память постепенно увеличивалась, а потом происходит сброс
объема до некоторого значения, и такие циклы многократно повторяются, причем нижняя граница при
сбросе остается примерно одинаковой.
Однако замечена следующая особенность, если задачу закрыть (нажав на крестик в прав.-верхнем углу), а затем снова запустить задачу для наблюдений, то при каждом последующем запуске нижняя граница сброса объема памяти смещается в большую сторону.
Память при завершении задачи полностью не высвобождается, clear all из командной строки не помогает.
Вопрос к знатокам - может кто-нибудь знает, какой командой можно высвободить память после работы GUI-задачи?
Minore, по поводу исходного вопроса, мне неизвестна структура Вашей настоящей задачи. Возможно Вы в ней многократно вызываете другие GUI-задачи и завершаете их, и это приводит к потерям памяти.
По представленному тесту можно сказать, что при его работе утечек памяти не наблюдается, но наблюдается утечка памяти по завершению его работы.

Ошибка «Недостаточно памяти для обработки команды» встречается на серверах Windows и возникает при неправильно установленном значении реестра, а также после сброса или переустановки.


Для ее решения Майкрософт рекомендует изменить значение в определенном разделе реестра. Если проблема сохраняется, нет другого выбора, кроме как выполнить восстановление системы.

Внесение изменений в системный реестр

В большинстве случаев устранить проблему с недостаточно выделенной памятью для обработки команды можно путем использования официального решения. Для его применения требуется доступ администратора. Нужно внести изменения в раздел. Если его нет, создадим вручную.

Примечание: Параметр «IRPStackSize» нужно поменять на том компьютере, к файлам которого мы обращаемся.

Поскольку будем вносить правки в системный реестр, рекомендуется создать резервную копию. Для этого разверните меню Файл, щелкните на Экспорт и выберите папку для сохранения копии.

Откройте Редактор реестра командой regedit из окна «Выполнить» (Win + R).

Перейдите по пути к разделу:

Найдите запись IRPStackSize. Если ее не существует, щелкните в правой части окна на пустое пространство, выберите Создать – Параметр DWORD (32 бита).


Установите имя нового параметра «IRPStackSize», щелкните правой кнопкой мыши на него и выберите «Изменить».


В поле значение установите большее число и нажмите на «OK». Значения находятся в пределах от 0x1 до 0xC. Они эквивалентны от 1 до 12 в десятичной системе исчисления.

После внесения требуемых изменений перезагрузите компьютер и проверьте, исправлена ли ошибка. Если она остается, увеличивайте значение до тех пор, пока не будет исправлена.

Переустановка драйвера видеокарты

Если ошибка возникает при запуске игры, возможно, что драйвер видеокарты поврежден или устарел. Для решения его нужно полностью удалить перед установкой нового, поэтому потребуется утилита DDU (Display Driver Uninstaller). Загрузите утилиту с официального сайта.

После установки перезапустите компьютер в безопасном режиме. Если используете Windows 10, откройте меню Пуск, кликните на кнопку Питания и, удерживая клавишу Shift, нажмите на Перезагрузку.


В среде восстановления перейдите по пути Поиск и устранение неисправностей – Дополнительные параметры – Параметры загрузки, затем нажмите на F4, чтобы загрузить систему в безопасном режиме.


Запустите DDU, укажите графический процессор и выберите первый вариант «Удалить и перезагрузить». Приложение автоматически удалит текущие драйвера, затем перезагрузит компьютер.


Запустите приложение GeForce Experience, откройте вкладку «Драйверы» и скачайте последнюю версию.

После обновления перезапустите ПК. Проверьте, исправлена ли ошибка. Если видите, что для обработки команды по-прежнему недостаточно ресурсов памяти перейдите к следующему способу.

Также обновить драйвер можно путем загрузки из сайта NVIDIA или AMD и последующего запуска загруженного файла.

Удаление файлов временной папки

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

Нажмите Win + R, чтобы вызвать окно «Выполнить», наберите %temp% и щелкните на «ОК».


Совместным нажатием Ctrl + A отметьте все записи, кликните на кнопку Удалить.


После перейдите на локальный диск C, откройте каталог Temp и также очистите все содержимое. Перезагрузите ПК и посмотрите, возникает ли ошибка, указывающую на недостаточную память при обработке команды.

Читайте также: