423 KiB
423 KiB
In [1]:
%matplotlib inline
# import necessary packages
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# ensure the same random numbers appear every time
np.random.seed(0)
# display images in notebook
%matplotlib inline
plt.rcParams['figure.figsize'] = (12,12)
# download MNIST dataset
digits = datasets.load_digits()
# define inputs and labels
inputs = digits.images
labels = digits.target
print("inputs = (n_inputs, pixel_width, pixel_height) = " + str(inputs.shape))
print("labels = (n_inputs) = " + str(labels.shape))
# flatten the image
# the value -1 means dimension is inferred from the remaining dimensions: 8x8 = 64
n_inputs = len(inputs)
inputs = inputs.reshape(n_inputs, -1)
print("X = (n_inputs, n_features) = " + str(inputs.shape))
# choose some random images to display
indices = np.arange(n_inputs)
random_indices = np.random.choice(indices, size=5)
for i, image in enumerate(digits.images[random_indices]):
plt.subplot(1, 5, i+1)
plt.axis('off')
plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
plt.title("Label: %d" % digits.target[random_indices[i]])
plt.show()inputs = (n_inputs, pixel_width, pixel_height) = (1797, 8, 8) labels = (n_inputs) = (1797,) X = (n_inputs, n_features) = (1797, 64)
In [2]:
from sklearn.model_selection import train_test_split
# one-liner from scikit-learn library
train_size = 0.8
test_size = 1 - train_size
X_train, X_test, Y_train, Y_test = train_test_split(inputs, labels, train_size=train_size,
test_size=test_size)
# equivalently in numpy
def train_test_split_numpy(inputs, labels, train_size, test_size):
n_inputs = len(inputs)
inputs_shuffled = inputs.copy()
labels_shuffled = labels.copy()
np.random.shuffle(inputs_shuffled)
np.random.shuffle(labels_shuffled)
train_end = int(n_inputs*train_size)
X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]
Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]
return X_train, X_test, Y_train, Y_test
#X_train, X_test, Y_train, Y_test = train_test_split_numpy(inputs, labels, train_size, test_size)
print("Number of training images: " + str(len(X_train)))
print("Number of test images: " + str(len(X_test)))Number of training images: 1437 Number of test images: 360
In [3]:
# building our neural network
n_inputs, n_features = X_train.shape
n_hidden_neurons = 50
n_categories = 10
# we make the weights normally distributed using numpy.random.randn
# weights and bias in the hidden layer
hidden_weights = np.random.randn(n_features, n_hidden_neurons)
hidden_bias = np.zeros(n_hidden_neurons) + 0.01
# weights and bias in the output layer
output_weights = np.random.randn(n_hidden_neurons, n_categories)
output_bias = np.zeros(n_categories) + 0.01In [4]:
# setup the feed-forward pass, subscript h = hidden layer
def sigmoid(x):
return 1/(1 + np.exp(-x))
def feed_forward(X):
# weighted sum of inputs to the hidden layer
z_h = np.matmul(X, hidden_weights) + hidden_bias
# activation in the hidden layer
a_h = sigmoid(z_h)
# weighted sum of inputs to the output layer
z_o = np.matmul(a_h, output_weights) + output_bias
# softmax output
# axis 0 holds each input and axis 1 the probabilities of each category
exp_term = np.exp(z_o)
probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
return probabilities
probabilities = feed_forward(X_train)
print("probabilities = (n_inputs, n_categories) = " + str(probabilities.shape))
print("probability that image 0 is in category 0,1,2,...,9 = \n" + str(probabilities[0]))
print("probabilities sum up to: " + str(probabilities[0].sum()))
print()
# we obtain a prediction by taking the class with the highest likelihood
def predict(X):
probabilities = feed_forward(X)
return np.argmax(probabilities, axis=1)
predictions = predict(X_train)
print("predictions = (n_inputs) = " + str(predictions.shape))
print("prediction for image 0: " + str(predictions[0]))
print("correct label for image 0: " + str(Y_train[0]))probabilities = (n_inputs, n_categories) = (1437, 10) probability that image 0 is in category 0,1,2,...,9 = [5.41511965e-04 2.17174962e-03 8.84355903e-03 1.44970586e-03 1.10378326e-04 5.08318298e-09 2.03256632e-04 1.92507116e-03 9.84443254e-01 3.11507992e-04] probabilities sum up to: 1.0 predictions = (n_inputs) = (1437,) prediction for image 0: 8 correct label for image 0: 6
In [5]:
# to categorical turns our integer vector into a onehot representation
from sklearn.metrics import accuracy_score
# one-hot in numpy
def to_categorical_numpy(integer_vector):
n_inputs = len(integer_vector)
n_categories = np.max(integer_vector) + 1
onehot_vector = np.zeros((n_inputs, n_categories))
onehot_vector[range(n_inputs), integer_vector] = 1
return onehot_vector
#Y_train_onehot, Y_test_onehot = to_categorical(Y_train), to_categorical(Y_test)
Y_train_onehot, Y_test_onehot = to_categorical_numpy(Y_train), to_categorical_numpy(Y_test)
def feed_forward_train(X):
# weighted sum of inputs to the hidden layer
z_h = np.matmul(X, hidden_weights) + hidden_bias
# activation in the hidden layer
a_h = sigmoid(z_h)
# weighted sum of inputs to the output layer
z_o = np.matmul(a_h, output_weights) + output_bias
# softmax output
# axis 0 holds each input and axis 1 the probabilities of each category
exp_term = np.exp(z_o)
probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
# for backpropagation need activations in hidden and output layers
return a_h, probabilities
def backpropagation(X, Y):
a_h, probabilities = feed_forward_train(X)
# error in the output layer
error_output = probabilities - Y
# error in the hidden layer
error_hidden = np.matmul(error_output, output_weights.T) * a_h * (1 - a_h)
# gradients for the output layer
output_weights_gradient = np.matmul(a_h.T, error_output)
output_bias_gradient = np.sum(error_output, axis=0)
# gradient for the hidden layer
hidden_weights_gradient = np.matmul(X.T, error_hidden)
hidden_bias_gradient = np.sum(error_hidden, axis=0)
return output_weights_gradient, output_bias_gradient, hidden_weights_gradient, hidden_bias_gradient
print("Old accuracy on training data: " + str(accuracy_score(predict(X_train), Y_train)))
eta = 0.01
lmbd = 0.01
for i in range(1000):
# calculate gradients
dWo, dBo, dWh, dBh = backpropagation(X_train, Y_train_onehot)
# regularization term gradients
dWo += lmbd * output_weights
dWh += lmbd * hidden_weights
# update weights and biases
output_weights -= eta * dWo
output_bias -= eta * dBo
hidden_weights -= eta * dWh
hidden_bias -= eta * dBh
print("New accuracy on training data: " + str(accuracy_score(predict(X_train), Y_train)))Old accuracy on training data: 0.1440501043841336
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
New accuracy on training data: 0.09951287404314545
In [6]:
class NeuralNetwork:
def __init__(
self,
X_data,
Y_data,
n_hidden_neurons=50,
n_categories=10,
epochs=10,
batch_size=100,
eta=0.1,
lmbd=0.0):
self.X_data_full = X_data
self.Y_data_full = Y_data
self.n_inputs = X_data.shape[0]
self.n_features = X_data.shape[1]
self.n_hidden_neurons = n_hidden_neurons
self.n_categories = n_categories
self.epochs = epochs
self.batch_size = batch_size
self.iterations = self.n_inputs // self.batch_size
self.eta = eta
self.lmbd = lmbd
self.create_biases_and_weights()
def create_biases_and_weights(self):
self.hidden_weights = np.random.randn(self.n_features, self.n_hidden_neurons)
self.hidden_bias = np.zeros(self.n_hidden_neurons) + 0.01
self.output_weights = np.random.randn(self.n_hidden_neurons, self.n_categories)
self.output_bias = np.zeros(self.n_categories) + 0.01
def feed_forward(self):
# feed-forward for training
self.z_h = np.matmul(self.X_data, self.hidden_weights) + self.hidden_bias
self.a_h = sigmoid(self.z_h)
self.z_o = np.matmul(self.a_h, self.output_weights) + self.output_bias
exp_term = np.exp(self.z_o)
self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
def feed_forward_out(self, X):
# feed-forward for output
z_h = np.matmul(X, self.hidden_weights) + self.hidden_bias
a_h = sigmoid(z_h)
z_o = np.matmul(a_h, self.output_weights) + self.output_bias
exp_term = np.exp(z_o)
probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
return probabilities
def backpropagation(self):
error_output = self.probabilities - self.Y_data
error_hidden = np.matmul(error_output, self.output_weights.T) * self.a_h * (1 - self.a_h)
self.output_weights_gradient = np.matmul(self.a_h.T, error_output)
self.output_bias_gradient = np.sum(error_output, axis=0)
self.hidden_weights_gradient = np.matmul(self.X_data.T, error_hidden)
self.hidden_bias_gradient = np.sum(error_hidden, axis=0)
if self.lmbd > 0.0:
self.output_weights_gradient += self.lmbd * self.output_weights
self.hidden_weights_gradient += self.lmbd * self.hidden_weights
self.output_weights -= self.eta * self.output_weights_gradient
self.output_bias -= self.eta * self.output_bias_gradient
self.hidden_weights -= self.eta * self.hidden_weights_gradient
self.hidden_bias -= self.eta * self.hidden_bias_gradient
def predict(self, X):
probabilities = self.feed_forward_out(X)
return np.argmax(probabilities, axis=1)
def predict_probabilities(self, X):
probabilities = self.feed_forward_out(X)
return probabilities
def train(self):
data_indices = np.arange(self.n_inputs)
for i in range(self.epochs):
for j in range(self.iterations):
# pick datapoints with replacement
chosen_datapoints = np.random.choice(
data_indices, size=self.batch_size, replace=False
)
# minibatch training data
self.X_data = self.X_data_full[chosen_datapoints]
self.Y_data = self.Y_data_full[chosen_datapoints]
self.feed_forward()
self.backpropagation()In [7]:
epochs = 100
batch_size = 100
dnn = NeuralNetwork(X_train, Y_train_onehot, eta=eta, lmbd=lmbd, epochs=epochs, batch_size=batch_size,
n_hidden_neurons=n_hidden_neurons, n_categories=n_categories)
dnn.train()
test_predict = dnn.predict(X_test)
# accuracy score from scikit library
print("Accuracy score on test set: ", accuracy_score(Y_test, test_predict))
# equivalent in numpy
def accuracy_score_numpy(Y_test, Y_pred):
return np.sum(Y_test == Y_pred) / len(Y_test)
#print("Accuracy score on test set: ", accuracy_score_numpy(Y_test, test_predict))Accuracy score on test set: 0.9444444444444444
In [8]:
eta_vals = np.logspace(-5, 1, 7)
lmbd_vals = np.logspace(-5, 1, 7)
# store the models for later use
DNN_numpy = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)
# grid search
for i, eta in enumerate(eta_vals):
for j, lmbd in enumerate(lmbd_vals):
dnn = NeuralNetwork(X_train, Y_train_onehot, eta=eta, lmbd=lmbd, epochs=epochs, batch_size=batch_size,
n_hidden_neurons=n_hidden_neurons, n_categories=n_categories)
dnn.train()
DNN_numpy[i][j] = dnn
test_predict = dnn.predict(X_test)
print("Learning rate = ", eta)
print("Lambda = ", lmbd)
print("Accuracy score on test set: ", accuracy_score(Y_test, test_predict))
print()Learning rate = 1e-05 Lambda = 1e-05 Accuracy score on test set: 0.11666666666666667
Learning rate = 1e-05 Lambda = 0.0001 Accuracy score on test set: 0.20833333333333334
Learning rate = 1e-05 Lambda = 0.001 Accuracy score on test set: 0.12222222222222222
Learning rate = 1e-05 Lambda = 0.01 Accuracy score on test set: 0.14722222222222223
Learning rate = 1e-05 Lambda = 0.1 Accuracy score on test set: 0.17777777777777778
Learning rate = 1e-05 Lambda = 1.0 Accuracy score on test set: 0.16111111111111112
Learning rate = 1e-05 Lambda = 10.0 Accuracy score on test set: 0.20277777777777778
Learning rate = 0.0001 Lambda = 1e-05 Accuracy score on test set: 0.5305555555555556
Learning rate = 0.0001 Lambda = 0.0001 Accuracy score on test set: 0.5944444444444444
Learning rate = 0.0001 Lambda = 0.001 Accuracy score on test set: 0.5888888888888889
Learning rate = 0.0001 Lambda = 0.01 Accuracy score on test set: 0.6111111111111112
Learning rate = 0.0001 Lambda = 0.1 Accuracy score on test set: 0.5222222222222223
Learning rate = 0.0001 Lambda = 1.0 Accuracy score on test set: 0.5555555555555556
Learning rate = 0.0001 Lambda = 10.0 Accuracy score on test set: 0.8055555555555556
Learning rate = 0.001 Lambda = 1e-05 Accuracy score on test set: 0.85
Learning rate = 0.001 Lambda = 0.0001 Accuracy score on test set: 0.85
Learning rate = 0.001 Lambda = 0.001 Accuracy score on test set: 0.875
Learning rate = 0.001 Lambda = 0.01 Accuracy score on test set: 0.8666666666666667
Learning rate = 0.001 Lambda = 0.1 Accuracy score on test set: 0.8638888888888889
Learning rate = 0.001 Lambda = 1.0 Accuracy score on test set: 0.9555555555555556
Learning rate = 0.001 Lambda = 10.0 Accuracy score on test set: 0.925
Learning rate = 0.01 Lambda = 1e-05 Accuracy score on test set: 0.9472222222222222
Learning rate = 0.01 Lambda = 0.0001 Accuracy score on test set: 0.9277777777777778
Learning rate = 0.01 Lambda = 0.001 Accuracy score on test set: 0.9472222222222222
Learning rate = 0.01 Lambda = 0.01 Accuracy score on test set: 0.9305555555555556
Learning rate = 0.01 Lambda = 0.1 Accuracy score on test set: 0.9555555555555556
Learning rate = 0.01 Lambda = 1.0 Accuracy score on test set: 0.7694444444444445
Learning rate = 0.01 Lambda = 10.0 Accuracy score on test set: 0.19166666666666668
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 1e-05 Accuracy score on test set: 0.10555555555555556
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 0.0001 Accuracy score on test set: 0.08611111111111111
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 0.001 Accuracy score on test set: 0.10555555555555556
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 0.01 Accuracy score on test set: 0.08888888888888889
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 0.1 Accuracy score on test set: 0.08611111111111111
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 1.0 Accuracy score on test set: 0.08888888888888889
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 0.1 Lambda = 10.0 Accuracy score on test set: 0.09166666666666666
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 1e-05 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 0.0001 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 0.001 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 0.01 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 0.1 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
Learning rate = 1.0 Lambda = 1.0 Accuracy score on test set: 0.10555555555555556
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 1.0 Lambda = 10.0 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 1e-05 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 0.0001 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 0.001 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 0.01 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 0.1 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 1.0 Accuracy score on test set: 0.07777777777777778
/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:43: RuntimeWarning: overflow encountered in exp exp_term = np.exp(self.z_o) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)
Learning rate = 10.0 Lambda = 10.0 Accuracy score on test set: 0.07777777777777778
In [9]:
# visual representation of grid search
# uses seaborn heatmap, you can also do this with matplotlib imshow
import seaborn as sns
sns.set()
train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
test_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
for i in range(len(eta_vals)):
for j in range(len(lmbd_vals)):
dnn = DNN_numpy[i][j]
train_pred = dnn.predict(X_train)
test_pred = dnn.predict(X_test)
train_accuracy[i][j] = accuracy_score(Y_train, train_pred)
test_accuracy[i][j] = accuracy_score(Y_test, test_pred)
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(train_accuracy, annot=True, ax=ax, cmap="viridis")
ax.set_title("Training Accuracy")
ax.set_ylabel("$\eta$")
ax.set_xlabel("$\lambda$")
plt.show()
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(test_accuracy, annot=True, ax=ax, cmap="viridis")
ax.set_title("Test Accuracy")
ax.set_ylabel("$\eta$")
ax.set_xlabel("$\lambda$")
plt.show()/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x)) /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_44857/953065564.py:4: RuntimeWarning: overflow encountered in exp return 1/(1 + np.exp(-x))
In [10]:
from sklearn.neural_network import MLPClassifier
# store models for later use
DNN_scikit = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)
for i, eta in enumerate(eta_vals):
for j, lmbd in enumerate(lmbd_vals):
dnn = MLPClassifier(hidden_layer_sizes=(n_hidden_neurons), activation='logistic',
alpha=lmbd, learning_rate_init=eta, max_iter=epochs)
dnn.fit(X_train, Y_train)
DNN_scikit[i][j] = dnn
print("Learning rate = ", eta)
print("Lambda = ", lmbd)
print("Accuracy score on test set: ", dnn.score(X_test, Y_test))
print()/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 1e-05 Accuracy score on test set: 0.18333333333333332
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 0.0001 Accuracy score on test set: 0.18611111111111112
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 0.001 Accuracy score on test set: 0.13055555555555556
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 0.01 Accuracy score on test set: 0.24444444444444444
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 0.1 Accuracy score on test set: 0.23333333333333334
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 1.0 Accuracy score on test set: 0.12777777777777777
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 1e-05 Lambda = 10.0 Accuracy score on test set: 0.1527777777777778
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 1e-05 Accuracy score on test set: 0.9111111111111111
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 0.0001 Accuracy score on test set: 0.8888888888888888
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 0.001 Accuracy score on test set: 0.8722222222222222
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 0.01 Accuracy score on test set: 0.8305555555555556
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 0.1 Accuracy score on test set: 0.8888888888888888
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 1.0 Accuracy score on test set: 0.8805555555555555
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.0001 Lambda = 10.0 Accuracy score on test set: 0.8944444444444445
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 1e-05 Accuracy score on test set: 0.975
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 0.0001 Accuracy score on test set: 0.9777777777777777
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 0.001 Accuracy score on test set: 0.9805555555555555
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 0.01 Accuracy score on test set: 0.9861111111111112
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 0.1 Accuracy score on test set: 0.9805555555555555
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 1.0 Accuracy score on test set: 0.9777777777777777
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.001 Lambda = 10.0 Accuracy score on test set: 0.9444444444444444
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
Learning rate = 0.01 Lambda = 1e-05 Accuracy score on test set: 0.9861111111111112
Learning rate = 0.01 Lambda = 0.0001 Accuracy score on test set: 0.9888888888888889
Learning rate = 0.01 Lambda = 0.001 Accuracy score on test set: 0.9888888888888889
Learning rate = 0.01 Lambda = 0.01 Accuracy score on test set: 0.9861111111111112
Learning rate = 0.01 Lambda = 0.1 Accuracy score on test set: 0.9888888888888889
Learning rate = 0.01 Lambda = 1.0 Accuracy score on test set: 0.9722222222222222 Learning rate = 0.01 Lambda = 10.0 Accuracy score on test set: 0.9527777777777777
Learning rate = 0.1 Lambda = 1e-05 Accuracy score on test set: 0.9027777777777778 Learning rate = 0.1 Lambda = 0.0001 Accuracy score on test set: 0.8583333333333333
Learning rate = 0.1 Lambda = 0.001 Accuracy score on test set: 0.8722222222222222 Learning rate = 0.1 Lambda = 0.01 Accuracy score on test set: 0.9055555555555556
Learning rate = 0.1 Lambda = 0.1 Accuracy score on test set: 0.8805555555555555 Learning rate = 0.1 Lambda = 1.0 Accuracy score on test set: 0.8722222222222222
Learning rate = 0.1 Lambda = 10.0 Accuracy score on test set: 0.8666666666666667 Learning rate = 1.0 Lambda = 1e-05 Accuracy score on test set: 0.08611111111111111 Learning rate = 1.0 Lambda = 0.0001 Accuracy score on test set: 0.10555555555555556
Learning rate = 1.0 Lambda = 0.001 Accuracy score on test set: 0.10555555555555556 Learning rate = 1.0 Lambda = 0.01 Accuracy score on test set: 0.17777777777777778
Learning rate = 1.0 Lambda = 0.1 Accuracy score on test set: 0.08333333333333333 Learning rate = 1.0 Lambda = 1.0 Accuracy score on test set: 0.08888888888888889 Learning rate = 1.0 Lambda = 10.0 Accuracy score on test set: 0.09444444444444444
Learning rate = 10.0 Lambda = 1e-05 Accuracy score on test set: 0.17222222222222222 Learning rate = 10.0 Lambda = 0.0001 Accuracy score on test set: 0.11666666666666667 Learning rate = 10.0 Lambda = 0.001 Accuracy score on test set: 0.10555555555555556 Learning rate = 10.0 Lambda = 0.01 Accuracy score on test set: 0.1388888888888889
Learning rate = 10.0 Lambda = 0.1 Accuracy score on test set: 0.11388888888888889
Learning rate = 10.0 Lambda = 1.0 Accuracy score on test set: 0.10555555555555556 Learning rate = 10.0 Lambda = 10.0 Accuracy score on test set: 0.09444444444444444
In [11]:
# optional
# visual representation of grid search
# uses seaborn heatmap, could probably do this in matplotlib
import seaborn as sns
sns.set()
train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
test_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
for i in range(len(eta_vals)):
for j in range(len(lmbd_vals)):
dnn = DNN_scikit[i][j]
train_pred = dnn.predict(X_train)
test_pred = dnn.predict(X_test)
train_accuracy[i][j] = accuracy_score(Y_train, train_pred)
test_accuracy[i][j] = accuracy_score(Y_test, test_pred)
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(train_accuracy, annot=True, ax=ax, cmap="viridis")
ax.set_title("Training Accuracy")
ax.set_ylabel("$\eta$")
ax.set_xlabel("$\lambda$")
plt.show()
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(test_accuracy, annot=True, ax=ax, cmap="viridis")
ax.set_title("Test Accuracy")
ax.set_ylabel("$\eta$")
ax.set_xlabel("$\lambda$")
plt.show()In [12]:
"""
Simple code that tests XOR, OR and AND gates with linear regression
"""
# import necessary packages
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
def sigmoid(x):
return 1/(1 + np.exp(-x))
def feed_forward(X):
# weighted sum of inputs to the hidden layer
z_h = np.matmul(X, hidden_weights) + hidden_bias
# activation in the hidden layer
a_h = sigmoid(z_h)
# weighted sum of inputs to the output layer
z_o = np.matmul(a_h, output_weights) + output_bias
# softmax output
# axis 0 holds each input and axis 1 the probabilities of each category
probabilities = sigmoid(z_o)
return probabilities
# we obtain a prediction by taking the class with the highest likelihood
def predict(X):
probabilities = feed_forward(X)
return np.argmax(probabilities, axis=1)
# ensure the same random numbers appear every time
np.random.seed(0)
# Design matrix
X = np.array([ [0, 0], [0, 1], [1, 0],[1, 1]],dtype=np.float64)
# The XOR gate
yXOR = np.array( [ 0, 1 ,1, 0])
# The OR gate
yOR = np.array( [ 0, 1 ,1, 1])
# The AND gate
yAND = np.array( [ 0, 0 ,0, 1])
# Defining the neural network
n_inputs, n_features = X.shape
n_hidden_neurons = 2
n_categories = 2
n_features = 2
# we make the weights normally distributed using numpy.random.randn
# weights and bias in the hidden layer
hidden_weights = np.random.randn(n_features, n_hidden_neurons)
hidden_bias = np.zeros(n_hidden_neurons) + 0.01
# weights and bias in the output layer
output_weights = np.random.randn(n_hidden_neurons, n_categories)
output_bias = np.zeros(n_categories) + 0.01
probabilities = feed_forward(X)
print(probabilities)
predictions = predict(X)
print(predictions)[[0.80625657 0.36420967] [0.90297441 0.30170017] [0.89823921 0.28566769] [0.93420126 0.25920793]] [0 0 0 0]
In [13]:
# import necessary packages
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
import seaborn as sns
# ensure the same random numbers appear every time
np.random.seed(0)
# Design matrix
X = np.array([ [0, 0], [0, 1], [1, 0],[1, 1]],dtype=np.float64)
# The XOR gate
yXOR = np.array( [ 0, 1 ,1, 0])
# The OR gate
yOR = np.array( [ 0, 1 ,1, 1])
# The AND gate
yAND = np.array( [ 0, 0 ,0, 1])
# Defining the neural network
n_inputs, n_features = X.shape
n_hidden_neurons = 2
n_categories = 2
n_features = 2
eta_vals = np.logspace(-5, 1, 7)
lmbd_vals = np.logspace(-5, 1, 7)
# store models for later use
DNN_scikit = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)
epochs = 100
for i, eta in enumerate(eta_vals):
for j, lmbd in enumerate(lmbd_vals):
dnn = MLPClassifier(hidden_layer_sizes=(n_hidden_neurons), activation='logistic',
alpha=lmbd, learning_rate_init=eta, max_iter=epochs)
dnn.fit(X, yXOR)
DNN_scikit[i][j] = dnn
print("Learning rate = ", eta)
print("Lambda = ", lmbd)
print("Accuracy score on data set: ", dnn.score(X, yXOR))
print()
sns.set()
test_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
for i in range(len(eta_vals)):
for j in range(len(lmbd_vals)):
dnn = DNN_scikit[i][j]
test_pred = dnn.predict(X)
test_accuracy[i][j] = accuracy_score(yXOR, test_pred)
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(test_accuracy, annot=True, ax=ax, cmap="viridis")
ax.set_title("Test Accuracy")
ax.set_ylabel("$\eta$")
ax.set_xlabel("$\lambda$")
plt.show()Learning rate = 1e-05 Lambda = 1e-05 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 0.0001 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 0.001 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 0.01 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 1e-05 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 1e-05 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 0.0001 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 0.001 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 0.01 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 0.0001 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 1e-05 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 0.0001 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 0.001 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 0.01 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 0.001 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 0.01 Lambda = 1e-05 Accuracy score on data set: 0.25 Learning rate = 0.01 Lambda = 0.0001 Accuracy score on data set: 0.75 Learning rate = 0.01 Lambda = 0.001 Accuracy score on data set: 0.5 Learning rate = 0.01 Lambda = 0.01 Accuracy score on data set: 0.75 Learning rate = 0.01 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 0.01 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 0.01 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 0.1 Lambda = 1e-05 Accuracy score on data set: 0.5 Learning rate = 0.1 Lambda = 0.0001 Accuracy score on data set: 0.5 Learning rate = 0.1 Lambda = 0.001 Accuracy score on data set: 1.0 Learning rate = 0.1 Lambda = 0.01 Accuracy score on data set: 1.0 Learning rate = 0.1 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 0.1 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 0.1 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 1.0 Lambda = 1e-05 Accuracy score on data set: 0.75 Learning rate = 1.0 Lambda = 0.0001 Accuracy score on data set: 0.75 Learning rate = 1.0 Lambda = 0.001 Accuracy score on data set: 0.75 Learning rate = 1.0 Lambda = 0.01 Accuracy score on data set: 0.5 Learning rate = 1.0 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 1.0 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 1.0 Lambda = 10.0 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 1e-05 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 0.0001 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 0.001 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 0.01 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 0.1 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 1.0 Accuracy score on data set: 0.5 Learning rate = 10.0 Lambda = 10.0 Accuracy score on data set: 0.5
/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( /Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn(
In [14]:
pip3 install tensorflow[0;36m Input [0;32mIn [14][0;36m[0m [0;31m pip3 install tensorflow[0m [0m ^[0m [0;31mSyntaxError[0m[0;31m:[0m invalid syntax
In [15]:
conda create -n tf tensorflow
conda activate tfIn [16]:
conda create -n tf-gpu tensorflow-gpu
conda activate tf-gpuIn [17]:
conda install kerasWarning:
Output truncated. This notebook contains too many cells to display efficiently.