Из-за ограничения памяти графического процессора сеть глубокого обучения не может обучаться, как 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};

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ