Ошибка в обучении нейронной сети обратного распространения с Matlab - PullRequest
0 голосов
/ 24 февраля 2019

Я обучаю нейронную сеть обратного распространения в Matlab с 5 различными входами и 1 выходом.Каждый из входов и выходов имеет 98000 точек данных.Таким образом, входная матрица 5x98000, а выходная матрица 1x98000.Я использую 1 скрытый слой с 8 нейронами.Функция активации для скрытого слоя - это LogSigmoid, а для выходного - tanSigmoid.

Пять входов: ток, напряжение, мощность, dV / dT (скорость изменения напряжения во времени) и время.Выход - состояние заряда (SOC).Проблема заключается в типе регрессии, где я использую входные данные для оценки выходного значения.

Однако обратное распространение не работает.Ошибка в тестировании застряла на уровне 10-15%.Я просто не могу получить его ниже желаемого значения.

Я прикрепляю фрагмент, где я реализую обратное распространение.Если кто-то может взглянуть на код и указать, где я ошибаюсь и какие изменения можно сделать, это будет высоко оценено

%% Start of Backward Propagation (From Output towards Input)

% Computing Regularization terms
% Regularization Implemented to reduce overfitting and influence of
% weights
% lambda is regularization parameter
% Deltas for Weights and Biases are initialized to random values outside the 
%  loop at the start

% size(DeltaWeightsCell{1,1}) = 8x5

% size(DeltaWeightsCell{1,2}) = 1x8

% size(DeltaBiasCell{1,1}) = 8x1

% size(DeltaBiasCell{1,2}) = 1x1


 L2RegH1 = lambda* DeltaWeightsCell{1,1};     % Regularization for Weights 
                                               % of Hidden Layer

 L2RegO = lambda* DeltaWeightsCell{1,2};      % Regularization for Weights 
                                              %  of Output Layer

 CellL2RegW = {L2RegH1 L2RegO};

 L2RegB1 = lambda*DeltaBiasCell{1,1};         % Regularization for Biases 
                                               %  of Hidden Layer

 L2RegBO = lambda* DeltaBiasCell{1,2};        % Regularization for Biases of 
                                              %  Output Layer

 CellL2RegB = {L2RegB1 L2RegBO};

  % Computing Gradients for Neurons
  %(Gradient provides information regarding magnitude and Direction of error 
  % for a neuron)

  % O = 1 (Number of Outputs)

  % (YOo_p-T(i)) is the error between Network Output and Target

  % ((1+YOo_p)*(1-YOo_p)) = Derivation of Activation Function at Output 

  % (i) =  1:MaximumIterations (implemented using for loop)

  % Gradient of the Output Layer Neuron
  for n= 1:O 
   GradYO(n) = (YOo_p-T(i))*((1+YOo_p)*(1-YOo_p)); % Gradient to be 
                                                     % backpropagated
   end

   % HN = 8 (Hidden layer Neurons)

   %  (YH1o_p(1,q))*(1-YH1o_p(1,q))  = = Derivation of Activation Function 
   %  at Output 

   % WeightsCell{1,2} = Vector of Weights between Output and Hidden layer 
    % (size = 1x8)

   % Gradient of the Hidden layer Neurons
   for q = 1:HN
   GradH1(1,q) = 
           (YH1o_p(1,q))*(1-YH1o_p(1,q))*(GradYO*WeightsCell{1,2}(1,q));
    end

   %    Computing Deltas
   %    (Deltas are computed corresponding to each of the weights in the 
    %     network)
   %    
   %    Deltas for Weights of Hidden layer 1
   %    Delta[x][y]= [x]:index of input ; [y]: index of Neuron
   %    
   % The five inputs are denoted by x1,x2,x3,x4,x5.
   % eta = learning Rate (taken 0.01)

   % For Weights Corresponding to First Input
     for v = 1:HN
      DeltaH11(v,1) = eta* GradH1(v)*x1(i);
     end

    % For Weights Corresponding to Second Input
    for v = 1:HN
     DeltaH12(v,1) = eta* GradH1(v)*x2(i);
     end

     % For Weights Corresponding to Third Input
     for v = 1:HN
      DeltaH13(v,1) = eta* GradH1(v)*x3(i);
      end

      % For Weights Corresponding to Fourth Input
      for v = 1:HN
      DeltaH14(v,1) = eta* GradH1(v)*x4(i);
      end

      % For  Weights Corresponding to Fifth Input
      for v = 1:HN
      DeltaH15(v,1) = eta* GradH1(v)*x5(i);
      end

     % Deltas for Weights of Hidden Layer
     DeltaWeightsCell{1,1} = [DeltaH11 DeltaH12 DeltaH13 DeltaH14 DeltaH15];

      % Deltas for Weights of Output Layer
      for aa = 1:HN
      DeltaWeightsCell{1,2}(aa) = eta*GradYO*YH1o_p(aa);
       end

      % Computing Biases

      % Deltas for Biases of Hidden Layer
      for bb= 1:HN
      DeltaBiasCell{1,1}(bb) = eta*GradH1(bb)*1.0;
      end

      % Delta for Bias of Output layer
      for dd= 1:O
      DeltaBiasCell{1,2}(dd)= eta*GradYO(dd)*1.0;
      end

       % Updating Weights and Biases

      WeightsCell{1,1} = WeightsCell{1,1} + DeltaWeightsCell{1,1} + 
                         CellL2RegW{1,1};

      WeightsCell{1,2} = WeightsCell{1,2} + DeltaWeightsCell{1,2} + 
                         CellL2RegW{1,2};

      BiasCell{1,1} = BiasCell{1,1} + DeltaBiasCell{1,1} + CellL2RegB{1,1};

      BiasCell{1,2} = BiasCell{1,2} + DeltaBiasCell{1,2} + CellL2RegB{1,2};

После обновлений весов и смещений цикл снова возвращается к началу ипродолжает выполнение до достижения максимального числа итераций.

Любые предложения и предложения, указывающие на ошибки и модификации, будут высоко оценены.

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