Files
neural-network/main.py
2020-05-24 18:47:27 +02:00

54 lines
1.8 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
import time
from n_network import N_Network, plot_decision_boundary
def load_planar_dataset(random_seed):
np.random.seed(random_seed)
m = 400 # number of examples
N = int(m / 2) # number of points per class
D = 2 # dimensionality
X = np.zeros((m,D)) # data matrix where each row is a single example
Y = np.zeros((m, 1), dtype='uint8') # labels vector (0 for red, 1 for blue)
a = 4 # maximum ray of the flower
for j in range(2):
ix = range(N * j, N * (j + 1))
t = np.linspace(j * 3.12, (j + 1) * 3.12, N) + np.random.randn(N) * 0.2 # theta
r = a * np.sin(4 * t) + np.random.randn(N) * 0.2 # radius
X[ix] = np.c_[r * np.sin(t), r * np.cos(t)]
Y[ix] = j
X = X.T
Y = Y.T
return X, Y
random_seed = 1
Xtrain, ytrain = load_planar_dataset(random_seed)
X = Xtrain.T
y = ytrain.T
print('X', X.shape, 'y', y.shape)
# Visualize the data:
plt.scatter(X[:, 0], X[:, 1], c=y.T[0], s=40, cmap=plt.cm.Spectral);
plt.title('Dataset')
plt.show();
#Define a four layer network
nu = [X.shape[1], 10, 7, 5, 1]
xg = [0, N_Network.relu, N_Network.relu, N_Network.relu, N_Network.sigmoid]
xgprime = [0, N_Network.relu_prime, N_Network.relu_prime, N_Network.relu_prime, N_Network.sigmoid_prime]
init_params = dict(m=X.shape[0], n=X.shape[1], n_units=nu, g=xg, optim='sgd',
gprime=xgprime, epochs=10000, alpha=0.075)
nd = N_Network(init_params)
nd.set_seed(random_seed)
costs = nd.train(X, y)
print("First cost: {0:.6f} final cost: {1:.6f}".format(costs[0], costs[-1]))
print("Number of units in each layer: ", nu)
nd.print_time()
nd.plot_costs()
pred = nd.valid(X, y)
indices = nd.mislabeled(y, pred)
# Plot decission boundary
plot_decision_boundary(nd, X, y, True, '4 Layers N_Network')