Spaces:
Sleeping
Sleeping
import numpy as np | |
from neural_network.opts import activation | |
def bp(X_train: np.array, y_train: np.array, wb: dict, args: dict): | |
epochs = args["epochs"] | |
func = activation[args["activation_func"]]["main"] | |
func_prime = activation[args["activation_func"]]["prime"] | |
w1, w2 = wb["W1"], wb["W2"] | |
b1, b2 = wb["b1"], wb["b2"] | |
lr = args["learning_rate"] | |
for e in range(epochs): | |
# forward prop | |
node1 = compute_node(X_train, w1, b1, func) | |
y_hat = compute_node(node1, w2, b2, func) | |
error = y_hat - y_train | |
# backprop | |
# right now this is just the weights, | |
# we should also update the biases | |
dw2 = np.dot( | |
node1.T, | |
error * func_prime(y_hat), | |
) | |
dw1 = np.dot( | |
X_train.T, | |
np.dot(error * func_prime(y_hat), w2.T) * func_prime(node1), | |
) | |
# update weights & biases | |
w1 -= lr * dw1 | |
w2 -= lr * dw2 | |
def compute_node(X, w, b, func): | |
return func(np.dot(X, w) + b) | |