RELU Backpropagation

1

У меня возникают проблемы с реализацией backprop при использовании функции активации relu. Моя модель имеет два скрытых слоя с 10 узлами как в скрытых слоях, так и в одном узле выходного слоя (таким образом, 3 веса, 3 смещения). Моя модель работает иначе, чем для этой сломанной сломанной функции backward_prop. Однако функция работает с backprop с использованием сигмоидной функции активации (в виде комментариев в функции). Таким образом, я считаю, что я задираю редукцию.

Может ли кто-нибудь подтолкнуть меня в правильном направлении?

# The derivative of relu function is 1 if z > 0, and 0 if z <= 0
def relu_deriv(z):
    z[z > 0] = 1
    z[z <= 0] = 0
    return z

# Handles a single backward pass through the neural network
def backward_prop(X, y, c, p):
    """
    cache (c): includes activations (A) and linear transformations (Z)
    params (p): includes weights (W) and biases (b)
    """
    m = X.shape[1] # Number of training ex
    dZ3 = c['A3'] - y
    dW3 = 1/m * np.dot(dZ3,c['A2'].T)
    db3 = 1/m * np.sum(dZ3, keepdims=True, axis=1)
    dZ2 = np.dot(p['W3'].T, dZ3) * relu_deriv(c['A2']) # sigmoid: replace relu_deriv w/ (1-np.power(c['A2'], 2))
    dW2 = 1/m * np.dot(dZ2,c['A1'].T)
    db2 = 1/m * np.sum(dZ2, keepdims=True, axis=1)
    dZ1 = np.dot(p['W2'].T,dZ2) * relu_deriv(c['A1']) # sigmoid: replace relu_deriv w/ (1-np.power(c['A1'], 2))
    dW1 = 1/m * np.dot(dZ1,X.T)
    db1 = 1/m * np.sum(dZ1, keepdims=True, axis=1)

    grads = {"dW1":dW1,"db1":db1,"dW2":dW2,"db2":db2,"dW3":dW3,"db3":db3}
    return grads
Теги:
neural-network
gradient-descent
relu
backpropagation

1 ответ

0

Является ли ваша часть кода ошибкой или у вас есть проблема с обучением? Вы можете это прояснить?

Или в случае, если вы имеете дело с бинарной классификацией, можете ли вы попытаться сделать только свою функцию активации активации сигмоидом, а остальные - ReLU?

Пожалуйста, укажите особенности.

Изменить ответ:

Можете ли вы попробовать этот?

 def dReLU(x):
    return 1. * (x > 0)

Я имею в виду: https://gist.github.com/yusugomori/cf7bce19b8e16d57488a

  • 0
    Когда я использую relu в моей функции forward_prop и backward_prop, моя модель вообще не улучшается. Однако, если я использую сигмовидную активацию в моем forward_prop и моей функции backward_prop, то моя модель тренируется нормально. Таким образом, я считаю, что мой forward_prop работает нормально. Я использую бинарную классификацию. В моей модели 2 скрытых слоя используют relu, а выходной узел использует сигмоид.
  • 0
    Я отредактировал ответ для вас, пожалуйста, попробуйте, если это также не работает, это будет означать, что ваше обратное распространение имеет некоторую структурную проблему, когда проблема возникает только с ReLU. Тогда мы можем проверить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню