Spaces:
Sleeping
Sleeping
from sklearn.model_selection import train_test_split | |
from typing import Callable | |
from nn.nn import NN | |
import pandas as pd | |
import numpy as np | |
def init_weights_biases(nn: NN) -> None: | |
bh = np.zeros((1, nn.hidden_size)) | |
bo = np.zeros((1, 1)) | |
wh = np.random.randn(nn.input_size, nn.hidden_size) * \ | |
np.sqrt(2 / nn.input_size) | |
wo = np.random.randn(nn.hidden_size, 1) * np.sqrt(2 / nn.hidden_size) | |
nn.set_bh(bh) | |
nn.set_bo(bo) | |
nn.set_wh(wh) | |
nn.set_wo(wo) | |
def train(nn: NN) -> dict: | |
init_weights_biases(nn=nn) | |
X_train, X_test, y_train, y_test = train_test_split( | |
nn.X, | |
nn.y, | |
test_size=nn.test_size, | |
) | |
for _ in range(nn.epochs): | |
# compute hidden output | |
hidden_output = compute_node( | |
data=X_train.to_numpy(), | |
weights=nn.wh, | |
biases=nn.bh, | |
func=nn.func, | |
) | |
# compute output layer | |
y_hat = compute_node( | |
data=hidden_output, | |
weights=nn.wo, | |
biases=nn.bo, | |
func=nn.func, | |
) | |
mse = mean_squared_error(y_train, y_hat) | |
return {"mse": mse} | |
def compute_node(data: np.array, weights: np.array, biases: np.array, func: Callable) -> np.array: | |
return func(np.dot(data, weights) + biases) | |
def mean_squared_error(y: np.array, y_hat: np.array) -> np.array: | |
return np.mean((y - y_hat) ** 2) | |