Изменить функцию стоимости в обратном распространении - PullRequest
0 голосов
/ 03 ноября 2018
  • Цель: Чтобы можно было перейти от квадратичной к перекрестной энтропийной функции стоимости в части вычисления обратного распространения нейронной сети.

  • Проблема: Взрыв градиента кросс-энтропийной функции стоимости, в то время как квадратичная функция стоимости функции, как и ожидалось. Я думаю, что я неправильно это реализую.

  • Мысли: Может понадобиться изменить код в «Ошибка в обратных слоях»?

(пропущено обновление правильных весов и смещений для экономии места)

def back_prop(self):
    # Last layer error (Output)
    if self.costfunc == 1:
        # Using gradient of cross entropy costfunction for classification
        self.error[-1] = (self.active_z[-1] - self.target[np.newaxis,:].T) / sigmoid_derivative(self.active_z[-1])
    else:
        # Using gradient of Quadratic costfunction for regression
        self.error[-1] = (self.active_z[-1] - self.target[np.newaxis,:].T)

    # Error in backward layers (Input <-- Hidden)
    for i in range(self.hidden_layers-1,-1,-1):
        self.error[i]  = np.dot(self.error[i+1],self.weights[i+1].T) * sigmoid_derivative(self.active_z[i])

    # Calculate partial derivitives of costfunction and update left side
    delta_weight_left   = np.dot(self.X.T,self.error[0])
    delta_bias_left     = np.sum(self.error[0],axis=0)

    # Regulization and update of left side
    delta_weight_left   += self.reg_term * self.weights[0]
    delta_bias_left     += self.reg_term * self.bias[0] 
    self.weights[0]     -= self.learn_r * delta_weight_left
    self.bias[0]        -= self.learn_r * delta_bias_left
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...