remove temporary file
This commit is contained in:
parent
2fa4337ac4
commit
a8b67a2feb
101
lab2-tmp.py
101
lab2-tmp.py
@ -1,101 +0,0 @@
|
||||
from dataclasses import dataclass
|
||||
import numpy as np
|
||||
from typing import Literal
|
||||
|
||||
@dataclass
|
||||
class NeuralNetworkLayer:
|
||||
weights: np.array
|
||||
bias: np.array
|
||||
activation: Literal["relu", "sigmoid"]
|
||||
|
||||
@dataclass
|
||||
class NeuralNetwork:
|
||||
layers: list[NeuralNetworkLayer]
|
||||
|
||||
def init_network(architecture, seed=1):
|
||||
np.random.seed(seed)
|
||||
|
||||
layers = []
|
||||
for i in range(len(architecture) - 1):
|
||||
layer_input_size = architecture[i]["size"]
|
||||
layer_output_size = architecture[i+1]["size"]
|
||||
|
||||
layers.append(NeuralNetworkLayer(
|
||||
np.random.randn(layer_output_size, layer_input_size) * 0.01,
|
||||
np.random.randn(layer_output_size, 1) * 0.1,
|
||||
architecture[i+1]["activation"]
|
||||
))
|
||||
|
||||
return NeuralNetwork(layers)
|
||||
|
||||
def relu(Z):
|
||||
return np.maximum(0, Z)
|
||||
|
||||
def sigmoid(Z):
|
||||
return 1/(1+np.exp(-Z))
|
||||
|
||||
def single_layer_forward_propagation(A_prev, W_curr, b_curr, activation="relu"):
|
||||
Z_curr = np.dot(W_curr, A_prev) + b_curr
|
||||
|
||||
if activation == "relu":
|
||||
activation_func = relu
|
||||
elif activation == "sigmoid":
|
||||
activation_func = sigmoid
|
||||
else:
|
||||
raise Exception(f"Non-supported activation function: '{activation}'")
|
||||
|
||||
return activation_func(Z_curr), Z_curr
|
||||
|
||||
def get_cost_value(Y_hat, Y):
|
||||
# number of examples
|
||||
m = Y_hat.shape[1]
|
||||
# calculation of the cost according to the formula
|
||||
cost = -1 / m * (np.dot(Y, np.log(Y_hat).T) + np.dot(1 - Y, np.log(1 - Y_hat).T))
|
||||
return np.squeeze(cost)
|
||||
|
||||
def full_forward_propagation(X, network: NeuralNetwork):
|
||||
A_values = []
|
||||
Z_values = []
|
||||
|
||||
A_curr = X
|
||||
for layer in network.layers:
|
||||
A_prev = A_curr
|
||||
|
||||
W_curr = layer.weights
|
||||
b_curr = layer.bias
|
||||
A_curr, Z_curr = single_layer_forward_propagation(A_prev, W_curr, b_curr, layer.activation)
|
||||
|
||||
A_values.append(A_curr)
|
||||
Z_values.append(Z_curr)
|
||||
|
||||
return A_curr, A_values, Z_values
|
||||
|
||||
def train(X, Y, network: NeuralNetwork, epochs, learning_rate, verbose=False, callback=None):
|
||||
print(X)
|
||||
print(Y)
|
||||
|
||||
cost_history = []
|
||||
accuracy_history = []
|
||||
|
||||
for i in range(epochs):
|
||||
Y_hat, A_values, Z_values = full_forward_propagation(X, network)
|
||||
|
||||
return cost_history, accuracy_history
|
||||
|
||||
def main(architecture):
|
||||
network = init_network(architecture)
|
||||
|
||||
X_train = np.array([[0,0],[0,1],[1,0],[1,1]])
|
||||
Y_train = np.array([0,1,1,1])
|
||||
cost_history, accuracy_history = train(X_train.T, np.transpose(Y_train.reshape((Y_train.shape[0], 1))), network, 1000, 0.1)
|
||||
|
||||
|
||||
|
||||
main(architecture = [
|
||||
{"size": 2},
|
||||
{"size": 25, "activation": "relu"},
|
||||
{"size": 50, "activation": "relu"},
|
||||
{"size": 50, "activation": "relu"},
|
||||
{"size": 25, "activation": "relu"},
|
||||
{"size": 1, "activation": "sigmoid"}
|
||||
])
|
Loading…
Reference in New Issue
Block a user