Из-за ограничения памяти графического процессора сеть глубокого обучения не может обучаться, как 16 образцов в пакете.
Итак, могу ли я вычислить градиенты для партии из 8 образцов и обновить градиенты сети с помощью градиентов для 2 партий?
Если я вычислю градиенты сети глубокого обучения с помощью
[градиенты, состояние, потери] = dlfeval(@modelGradient,dlNet,xTrain,yTrain);
Итак, после двух партий я получаю градиенты1, градиенты2, состояние1, состояние2, потери1 и потери2.
По моему мнению, я думаю, что общие градиенты должны быть средним значением градиентов1 и градиентов2.
Но как я могу вычислить значения состояния? Это также среднее состояние1 и состояние2?
ОТВЕЧАТЬ
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
Да, конечно, просто суммируйте градиенты до тех пор, пока размер пакета не станет нужным, а затем обновите модель. Принцип точно такой же, как и при обучении модели на нескольких GPU (или CPU).
Обновление состояния зависит от состояния. В этом примере показано, как агрегировать состояние пакетной нормы. Здесь представляет интерес функция агрегатного состояния. Вместо использования gplus вы просто будете агрегировать свои «под»-итерации.
function state = aggregateState(state,factor) numrows = size(state,1); for j = 1:numrows isBatchNormalizationState = state.Parameter(j) =="TrainedMean"... && state.Parameter(j+1) =="TrainedVariance"... && state.Layer(j) == state.Layer(j+1); if isBatchNormalizationState meanVal = state.Value{j}; varVal = state.Value{j+1};
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ