Я реализую базовую нейронную сеть с одним скрытым слоем. Функция оценки сравнивает выходные данные моей модели (в частности, A2) с ожидаемыми значениями, но она терпит неудачу из-за несоответствия выходных данных на этапе прямого распространения. Кажется, проблема связана с инициализацией параметров или с тем, как выполняется прямое распространение, но я не могу изменить саму среду тестирования.
КОД:
- Функция инициализации параметров (initialize_parameters):
Код: Выделить всё
def initialize_parameters(n_x, n_h, n_y):
np.random.seed(2)
W1 = np.random.randn(n_h, n_x) * 0.01 # n_h=4, n_x=2
b1 = np.zeros((4, 1))
W2 = np.random.randn(n_y, n_h) * 0.01 # n_y=1, n_h=4
b2 = np.zeros((1, 1))
parameters = {"W1": W1, "b1": b1, "W2": W2, "b2": b2}
return parameters
- Функция прямого распространения (forward_propagation):
Код: Выделить всё
def forward_propagation(X, parameters):
W1 = parameters['W1']
b1 = parameters['b1']
W2 = parameters['W2']
b2 = parameters['b2']
Z1 = np.dot(W1, X) + b1
A1 = sigmoid(Z1)
Z2 = np.dot(W2, A1) + b2
A2 = sigmoid(Z2)
assert A2.shape == (1, X.shape[1])
cache = {"Z1": Z1, "A1": A1, "Z2": Z2, "A2": A2}
return A2, cache
Здесь форма A2 после прямого распространения равна ( 1, 3) (что кажется правильным, учитывая размер входных данных (2, 3)).
Однако выходные данные A2 не соответствуют ожидаемым значениям для тестового примера. Ожидаемый результат A2 должен быть следующим:
A2 = [[0.21292656 0.21274673 0.21295976]]
Но я получаю:
A2 = [[0.21442387 0.21436745 0.21442857]]
Среда тестирования:
- Функция оценки предварительно определена и сравнивает A2 с ожидаемыми значениями. Я не могу изменить функцию оценивания или тестовые примеры, представленные в курсе.
- Функция оценивания ожидает, что A2 будет точно соответствовать ожидаемому результату. Я пробовал различные случайные начальные числа (например, np.random.seed(42)), но результат все равно не совпадает.
- Убедился, что формы весовых матриц и векторов смещения правильные.
< li>Распечатал фигуры Z1, A1, Z2 и A2 на каждом этапе.
Использовал np.random.seed(42) и np.random.seed(2) при инициализации, но это не решило проблему.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ization-an