Цель:
Чтобы можно было перейти от квадратичной к перекрестной энтропийной функции стоимости в части вычисления обратного распространения нейронной сети.
Проблема:
Взрыв градиента кросс-энтропийной функции стоимости, в то время как квадратичная функция стоимости функции, как и ожидалось. Я думаю, что я неправильно это реализую.
Мысли:
Может понадобиться изменить код в «Ошибка в обратных слоях»?
(пропущено обновление правильных весов и смещений для экономии места)
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