Модуль: Обратное распространение (Backpropagation)


Backward работает. Но неправильно

Backward работает. Но неправильно

В скрытом слое программа раньше использовала строку dz1 = da1. Она не вызывает ошибку Python и размеры массивов остаются правильными, но при отрицательных значениях z1 gradient check расходится с численным градиентом.

Исправьте только выражение справа от dz1 =. Нужно применить локальный backward ReLU ко всем элементам.

PyTorch и autograd использовать нельзя.



Примеры
№Входные данныеВыходные данные
1
2
2 1
1 -0.5
-2 3
-4.000000 0.000000 -2.000000 0.000000
-2.000000 0.000000
2
3
1 -1 2
-1 2 0.25
4 -3 2
0.000000 -3.000000 2.000000 -0.000000 3.000000 -2.000000 0.000000 -6.000000 4.000000
0.000000 -3.000000 2.000000

Вставьте недостающие фрагменты кода
Python
def hidden_backward(x, z1, da1):
    # В исходной версии здесь было: dz1 = da1
    # Исправьте только выражение справа. 
    dW1 = [[xi * g for g in dz1] for xi in x]
    db1 = dz1
    return dW1, db1

n = int(input())
x = list(map(float, input().split()))
z1 = list(map(float, input().split()))
da1 = list(map(float, input().split()))
dW1, db1 = hidden_backward(x, z1, da1)
print(" ".join(f"{v:.6f}" for row in dW1 for v in row))
print(" ".join(f"{v:.6f}" for v in db1))