Вы можете просто вручную разделить набор данных на пакеты и обучать их один за одним:
for bn = 1:num_batches
inputs = <get batch bn inputs>;
targets = <get batch bn targets>;
net = train(net, inputs, targets);
end
Хотя размер партии должен быть больше 1, но в любом случае, что должно уменьшить Потребляемый памяти для обучения.
В случае trainlm
тренировка alogrithm, net.efficiency.memoryReduction
может помочь. Также вместо стандартного алгоритма trainlm
вы можете попробовать меньше потребляющих память, например trainrp
. Подробнее об алгоритмах обучения проверьте matlab documentation page. Я предположил, что вы используете соответствующий набор инструментов matlab для нейронных сетей.
Что касается обучения одному образцу за один раз, вы можете попробовать выполнить поиск в Google для алгоритма стохастического градиентного спуска. Но похоже, что это не набор алгоритмов обучения по умолчанию в панели инструментов.
На каждой итерации не записывалась бы над предыдущей «сетью» и над ней записывалась бы надпись? – Alper
@Avatar Первый вызов 'train' создаст начальные веса для' net' и подготовит партию, начиная с них. Но все последующие вызовы начнут тренироваться с весов, полученных после тренировки по предыдущим партиям. Поэтому обычно следует ожидать общего повышения точности сети. – akademi4eg
Что значит поезд на поезде? как 100 частей данных на обучение? Вместо поезда не следует использовать функцию adapt()? В моих экспериментах я наблюдаю, что, когда я итеративно тренирую данные, вес начинает принимать форму тренировочной части данных и переписывать в веса, которые уже прошли обучение раньше. Я не смог преодолеть эту проблему. Есть ли у вас какие-либо советы, связанные с этим? – Alper