This notebook is inspired by Chapter 3 in Michael Nielsen's book Neural Networks and Deep Learning
- Chapter 3: Improving the Way Neural Networks Learn
The techniques we'll develop in this chapter include:- Cross-Entropy cost function
- Regularization methods
- L1
- L2
- Dropout
- Artificial expansion of the training data
- Weight Initialization
- A set of heuristics to help choose good hyper-parameters
- Several other techniques covered in less depth.
- Variations of Stochastic Gradient Descent (SGD)
- Other models of artificial neuron
The discussions are largely independent of one another, and so you may jump ahead if you wish.
import pandas as pd
import torch
import numpy as np
import random
import time, timeit
# @title
"""network2.py
~~~~~~~~~~~~~~
An improved version of network.py, implementing the stochastic
gradient descent learning algorithm for a feedforward neural network.
Improvements include the addition of the cross-entropy cost function,
regularization, and better initialization of network weights. Note
that I have focused on making the code simple, easily readable, and
easily modifiable. It is not optimized, and omits many desirable
features.
"""
#### Libraries
# Standard library
import json
import random
import sys
# Third-party libraries
import numpy as np
#### Define the quadratic and cross-entropy cost functions
class QuadraticCost(object):
@staticmethod
def fn(a, y):
"""Return the cost associated with an output ``a`` and desired output
``y``.
"""
return 0.5*np.linalg.norm(a-y)**2
@staticmethod
def delta(z, a, y):
"""Return the error delta from the output layer."""
return (a-y) * sigmoid_prime(z)
class CrossEntropyCost(object):
@staticmethod
def fn(a, y):
"""Return the cost associated with an output ``a`` and desired output
``y``. Note that np.nan_to_num is used to ensure numerical
stability. In particular, if both ``a`` and ``y`` have a 1.0
in the same slot, then the expression (1-y)*np.log(1-a)
returns nan. The np.nan_to_num ensures that that is converted
to the correct value (0.0).
"""
return np.sum(np.nan_to_num(-y*np.log(a)-(1-y)*np.log(1-a)))
@staticmethod
def delta(z, a, y):
"""Return the error delta from the output layer. Note that the
parameter ``z`` is not used by the method. It is included in
the method's parameters in order to make the interface
consistent with the delta method for other cost classes.
"""
return (a-y)
#### Main Network class
class Network(object):
def __init__(self, sizes, cost=CrossEntropyCost):
"""The list ``sizes`` contains the number of neurons in the respective
layers of the network. For example, if the list was [2, 3, 1]
then it would be a three-layer network, with the first layer
containing 2 neurons, the second layer 3 neurons, and the
third layer 1 neuron. The biases and weights for the network
are initialized randomly, using
``self.default_weight_initializer`` (see docstring for that
method).
"""
self.num_layers = len(sizes)
self.sizes = sizes
self.default_weight_initializer()
self.cost=cost
def default_weight_initializer(self):
"""Initialize each weight using a Gaussian distribution with mean 0
and standard deviation 1 over the square root of the number of
weights connecting to the same neuron. Initialize the biases
using a Gaussian distribution with mean 0 and standard
deviation 1.
Note that the first layer is assumed to be an input layer, and
by convention we won't set any biases for those neurons, since
biases are only ever used in computing the outputs from later
layers.
"""
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)/np.sqrt(x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def large_weight_initializer(self):
"""Initialize the weights using a Gaussian distribution with mean 0
and standard deviation 1. Initialize the biases using a
Gaussian distribution with mean 0 and standard deviation 1.
Note that the first layer is assumed to be an input layer, and
by convention we won't set any biases for those neurons, since
biases are only ever used in computing the outputs from later
layers.
This weight and bias initializer uses the same approach as in
Chapter 1, and is included for purposes of comparison. It
will usually be better to use the default weight initializer
instead.
"""
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def feedforward(self, a):
"""Return the output of the network if ``a`` is input."""
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a)+b)
return a
def SGD(self, training_data, epochs, mini_batch_size, eta,
lmbda = 0.0,
evaluation_data=None,
monitor_evaluation_cost=False,
monitor_evaluation_accuracy=False,
monitor_training_cost=False,
monitor_training_accuracy=False):
"""Train the neural network using mini-batch stochastic gradient
descent. The ``training_data`` is a list of tuples ``(x, y)``
representing the training inputs and the desired outputs. The
other non-optional parameters are self-explanatory, as is the
regularization parameter ``lmbda``. The method also accepts
``evaluation_data``, usually either the validation or test
data. We can monitor the cost and accuracy on either the
evaluation data or the training data, by setting the
appropriate flags. The method returns a tuple containing four
lists: the (per-epoch) costs on the evaluation data, the
accuracies on the evaluation data, the costs on the training
data, and the accuracies on the training data. All values are
evaluated at the end of each training epoch. So, for example,
if we train for 30 epochs, then the first element of the tuple
will be a 30-element list containing the cost on the
evaluation data at the end of each epoch. Note that the lists
are empty if the corresponding flag is not set.
"""
if evaluation_data: n_data = len(list(evaluation_data))
n = len(list(training_data))
evaluation_cost, evaluation_accuracy = [], []
training_cost, training_accuracy = [], []
for j in range(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(
mini_batch, eta, lmbda, len(training_data))
print("Epoch %s training complete" % j)
if monitor_training_cost:
cost = self.total_cost(training_data, lmbda)
training_cost.append(cost)
print("Cost on training data: {}".format(cost))
if monitor_training_accuracy:
accuracy = self.accuracy(training_data, convert=True)
training_accuracy.append(accuracy)
print("Accuracy on training data: {} / {}".format(
accuracy, n))
if monitor_evaluation_cost:
cost = self.total_cost(evaluation_data, lmbda, convert=True)
evaluation_cost.append(cost)
print("Cost on evaluation data: {}".format(cost))
if monitor_evaluation_accuracy:
accuracy = self.accuracy(evaluation_data)
evaluation_accuracy.append(accuracy)
print("Accuracy on evaluation data: {} / {}".format(
self.accuracy(evaluation_data), n_data))
return evaluation_cost, evaluation_accuracy, \
training_cost, training_accuracy
def update_mini_batch(self, mini_batch, eta, lmbda, n):
"""Update the network's weights and biases by applying gradient
descent using backpropagation to a single mini batch. The
``mini_batch`` is a list of tuples ``(x, y)``, ``eta`` is the
learning rate, ``lmbda`` is the regularization parameter, and
``n`` is the total size of the training data set.
"""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
for x, y in mini_batch:
delta_nabla_b, delta_nabla_w = self.backprop(x, y)
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
self.weights = [(1-eta*(lmbda/n))*w-(eta/len(mini_batch))*nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b-(eta/len(mini_batch))*nb
for b, nb in zip(self.biases, nabla_b)]
def backprop(self, x, y):
"""Return a tuple ``(nabla_b, nabla_w)`` representing the
gradient for the cost function C_x. ``nabla_b`` and
``nabla_w`` are layer-by-layer lists of numpy arrays, similar
to ``self.biases`` and ``self.weights``."""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# feedforward
activation = x
activations = [x] # list to store all the activations, layer by layer
zs = [] # list to store all the z vectors, layer by layer
for b, w in zip(self.biases, self.weights):
z = np.dot(w, activation)+b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# backward pass
delta = (self.cost).delta(zs[-1], activations[-1], y)
nabla_b[-1] = delta
nabla_w[-1] = np.dot(delta, activations[-2].transpose())
# Note that the variable l in the loop below is used a little
# differently to the notation in Chapter 2 of the book. Here,
# l = 1 means the last layer of neurons, l = 2 is the
# second-last layer, and so on. It's a renumbering of the
# scheme in the book, used here to take advantage of the fact
# that Python can use negative indices in lists.
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].transpose(), delta) * sp
nabla_b[-l] = delta
nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())
return (nabla_b, nabla_w)
def accuracy(self, data, convert=False):
"""Return the number of inputs in ``data`` for which the neural
network outputs the correct result. The neural network's
output is assumed to be the index of whichever neuron in the
final layer has the highest activation.
The flag ``convert`` should be set to False if the data set is
validation or test data (the usual case), and to True if the
data set is the training data. The need for this flag arises
due to differences in the way the results ``y`` are
represented in the different data sets. In particular, it
flags whether we need to convert between the different
representations. It may seem strange to use different
representations for the different data sets. Why not use the
same representation for all three data sets? It's done for
efficiency reasons -- the program usually evaluates the cost
on the training data and the accuracy on other data sets.
These are different types of computations, and using different
representations speeds things up. More details on the
representations can be found in
mnist_loader.load_data_wrapper.
"""
if convert:
results = [(np.argmax(self.feedforward(x)), np.argmax(y))
for (x, y) in data]
else:
results = [(np.argmax(self.feedforward(x)), y)
for (x, y) in data]
return sum(int(x == y) for (x, y) in results)
def total_cost(self, data, lmbda, convert=False):
"""Return the total cost for the data set ``data``. The flag
``convert`` should be set to False if the data set is the
training data (the usual case), and to True if the data set is
the validation or test data. See comments on the similar (but
reversed) convention for the ``accuracy`` method, above.
"""
cost = 0.0
for x, y in data:
a = self.feedforward(x)
if convert: y = vectorized_result(y)
cost += self.cost.fn(a, y)/len(data)
cost += 0.5*(lmbda/len(data))*sum(
np.linalg.norm(w)**2 for w in self.weights)
return cost
def save(self, filename):
"""Save the neural network to the file ``filename``."""
data = {"sizes": self.sizes,
"weights": [w.tolist() for w in self.weights],
"biases": [b.tolist() for b in self.biases],
"cost": str(self.cost.__name__)}
f = open(filename, "w")
json.dump(data, f)
f.close()
# @title
#### Loading a Network
def load(filename):
"""Load a neural network from the file ``filename``. Returns an
instance of Network.
"""
f = open(filename, "r")
data = json.load(f)
f.close()
cost = getattr(sys.modules[__name__], data["cost"])
net = Network(data["sizes"], cost=cost)
net.weights = [np.array(w) for w in data["weights"]]
net.biases = [np.array(b) for b in data["biases"]]
return net
#### Miscellaneous functions
def vectorized_result(j):
"""Return a 10-dimensional unit vector with a 1.0 in the j'th position
and zeroes elsewhere. This is used to convert a digit (0...9)
into a corresponding desired output from the neural network.
"""
e = np.zeros((10, 1))
e[j] = 1.0
return e
def sigmoid(z):
"""The sigmoid function."""
return 1.0/(1.0+np.exp(-z))
def sigmoid_prime(z):
"""Derivative of the sigmoid function."""
return sigmoid(z)*(1-sigmoid(z))
# @title
"""network2mat.py
~~~~~~~~~~~~~~
An improved version of network2.py, to perform fully matrix-based
backpropagation. This version avoids the loop over each training
example by using matrix operations on the entire mini-batch.
"""
#### Main Network class
class Network2mat(object):
def __init__(self, sizes, cost=CrossEntropyCost, reg='l2'):
self.num_layers = len(sizes)
self.sizes = sizes
self.default_weight_initializer()
self.cost = cost
self.reg = reg
def default_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)/np.sqrt(x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def large_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def feedforward(self, a):
"""Return the output of the network if ``a`` is input."""
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a)+b)
return a
def SGD(self, training_data, epochs, mini_batch_size, eta,
lmbda = 0.0,
evaluation_data=None,
monitor_evaluation_cost=False,
monitor_evaluation_accuracy=False,
monitor_training_cost=False,
monitor_training_accuracy=False):
if evaluation_data: n_data = len(list(evaluation_data))
n = len(list(training_data))
evaluation_cost, evaluation_accuracy = [], []
training_cost, training_accuracy = [], []
for j in range(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(
mini_batch, eta, lmbda, len(training_data))
print("Epoch %s training complete" % j)
if monitor_training_cost:
cost = self.total_cost(training_data, lmbda)
training_cost.append(cost)
print("Cost on training data: {}".format(cost))
if monitor_training_accuracy:
accuracy = self.accuracy(training_data, convert=True)
training_accuracy.append(accuracy)
print("Accuracy on training data: {} / {}".format(
accuracy, n))
if monitor_evaluation_cost:
cost = self.total_cost(evaluation_data, lmbda, convert=True)
evaluation_cost.append(cost)
print("Cost on evaluation data: {}".format(cost))
if monitor_evaluation_accuracy:
accuracy = self.accuracy(evaluation_data)
evaluation_accuracy.append(accuracy)
print("Accuracy on evaluation data: {} / {}".format(
self.accuracy(evaluation_data), n_data))
return evaluation_cost, evaluation_accuracy, \
training_cost, training_accuracy
def update_mini_batch(self, mini_batch, eta, lmbda, n):
"""Update the network's weights and biases by applying gradient descent
using backpropagation to a single mini-batch."""
# Convert the mini-batch into matrix form
X = np.column_stack([x for x, y in mini_batch])
Y = np.column_stack([y for x, y in mini_batch])
# Perform forward and backward passes
nabla_b, nabla_w = self.backprop_matrix(X, Y)
# Update weights and biases using gradient descent and L1 or L2 regularization
if self.reg == 'l2':
self.weights = [(1 - eta * (lmbda/n)) * w - (eta/len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
elif self.reg == 'l1':
self.weights = [w - (eta * (lmbda/n)) * np.sign(w) - (eta / len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b - (eta / len(mini_batch)) * nb
for b, nb in zip(self.biases, nabla_b)]
def backprop_matrix(self, X, Y):
"""Matrix-based backpropagation for a mini-batch."""
# Initialize gradients
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# Step 1: Forward pass
activation = X
activations = [X] # Store all activations layer by layer
zs = [] # Store all z vectors layer by layer
# Feedforward step through all layers
for b, w in zip(self.biases, self.weights):
z = np.dot(w, activation) + b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# Step 2: Backward pass
# Compute delta at the output layer
delta = self.cost.delta(zs[-1], activations[-1], Y)
# Gradients for the output layer
nabla_b[-1] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-1] = np.dot(delta, activations[-2].T)
# Backpropagate through previous layers
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].T, delta) * sp
nabla_b[-l] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-l] = np.dot(delta, activations[-l-1].T)
return (nabla_b, nabla_w)
def accuracy(self, data, convert=False):
if convert:
results = [(np.argmax(self.feedforward(x)), np.argmax(y))
for (x, y) in data]
else:
results = [(np.argmax(self.feedforward(x)), y)
for (x, y) in data]
return sum(int(x == y) for (x, y) in results)
def total_cost(self, data, lmbda, convert=False):
cost = 0.0
for x, y in data:
a = self.feedforward(x)
if convert: y = vectorized_result(y)
cost += self.cost.fn(a, y)/len(data)
if self.reg == 'l2':
cost += 0.5*(lmbda/len(data))*sum(np.linalg.norm(w)**2 for w in self.weights)
elif self.reg == 'l1':
cost += (lmbda/len(data))*sum(np.linalg.norm(w, ord=1) for w in self.weights)
return cost
def save(self, filename):
"""Save the neural network to the file ``filename``."""
data = {"sizes": self.sizes,
"weights": [w.tolist() for w in self.weights],
"biases": [b.tolist() for b in self.biases],
"cost": str(self.cost.__name__)}
f = open(filename, "w")
json.dump(data, f)
f.close()
# !pip install mnist
import mnist_loader
# Load data
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
test_data = list(test_data)
# Determine device
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"Using {device} device")
Using cpu device
%%time
# Initialize and train network
net = Network2mat([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
net.SGD(training_data, 30, 10, 0.5, evaluation_data=test_data, monitor_evaluation_accuracy=True)
Epoch 0 training complete Accuracy on evaluation data: 9183 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9265 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9364 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9413 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9470 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9458 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9498 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9476 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9513 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9496 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9500 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9517 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9482 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9503 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9532 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9525 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9560 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9541 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9515 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9540 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9536 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9547 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9507 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9530 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9546 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9538 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9551 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9528 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9544 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9550 / 10000 CPU times: user 1min 23s, sys: 23.9 s, total: 1min 46s Wall time: 1min 30s
([], [9183, 9265, 9364, 9413, 9470, 9458, 9498, 9476, 9513, 9496, 9500, 9517, 9482, 9503, 9532, 9525, 9560, 9541, 9515, 9540, 9536, 9547, 9507, 9530, 9546, 9538, 9551, 9528, 9544, 9550], [], [])
# %%time
# net = Network([784, 100, 10], cost=CrossEntropyCost)
# net.large_weight_initializer()
# net.SGD(training_data, 30, 10, 0.5, evaluation_data=test_data, monitor_evaluation_accuracy=True)
Baseline Backprop (n_hidden = 100): 96.51% Accuracy¶
%%time
net = Network2mat([784, 100, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
net.SGD(training_data, 30, 10, 0.5, evaluation_data=test_data, monitor_evaluation_accuracy=True)
Epoch 0 training complete Accuracy on evaluation data: 9179 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9435 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9474 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9555 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9543 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9589 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9588 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9614 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9627 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9642 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9633 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9655 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9654 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9652 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9626 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9650 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9655 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9654 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9681 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9666 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9645 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9661 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9665 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9678 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9667 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9675 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9669 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9674 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9674 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9679 / 10000 CPU times: user 3min 34s, sys: 2min 4s, total: 5min 38s Wall time: 3min 33s
([], [9179, 9435, 9474, 9555, 9543, 9589, 9588, 9614, 9627, 9642, 9633, 9655, 9654, 9652, 9626, 9650, 9655, 9654, 9681, 9666, 9645, 9661, 9665, 9678, 9667, 9675, 9669, 9674, 9674, 9679], [], [])
Fully Matrix-Based Backprop (n_hidden = 100): 96.79% Accuracy¶
Overfitting¶
The Nobel prizewinning physicist Enrico Fermi was once asked his opinion of a mathematical model some colleagues had proposed as the solution to an important unsolved physics problem. The model gave excellent agreement with experiment, but Fermi was skeptical. He asked how many free parameters could be set in the model. "Four" was the answer. Fermi replied**[1]**: "I remember my friend Johnny von Neumann used to say, with four parameters I can fit an elephant, and with five I can make him wiggle his trunk."
References:
- The quote comes from a charming article by Freeman Dyson, who is one of the people who proposed the flawed model. A four-parameter elephant may be found here.
"""
Author: Piotr A. Zolnierczuk (zolnierczukp at ornl dot gov)
URL: https://www.johndcook.com/blog/2011/06/21/how-to-fit-an-elephant/
Based on a paper by:
Drawing an elephant with four complex parameters
Jurgen Mayer, Khaled Khairy, and Jonathon Howard,
Am. J. Phys. 78, 648 (2010), DOI:10.1119/1.3254017
"""
import numpy as np
import pylab
# elephant parameters
p1, p2, p3, p4 = (50 - 30j, 18 + 8j, 12 - 10j, -14 - 60j )
p5 = 40 + 20j # eyepiece
def fourier(t, C):
f = np.zeros(t.shape)
A, B = C.real, C.imag
for k in range(len(C)):
f = f + A[k]*np.cos(k*t) + B[k]*np.sin(k*t)
return f
def elephant(t, p1, p2, p3, p4, p5):
npar = 6
Cx = np.zeros((npar,), dtype='complex')
Cy = np.zeros((npar,), dtype='complex')
Cx[1] = p1.real*1j
Cx[2] = p2.real*1j
Cx[3] = p3.real
Cx[5] = p4.real
Cy[1] = p4.imag + p1.imag*1j
Cy[2] = p2.imag*1j
Cy[3] = p3.imag*1j
x = np.append(fourier(t,Cx), [-p5.imag])
y = np.append(fourier(t,Cy), [p5.imag])
return x,y
x, y = elephant(np.linspace(0,2*np.pi,1000), p1, p2, p3, p4, p5)
pylab.plot(y,-x,'.')
pylab.show()
The point, of course, is that models with a large number of free parameters can describe an amazingly wide range of phenomena. Even if such a model agrees well with the available data, that doesn't make it a good model. It may just mean there's enough freedom in the model that it can describe almost any data set of the given size, without capturing any genuine insights into the underlying phenomenon. When that happens the model will work well for the existing data, but will fail to generalize to new situations. The true test of a model is its ability to make predictions in situations it hasn't been exposed to before.
Fermi and von Neumann were suspicious of models with four parameters. Our 30 hidden neuron network for classifying MNIST digits has nearly 24,000 parameters! That's a lot of parameters. Our 100 hidden neuron network has nearly 80,000 parameters, and state-of-the-art deep neural nets sometimes contain millions or even billions of parameters. Should we trust the results?
Let's sharpen this problem up by constructing a situation where our network does a bad job generalizing to new situations. We'll use our 30 hidden neuron network, with its 23,860 parameters. But we won't train the network using all 50,000 MNIST training images. Instead, we'll use just the first 1,000 training images. Using that restricted set will make the problem with generalization much more evident. We'll train in a similar way to before, using the cross-entropy cost function, with a learning rate of η=0.5 and a mini-batch size of 10. However, we'll train for 400 epochs, a somewhat larger number than before, because we're not using as many training examples. Let's use Network2mat to look at the way the cost function changes:
%%time
net = Network2mat([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
net.SGD(training_data[:1000], 400, 10, 0.5, evaluation_data=test_data, monitor_evaluation_accuracy=True, monitor_training_cost=True)
Epoch 0 training complete Cost on training data: 2.1334873081011976 Accuracy on evaluation data: 5362 / 10000 Epoch 1 training complete Cost on training data: 1.6117154896081094 Accuracy on evaluation data: 6508 / 10000 Epoch 2 training complete Cost on training data: 1.3435858874341642 Accuracy on evaluation data: 6996 / 10000 Epoch 3 training complete Cost on training data: 1.118955170706648 Accuracy on evaluation data: 7367 / 10000 Epoch 4 training complete Cost on training data: 0.9901307112582952 Accuracy on evaluation data: 7592 / 10000 Epoch 5 training complete Cost on training data: 0.8519259734137855 Accuracy on evaluation data: 7708 / 10000 Epoch 6 training complete Cost on training data: 0.7960956201359782 Accuracy on evaluation data: 7752 / 10000 Epoch 7 training complete Cost on training data: 0.6720702851986642 Accuracy on evaluation data: 7931 / 10000 Epoch 8 training complete Cost on training data: 0.5998755333945173 Accuracy on evaluation data: 8037 / 10000 Epoch 9 training complete Cost on training data: 0.5532262347451836 Accuracy on evaluation data: 8080 / 10000 Epoch 10 training complete Cost on training data: 0.48301226958062626 Accuracy on evaluation data: 8136 / 10000 Epoch 11 training complete Cost on training data: 0.43713906935077373 Accuracy on evaluation data: 8149 / 10000 Epoch 12 training complete Cost on training data: 0.4054099079755518 Accuracy on evaluation data: 8160 / 10000 Epoch 13 training complete Cost on training data: 0.37177860867561674 Accuracy on evaluation data: 8255 / 10000 Epoch 14 training complete Cost on training data: 0.3347236482029461 Accuracy on evaluation data: 8258 / 10000 Epoch 15 training complete Cost on training data: 0.3071926589220765 Accuracy on evaluation data: 8267 / 10000 Epoch 16 training complete Cost on training data: 0.27895724476902123 Accuracy on evaluation data: 8277 / 10000 Epoch 17 training complete Cost on training data: 0.2652053196232567 Accuracy on evaluation data: 8281 / 10000 Epoch 18 training complete Cost on training data: 0.24971868688894489 Accuracy on evaluation data: 8276 / 10000 Epoch 19 training complete Cost on training data: 0.22578091792710658 Accuracy on evaluation data: 8293 / 10000 Epoch 20 training complete Cost on training data: 0.21674447452601472 Accuracy on evaluation data: 8319 / 10000 Epoch 21 training complete Cost on training data: 0.19696616273484055 Accuracy on evaluation data: 8324 / 10000 Epoch 22 training complete Cost on training data: 0.18367647407713247 Accuracy on evaluation data: 8324 / 10000 Epoch 23 training complete Cost on training data: 0.1697081997249623 Accuracy on evaluation data: 8370 / 10000 Epoch 24 training complete Cost on training data: 0.15694410574943818 Accuracy on evaluation data: 8351 / 10000 Epoch 25 training complete Cost on training data: 0.14931148314777995 Accuracy on evaluation data: 8344 / 10000 Epoch 26 training complete Cost on training data: 0.1376326060327698 Accuracy on evaluation data: 8345 / 10000 Epoch 27 training complete Cost on training data: 0.12822834529691673 Accuracy on evaluation data: 8352 / 10000 Epoch 28 training complete Cost on training data: 0.12334225702609936 Accuracy on evaluation data: 8348 / 10000 Epoch 29 training complete Cost on training data: 0.11344356383141305 Accuracy on evaluation data: 8374 / 10000 Epoch 30 training complete Cost on training data: 0.10874642376376649 Accuracy on evaluation data: 8386 / 10000 Epoch 31 training complete Cost on training data: 0.10232741359823394 Accuracy on evaluation data: 8360 / 10000 Epoch 32 training complete Cost on training data: 0.09800310442716333 Accuracy on evaluation data: 8361 / 10000 Epoch 33 training complete Cost on training data: 0.09268095912167088 Accuracy on evaluation data: 8381 / 10000 Epoch 34 training complete Cost on training data: 0.08985211317214391 Accuracy on evaluation data: 8365 / 10000 Epoch 35 training complete Cost on training data: 0.08529139016670571 Accuracy on evaluation data: 8376 / 10000 Epoch 36 training complete Cost on training data: 0.08354889001668293 Accuracy on evaluation data: 8390 / 10000 Epoch 37 training complete Cost on training data: 0.08003507351151332 Accuracy on evaluation data: 8399 / 10000 Epoch 38 training complete Cost on training data: 0.07650548159073085 Accuracy on evaluation data: 8389 / 10000 Epoch 39 training complete Cost on training data: 0.0735963249949398 Accuracy on evaluation data: 8398 / 10000 Epoch 40 training complete Cost on training data: 0.07054144890418132 Accuracy on evaluation data: 8382 / 10000 Epoch 41 training complete Cost on training data: 0.06887572297685532 Accuracy on evaluation data: 8400 / 10000 Epoch 42 training complete Cost on training data: 0.0663065350160309 Accuracy on evaluation data: 8394 / 10000 Epoch 43 training complete Cost on training data: 0.06408076105973032 Accuracy on evaluation data: 8398 / 10000 Epoch 44 training complete Cost on training data: 0.061858574556072424 Accuracy on evaluation data: 8388 / 10000 Epoch 45 training complete Cost on training data: 0.06058942537298044 Accuracy on evaluation data: 8392 / 10000 Epoch 46 training complete Cost on training data: 0.05873446242587899 Accuracy on evaluation data: 8400 / 10000 Epoch 47 training complete Cost on training data: 0.05593898642402481 Accuracy on evaluation data: 8396 / 10000 Epoch 48 training complete Cost on training data: 0.055205914338667846 Accuracy on evaluation data: 8410 / 10000 Epoch 49 training complete Cost on training data: 0.05313535099205961 Accuracy on evaluation data: 8402 / 10000 Epoch 50 training complete Cost on training data: 0.051116209408344354 Accuracy on evaluation data: 8398 / 10000 Epoch 51 training complete Cost on training data: 0.049505308014994136 Accuracy on evaluation data: 8405 / 10000 Epoch 52 training complete Cost on training data: 0.04786572144766827 Accuracy on evaluation data: 8403 / 10000 Epoch 53 training complete Cost on training data: 0.04640639733502174 Accuracy on evaluation data: 8399 / 10000 Epoch 54 training complete Cost on training data: 0.045380854077187775 Accuracy on evaluation data: 8410 / 10000 Epoch 55 training complete Cost on training data: 0.04412889015222005 Accuracy on evaluation data: 8401 / 10000 Epoch 56 training complete Cost on training data: 0.04290577626118409 Accuracy on evaluation data: 8403 / 10000 Epoch 57 training complete Cost on training data: 0.04194561198588216 Accuracy on evaluation data: 8405 / 10000 Epoch 58 training complete Cost on training data: 0.04079484197387679 Accuracy on evaluation data: 8410 / 10000 Epoch 59 training complete Cost on training data: 0.039718523191149574 Accuracy on evaluation data: 8416 / 10000 Epoch 60 training complete Cost on training data: 0.038891299256091943 Accuracy on evaluation data: 8408 / 10000 Epoch 61 training complete Cost on training data: 0.03801167501946484 Accuracy on evaluation data: 8411 / 10000 Epoch 62 training complete Cost on training data: 0.03700659233294767 Accuracy on evaluation data: 8410 / 10000 Epoch 63 training complete Cost on training data: 0.03619008401446996 Accuracy on evaluation data: 8413 / 10000 Epoch 64 training complete Cost on training data: 0.0354101234112211 Accuracy on evaluation data: 8404 / 10000 Epoch 65 training complete Cost on training data: 0.03446877877563418 Accuracy on evaluation data: 8417 / 10000 Epoch 66 training complete Cost on training data: 0.03371575942835778 Accuracy on evaluation data: 8418 / 10000 Epoch 67 training complete Cost on training data: 0.032671918060232265 Accuracy on evaluation data: 8417 / 10000 Epoch 68 training complete Cost on training data: 0.03191790922420547 Accuracy on evaluation data: 8420 / 10000 Epoch 69 training complete Cost on training data: 0.031155109011162536 Accuracy on evaluation data: 8412 / 10000 Epoch 70 training complete Cost on training data: 0.030581435138702377 Accuracy on evaluation data: 8411 / 10000 Epoch 71 training complete Cost on training data: 0.029850450319083684 Accuracy on evaluation data: 8420 / 10000 Epoch 72 training complete Cost on training data: 0.02927639825367843 Accuracy on evaluation data: 8410 / 10000 Epoch 73 training complete Cost on training data: 0.028877550454782647 Accuracy on evaluation data: 8421 / 10000 Epoch 74 training complete Cost on training data: 0.028148984621107827 Accuracy on evaluation data: 8420 / 10000 Epoch 75 training complete Cost on training data: 0.027645446138674794 Accuracy on evaluation data: 8426 / 10000 Epoch 76 training complete Cost on training data: 0.027157308884780768 Accuracy on evaluation data: 8410 / 10000 Epoch 77 training complete Cost on training data: 0.02660532840891866 Accuracy on evaluation data: 8423 / 10000 Epoch 78 training complete Cost on training data: 0.02630193671251622 Accuracy on evaluation data: 8431 / 10000 Epoch 79 training complete Cost on training data: 0.025685865680059764 Accuracy on evaluation data: 8421 / 10000 Epoch 80 training complete Cost on training data: 0.025230066226201827 Accuracy on evaluation data: 8424 / 10000 Epoch 81 training complete Cost on training data: 0.024826864455365017 Accuracy on evaluation data: 8434 / 10000 Epoch 82 training complete Cost on training data: 0.0243866839572904 Accuracy on evaluation data: 8433 / 10000 Epoch 83 training complete Cost on training data: 0.02399530254399858 Accuracy on evaluation data: 8437 / 10000 Epoch 84 training complete Cost on training data: 0.023730621576772862 Accuracy on evaluation data: 8419 / 10000 Epoch 85 training complete Cost on training data: 0.02325836603295703 Accuracy on evaluation data: 8435 / 10000 Epoch 86 training complete Cost on training data: 0.02289041133860511 Accuracy on evaluation data: 8435 / 10000 Epoch 87 training complete Cost on training data: 0.022542631111450415 Accuracy on evaluation data: 8424 / 10000 Epoch 88 training complete Cost on training data: 0.02219589347435611 Accuracy on evaluation data: 8435 / 10000 Epoch 89 training complete Cost on training data: 0.021936901953618273 Accuracy on evaluation data: 8437 / 10000 Epoch 90 training complete Cost on training data: 0.02157206047399831 Accuracy on evaluation data: 8441 / 10000 Epoch 91 training complete Cost on training data: 0.021223795818202454 Accuracy on evaluation data: 8441 / 10000 Epoch 92 training complete Cost on training data: 0.02096752615216147 Accuracy on evaluation data: 8430 / 10000 Epoch 93 training complete Cost on training data: 0.02063715475299584 Accuracy on evaluation data: 8443 / 10000 Epoch 94 training complete Cost on training data: 0.020356029193518026 Accuracy on evaluation data: 8448 / 10000 Epoch 95 training complete Cost on training data: 0.020072665857854867 Accuracy on evaluation data: 8441 / 10000 Epoch 96 training complete Cost on training data: 0.019834001926711618 Accuracy on evaluation data: 8441 / 10000 Epoch 97 training complete Cost on training data: 0.01954121858171723 Accuracy on evaluation data: 8437 / 10000 Epoch 98 training complete Cost on training data: 0.019286776431325092 Accuracy on evaluation data: 8448 / 10000 Epoch 99 training complete Cost on training data: 0.01905240925628857 Accuracy on evaluation data: 8444 / 10000 Epoch 100 training complete Cost on training data: 0.01880649215622303 Accuracy on evaluation data: 8447 / 10000 Epoch 101 training complete Cost on training data: 0.01854682840467356 Accuracy on evaluation data: 8448 / 10000 Epoch 102 training complete Cost on training data: 0.018399883172119994 Accuracy on evaluation data: 8445 / 10000 Epoch 103 training complete Cost on training data: 0.018090713620616473 Accuracy on evaluation data: 8443 / 10000 Epoch 104 training complete Cost on training data: 0.01789813825489991 Accuracy on evaluation data: 8454 / 10000 Epoch 105 training complete Cost on training data: 0.01765118746282579 Accuracy on evaluation data: 8446 / 10000 Epoch 106 training complete Cost on training data: 0.017473085175173292 Accuracy on evaluation data: 8446 / 10000 Epoch 107 training complete Cost on training data: 0.017244494927694504 Accuracy on evaluation data: 8444 / 10000 Epoch 108 training complete Cost on training data: 0.01703486435487612 Accuracy on evaluation data: 8441 / 10000 Epoch 109 training complete Cost on training data: 0.016859129978839392 Accuracy on evaluation data: 8446 / 10000 Epoch 110 training complete Cost on training data: 0.01664474198599423 Accuracy on evaluation data: 8447 / 10000 Epoch 111 training complete Cost on training data: 0.016492894164797507 Accuracy on evaluation data: 8444 / 10000 Epoch 112 training complete Cost on training data: 0.016277872550429357 Accuracy on evaluation data: 8449 / 10000 Epoch 113 training complete Cost on training data: 0.01609761470488398 Accuracy on evaluation data: 8446 / 10000 Epoch 114 training complete Cost on training data: 0.01591808120014808 Accuracy on evaluation data: 8442 / 10000 Epoch 115 training complete Cost on training data: 0.01574090632673071 Accuracy on evaluation data: 8443 / 10000 Epoch 116 training complete Cost on training data: 0.015569273751146593 Accuracy on evaluation data: 8446 / 10000 Epoch 117 training complete Cost on training data: 0.015401941782147353 Accuracy on evaluation data: 8444 / 10000 Epoch 118 training complete Cost on training data: 0.015238524446743831 Accuracy on evaluation data: 8447 / 10000 Epoch 119 training complete Cost on training data: 0.015108287488949757 Accuracy on evaluation data: 8439 / 10000 Epoch 120 training complete Cost on training data: 0.014915727919302634 Accuracy on evaluation data: 8439 / 10000 Epoch 121 training complete Cost on training data: 0.014765483792022284 Accuracy on evaluation data: 8447 / 10000 Epoch 122 training complete Cost on training data: 0.014608352572538171 Accuracy on evaluation data: 8444 / 10000 Epoch 123 training complete Cost on training data: 0.014466773855429526 Accuracy on evaluation data: 8444 / 10000 Epoch 124 training complete Cost on training data: 0.014318795347529108 Accuracy on evaluation data: 8443 / 10000 Epoch 125 training complete Cost on training data: 0.014166768716930093 Accuracy on evaluation data: 8441 / 10000 Epoch 126 training complete Cost on training data: 0.01403021765009755 Accuracy on evaluation data: 8447 / 10000 Epoch 127 training complete Cost on training data: 0.013889891280038329 Accuracy on evaluation data: 8451 / 10000 Epoch 128 training complete Cost on training data: 0.013756143033653877 Accuracy on evaluation data: 8444 / 10000 Epoch 129 training complete Cost on training data: 0.013620655462519938 Accuracy on evaluation data: 8447 / 10000 Epoch 130 training complete Cost on training data: 0.013493108647379412 Accuracy on evaluation data: 8449 / 10000 Epoch 131 training complete Cost on training data: 0.013364012980409488 Accuracy on evaluation data: 8447 / 10000 Epoch 132 training complete Cost on training data: 0.013238234613230631 Accuracy on evaluation data: 8448 / 10000 Epoch 133 training complete Cost on training data: 0.013117270271950057 Accuracy on evaluation data: 8448 / 10000 Epoch 134 training complete Cost on training data: 0.01299690578155512 Accuracy on evaluation data: 8445 / 10000 Epoch 135 training complete Cost on training data: 0.012882657709243744 Accuracy on evaluation data: 8447 / 10000 Epoch 136 training complete Cost on training data: 0.012758697885839247 Accuracy on evaluation data: 8447 / 10000 Epoch 137 training complete Cost on training data: 0.012649429525397628 Accuracy on evaluation data: 8448 / 10000 Epoch 138 training complete Cost on training data: 0.012538584374843613 Accuracy on evaluation data: 8448 / 10000 Epoch 139 training complete Cost on training data: 0.012422775590650628 Accuracy on evaluation data: 8449 / 10000 Epoch 140 training complete Cost on training data: 0.012319840609501332 Accuracy on evaluation data: 8448 / 10000 Epoch 141 training complete Cost on training data: 0.012209649003281678 Accuracy on evaluation data: 8447 / 10000 Epoch 142 training complete Cost on training data: 0.012102365427467381 Accuracy on evaluation data: 8448 / 10000 Epoch 143 training complete Cost on training data: 0.012000446070765454 Accuracy on evaluation data: 8448 / 10000 Epoch 144 training complete Cost on training data: 0.011904631671549513 Accuracy on evaluation data: 8452 / 10000 Epoch 145 training complete Cost on training data: 0.011805864322997753 Accuracy on evaluation data: 8447 / 10000 Epoch 146 training complete Cost on training data: 0.011698740239416737 Accuracy on evaluation data: 8447 / 10000 Epoch 147 training complete Cost on training data: 0.011606371241906156 Accuracy on evaluation data: 8447 / 10000 Epoch 148 training complete Cost on training data: 0.011514374611308427 Accuracy on evaluation data: 8445 / 10000 Epoch 149 training complete Cost on training data: 0.011416940179436775 Accuracy on evaluation data: 8450 / 10000 Epoch 150 training complete Cost on training data: 0.011324325638086047 Accuracy on evaluation data: 8452 / 10000 Epoch 151 training complete Cost on training data: 0.011232413314906249 Accuracy on evaluation data: 8451 / 10000 Epoch 152 training complete Cost on training data: 0.011143023721712417 Accuracy on evaluation data: 8444 / 10000 Epoch 153 training complete Cost on training data: 0.011057575745872053 Accuracy on evaluation data: 8442 / 10000 Epoch 154 training complete Cost on training data: 0.010968259739096101 Accuracy on evaluation data: 8448 / 10000 Epoch 155 training complete Cost on training data: 0.01088128644534935 Accuracy on evaluation data: 8446 / 10000 Epoch 156 training complete Cost on training data: 0.010799772166372307 Accuracy on evaluation data: 8446 / 10000 Epoch 157 training complete Cost on training data: 0.010717817480123754 Accuracy on evaluation data: 8444 / 10000 Epoch 158 training complete Cost on training data: 0.010638889630533489 Accuracy on evaluation data: 8445 / 10000 Epoch 159 training complete Cost on training data: 0.010554400509895827 Accuracy on evaluation data: 8447 / 10000 Epoch 160 training complete Cost on training data: 0.010475138359528497 Accuracy on evaluation data: 8448 / 10000 Epoch 161 training complete Cost on training data: 0.010397616721467969 Accuracy on evaluation data: 8450 / 10000 Epoch 162 training complete Cost on training data: 0.010321260115164373 Accuracy on evaluation data: 8445 / 10000 Epoch 163 training complete Cost on training data: 0.010244649482948473 Accuracy on evaluation data: 8445 / 10000 Epoch 164 training complete Cost on training data: 0.010170491415277361 Accuracy on evaluation data: 8443 / 10000 Epoch 165 training complete Cost on training data: 0.01009958618454486 Accuracy on evaluation data: 8445 / 10000 Epoch 166 training complete Cost on training data: 0.010024345542467384 Accuracy on evaluation data: 8445 / 10000 Epoch 167 training complete Cost on training data: 0.009953348266001014 Accuracy on evaluation data: 8445 / 10000 Epoch 168 training complete Cost on training data: 0.009883756280116205 Accuracy on evaluation data: 8448 / 10000 Epoch 169 training complete Cost on training data: 0.009811861956010477 Accuracy on evaluation data: 8447 / 10000 Epoch 170 training complete Cost on training data: 0.009749156561601519 Accuracy on evaluation data: 8449 / 10000 Epoch 171 training complete Cost on training data: 0.009679778377319816 Accuracy on evaluation data: 8444 / 10000 Epoch 172 training complete Cost on training data: 0.009609249102981717 Accuracy on evaluation data: 8443 / 10000 Epoch 173 training complete Cost on training data: 0.009544288870302616 Accuracy on evaluation data: 8444 / 10000 Epoch 174 training complete Cost on training data: 0.009480519623452777 Accuracy on evaluation data: 8452 / 10000 Epoch 175 training complete Cost on training data: 0.009416154781809356 Accuracy on evaluation data: 8449 / 10000 Epoch 176 training complete Cost on training data: 0.009354569506204469 Accuracy on evaluation data: 8446 / 10000 Epoch 177 training complete Cost on training data: 0.00929067436973555 Accuracy on evaluation data: 8449 / 10000 Epoch 178 training complete Cost on training data: 0.009229670289513256 Accuracy on evaluation data: 8445 / 10000 Epoch 179 training complete Cost on training data: 0.009169356854431477 Accuracy on evaluation data: 8444 / 10000 Epoch 180 training complete Cost on training data: 0.009111816213489487 Accuracy on evaluation data: 8442 / 10000 Epoch 181 training complete Cost on training data: 0.0090543641894766 Accuracy on evaluation data: 8446 / 10000 Epoch 182 training complete Cost on training data: 0.008993560686706871 Accuracy on evaluation data: 8447 / 10000 Epoch 183 training complete Cost on training data: 0.008938581789090341 Accuracy on evaluation data: 8447 / 10000 Epoch 184 training complete Cost on training data: 0.008880962419123395 Accuracy on evaluation data: 8446 / 10000 Epoch 185 training complete Cost on training data: 0.008826301190224393 Accuracy on evaluation data: 8444 / 10000 Epoch 186 training complete Cost on training data: 0.008769672548831493 Accuracy on evaluation data: 8446 / 10000 Epoch 187 training complete Cost on training data: 0.008716483735853068 Accuracy on evaluation data: 8445 / 10000 Epoch 188 training complete Cost on training data: 0.00866460369160469 Accuracy on evaluation data: 8449 / 10000 Epoch 189 training complete Cost on training data: 0.00861036903221576 Accuracy on evaluation data: 8447 / 10000 Epoch 190 training complete Cost on training data: 0.008557577345388928 Accuracy on evaluation data: 8443 / 10000 Epoch 191 training complete Cost on training data: 0.00850933448370844 Accuracy on evaluation data: 8443 / 10000 Epoch 192 training complete Cost on training data: 0.008456169763878356 Accuracy on evaluation data: 8442 / 10000 Epoch 193 training complete Cost on training data: 0.008404662640716853 Accuracy on evaluation data: 8447 / 10000 Epoch 194 training complete Cost on training data: 0.008354622029987917 Accuracy on evaluation data: 8448 / 10000 Epoch 195 training complete Cost on training data: 0.00830697908651364 Accuracy on evaluation data: 8442 / 10000 Epoch 196 training complete Cost on training data: 0.008257180529236265 Accuracy on evaluation data: 8448 / 10000 Epoch 197 training complete Cost on training data: 0.008210014573194865 Accuracy on evaluation data: 8446 / 10000 Epoch 198 training complete Cost on training data: 0.008162098131249284 Accuracy on evaluation data: 8449 / 10000 Epoch 199 training complete Cost on training data: 0.00811539010760783 Accuracy on evaluation data: 8446 / 10000 Epoch 200 training complete Cost on training data: 0.008072431304794821 Accuracy on evaluation data: 8444 / 10000 Epoch 201 training complete Cost on training data: 0.00802376202280493 Accuracy on evaluation data: 8448 / 10000 Epoch 202 training complete Cost on training data: 0.007979104863057019 Accuracy on evaluation data: 8447 / 10000 Epoch 203 training complete Cost on training data: 0.007937625159070238 Accuracy on evaluation data: 8445 / 10000 Epoch 204 training complete Cost on training data: 0.007890554712392644 Accuracy on evaluation data: 8444 / 10000 Epoch 205 training complete Cost on training data: 0.00784790016459241 Accuracy on evaluation data: 8447 / 10000 Epoch 206 training complete Cost on training data: 0.007802929222624051 Accuracy on evaluation data: 8443 / 10000 Epoch 207 training complete Cost on training data: 0.007760549692860105 Accuracy on evaluation data: 8446 / 10000 Epoch 208 training complete Cost on training data: 0.007718367124741382 Accuracy on evaluation data: 8447 / 10000 Epoch 209 training complete Cost on training data: 0.007676850015661369 Accuracy on evaluation data: 8446 / 10000 Epoch 210 training complete Cost on training data: 0.007636902480344225 Accuracy on evaluation data: 8448 / 10000 Epoch 211 training complete Cost on training data: 0.007594654515272643 Accuracy on evaluation data: 8450 / 10000 Epoch 212 training complete Cost on training data: 0.007557266065446237 Accuracy on evaluation data: 8446 / 10000 Epoch 213 training complete Cost on training data: 0.007517549897936283 Accuracy on evaluation data: 8447 / 10000 Epoch 214 training complete Cost on training data: 0.007475327712505067 Accuracy on evaluation data: 8447 / 10000 Epoch 215 training complete Cost on training data: 0.007435933824650646 Accuracy on evaluation data: 8449 / 10000 Epoch 216 training complete Cost on training data: 0.007397819828337148 Accuracy on evaluation data: 8448 / 10000 Epoch 217 training complete Cost on training data: 0.007359477880672005 Accuracy on evaluation data: 8449 / 10000 Epoch 218 training complete Cost on training data: 0.0073208837720296705 Accuracy on evaluation data: 8449 / 10000 Epoch 219 training complete Cost on training data: 0.007283805820236689 Accuracy on evaluation data: 8449 / 10000 Epoch 220 training complete Cost on training data: 0.007247153976131099 Accuracy on evaluation data: 8451 / 10000 Epoch 221 training complete Cost on training data: 0.0072106084576830706 Accuracy on evaluation data: 8448 / 10000 Epoch 222 training complete Cost on training data: 0.0071737567683653304 Accuracy on evaluation data: 8445 / 10000 Epoch 223 training complete Cost on training data: 0.007137721603632793 Accuracy on evaluation data: 8446 / 10000 Epoch 224 training complete Cost on training data: 0.0071018808134562916 Accuracy on evaluation data: 8446 / 10000 Epoch 225 training complete Cost on training data: 0.007066331622788004 Accuracy on evaluation data: 8450 / 10000 Epoch 226 training complete Cost on training data: 0.007031389918120413 Accuracy on evaluation data: 8450 / 10000 Epoch 227 training complete Cost on training data: 0.006996545294324694 Accuracy on evaluation data: 8450 / 10000 Epoch 228 training complete Cost on training data: 0.00696280808553848 Accuracy on evaluation data: 8451 / 10000 Epoch 229 training complete Cost on training data: 0.0069292201735108635 Accuracy on evaluation data: 8451 / 10000 Epoch 230 training complete Cost on training data: 0.0068955718106028935 Accuracy on evaluation data: 8446 / 10000 Epoch 231 training complete Cost on training data: 0.006861764530310163 Accuracy on evaluation data: 8449 / 10000 Epoch 232 training complete Cost on training data: 0.006828683516656813 Accuracy on evaluation data: 8451 / 10000 Epoch 233 training complete Cost on training data: 0.006796285258697305 Accuracy on evaluation data: 8452 / 10000 Epoch 234 training complete Cost on training data: 0.006764736003988712 Accuracy on evaluation data: 8453 / 10000 Epoch 235 training complete Cost on training data: 0.006731546513205398 Accuracy on evaluation data: 8450 / 10000 Epoch 236 training complete Cost on training data: 0.006700374780671107 Accuracy on evaluation data: 8451 / 10000 Epoch 237 training complete Cost on training data: 0.006669692110701232 Accuracy on evaluation data: 8454 / 10000 Epoch 238 training complete Cost on training data: 0.0066375050596078275 Accuracy on evaluation data: 8451 / 10000 Epoch 239 training complete Cost on training data: 0.006607049930111248 Accuracy on evaluation data: 8453 / 10000 Epoch 240 training complete Cost on training data: 0.006575578731710099 Accuracy on evaluation data: 8450 / 10000 Epoch 241 training complete Cost on training data: 0.006545454671152349 Accuracy on evaluation data: 8451 / 10000 Epoch 242 training complete Cost on training data: 0.0065158945218681775 Accuracy on evaluation data: 8455 / 10000 Epoch 243 training complete Cost on training data: 0.006485383413394594 Accuracy on evaluation data: 8449 / 10000 Epoch 244 training complete Cost on training data: 0.006456175961449934 Accuracy on evaluation data: 8450 / 10000 Epoch 245 training complete Cost on training data: 0.006426848105220396 Accuracy on evaluation data: 8452 / 10000 Epoch 246 training complete Cost on training data: 0.006398061937999 Accuracy on evaluation data: 8450 / 10000 Epoch 247 training complete Cost on training data: 0.0063690181176364775 Accuracy on evaluation data: 8450 / 10000 Epoch 248 training complete Cost on training data: 0.0063400142312427694 Accuracy on evaluation data: 8449 / 10000 Epoch 249 training complete Cost on training data: 0.00631159377241229 Accuracy on evaluation data: 8449 / 10000 Epoch 250 training complete Cost on training data: 0.006283580444020859 Accuracy on evaluation data: 8450 / 10000 Epoch 251 training complete Cost on training data: 0.006256424756791315 Accuracy on evaluation data: 8450 / 10000 Epoch 252 training complete Cost on training data: 0.006228133859257206 Accuracy on evaluation data: 8448 / 10000 Epoch 253 training complete Cost on training data: 0.0062012656237021 Accuracy on evaluation data: 8448 / 10000 Epoch 254 training complete Cost on training data: 0.006173386086059297 Accuracy on evaluation data: 8452 / 10000 Epoch 255 training complete Cost on training data: 0.006146747634716472 Accuracy on evaluation data: 8448 / 10000 Epoch 256 training complete Cost on training data: 0.006119690002133509 Accuracy on evaluation data: 8450 / 10000 Epoch 257 training complete Cost on training data: 0.006093457222384939 Accuracy on evaluation data: 8448 / 10000 Epoch 258 training complete Cost on training data: 0.0060670225519100715 Accuracy on evaluation data: 8449 / 10000 Epoch 259 training complete Cost on training data: 0.006040967453545693 Accuracy on evaluation data: 8450 / 10000 Epoch 260 training complete Cost on training data: 0.006016303393940634 Accuracy on evaluation data: 8449 / 10000 Epoch 261 training complete Cost on training data: 0.005989868820592518 Accuracy on evaluation data: 8452 / 10000 Epoch 262 training complete Cost on training data: 0.005965394043346562 Accuracy on evaluation data: 8449 / 10000 Epoch 263 training complete Cost on training data: 0.005938647466701287 Accuracy on evaluation data: 8449 / 10000 Epoch 264 training complete Cost on training data: 0.005913173471753071 Accuracy on evaluation data: 8451 / 10000 Epoch 265 training complete Cost on training data: 0.00588804629659548 Accuracy on evaluation data: 8450 / 10000 Epoch 266 training complete Cost on training data: 0.005863373702903854 Accuracy on evaluation data: 8451 / 10000 Epoch 267 training complete Cost on training data: 0.005838688139919397 Accuracy on evaluation data: 8452 / 10000 Epoch 268 training complete Cost on training data: 0.005814238787509755 Accuracy on evaluation data: 8450 / 10000 Epoch 269 training complete Cost on training data: 0.005789700551838541 Accuracy on evaluation data: 8451 / 10000 Epoch 270 training complete Cost on training data: 0.0057654899095211255 Accuracy on evaluation data: 8450 / 10000 Epoch 271 training complete Cost on training data: 0.005741943688407352 Accuracy on evaluation data: 8452 / 10000 Epoch 272 training complete Cost on training data: 0.005717660700910018 Accuracy on evaluation data: 8450 / 10000 Epoch 273 training complete Cost on training data: 0.005694161758288953 Accuracy on evaluation data: 8451 / 10000 Epoch 274 training complete Cost on training data: 0.005670904531158865 Accuracy on evaluation data: 8450 / 10000 Epoch 275 training complete Cost on training data: 0.005647668912346308 Accuracy on evaluation data: 8447 / 10000 Epoch 276 training complete Cost on training data: 0.005624116044239148 Accuracy on evaluation data: 8447 / 10000 Epoch 277 training complete Cost on training data: 0.005601062368304801 Accuracy on evaluation data: 8448 / 10000 Epoch 278 training complete Cost on training data: 0.00557800370514958 Accuracy on evaluation data: 8450 / 10000 Epoch 279 training complete Cost on training data: 0.005555208869651533 Accuracy on evaluation data: 8450 / 10000 Epoch 280 training complete Cost on training data: 0.0055328375244215085 Accuracy on evaluation data: 8454 / 10000 Epoch 281 training complete Cost on training data: 0.005510002368060477 Accuracy on evaluation data: 8456 / 10000 Epoch 282 training complete Cost on training data: 0.0054877717401872585 Accuracy on evaluation data: 8457 / 10000 Epoch 283 training complete Cost on training data: 0.0054656957066184534 Accuracy on evaluation data: 8453 / 10000 Epoch 284 training complete Cost on training data: 0.0054436599852498045 Accuracy on evaluation data: 8452 / 10000 Epoch 285 training complete Cost on training data: 0.005421555530871548 Accuracy on evaluation data: 8453 / 10000 Epoch 286 training complete Cost on training data: 0.005399528537032674 Accuracy on evaluation data: 8452 / 10000 Epoch 287 training complete Cost on training data: 0.005377943555842746 Accuracy on evaluation data: 8451 / 10000 Epoch 288 training complete Cost on training data: 0.005356354186241844 Accuracy on evaluation data: 8451 / 10000 Epoch 289 training complete Cost on training data: 0.005334673757338759 Accuracy on evaluation data: 8451 / 10000 Epoch 290 training complete Cost on training data: 0.005313056392103426 Accuracy on evaluation data: 8452 / 10000 Epoch 291 training complete Cost on training data: 0.005291963549073837 Accuracy on evaluation data: 8452 / 10000 Epoch 292 training complete Cost on training data: 0.005270880039216974 Accuracy on evaluation data: 8456 / 10000 Epoch 293 training complete Cost on training data: 0.005249934586441436 Accuracy on evaluation data: 8450 / 10000 Epoch 294 training complete Cost on training data: 0.005229237625108339 Accuracy on evaluation data: 8452 / 10000 Epoch 295 training complete Cost on training data: 0.005208364767316311 Accuracy on evaluation data: 8452 / 10000 Epoch 296 training complete Cost on training data: 0.005187662045800864 Accuracy on evaluation data: 8452 / 10000 Epoch 297 training complete Cost on training data: 0.005167176146519333 Accuracy on evaluation data: 8452 / 10000 Epoch 298 training complete Cost on training data: 0.005147164009746564 Accuracy on evaluation data: 8451 / 10000 Epoch 299 training complete Cost on training data: 0.005126728309057134 Accuracy on evaluation data: 8450 / 10000 Epoch 300 training complete Cost on training data: 0.005106603389814559 Accuracy on evaluation data: 8451 / 10000 Epoch 301 training complete Cost on training data: 0.005086805388927815 Accuracy on evaluation data: 8453 / 10000 Epoch 302 training complete Cost on training data: 0.005067189496995626 Accuracy on evaluation data: 8453 / 10000 Epoch 303 training complete Cost on training data: 0.005047382562905665 Accuracy on evaluation data: 8454 / 10000 Epoch 304 training complete Cost on training data: 0.005028034574598833 Accuracy on evaluation data: 8452 / 10000 Epoch 305 training complete Cost on training data: 0.0050084702392899 Accuracy on evaluation data: 8453 / 10000 Epoch 306 training complete Cost on training data: 0.004989487783001165 Accuracy on evaluation data: 8453 / 10000 Epoch 307 training complete Cost on training data: 0.004970364946417611 Accuracy on evaluation data: 8454 / 10000 Epoch 308 training complete Cost on training data: 0.0049517185197455625 Accuracy on evaluation data: 8454 / 10000 Epoch 309 training complete Cost on training data: 0.004932909742147225 Accuracy on evaluation data: 8454 / 10000 Epoch 310 training complete Cost on training data: 0.004914067483989186 Accuracy on evaluation data: 8456 / 10000 Epoch 311 training complete Cost on training data: 0.004895392136366004 Accuracy on evaluation data: 8457 / 10000 Epoch 312 training complete Cost on training data: 0.004877447404631756 Accuracy on evaluation data: 8456 / 10000 Epoch 313 training complete Cost on training data: 0.004858917942767792 Accuracy on evaluation data: 8458 / 10000 Epoch 314 training complete Cost on training data: 0.00484093082756921 Accuracy on evaluation data: 8456 / 10000 Epoch 315 training complete Cost on training data: 0.004822977903949536 Accuracy on evaluation data: 8456 / 10000 Epoch 316 training complete Cost on training data: 0.0048051048027296156 Accuracy on evaluation data: 8456 / 10000 Epoch 317 training complete Cost on training data: 0.004787525172086458 Accuracy on evaluation data: 8456 / 10000 Epoch 318 training complete Cost on training data: 0.004769962311108191 Accuracy on evaluation data: 8457 / 10000 Epoch 319 training complete Cost on training data: 0.004752465103495572 Accuracy on evaluation data: 8456 / 10000 Epoch 320 training complete Cost on training data: 0.004735117711139855 Accuracy on evaluation data: 8457 / 10000 Epoch 321 training complete Cost on training data: 0.004718069015654681 Accuracy on evaluation data: 8460 / 10000 Epoch 322 training complete Cost on training data: 0.004700954567374447 Accuracy on evaluation data: 8456 / 10000 Epoch 323 training complete Cost on training data: 0.004684125026718987 Accuracy on evaluation data: 8457 / 10000 Epoch 324 training complete Cost on training data: 0.004667369207845105 Accuracy on evaluation data: 8459 / 10000 Epoch 325 training complete Cost on training data: 0.004650662161445141 Accuracy on evaluation data: 8456 / 10000 Epoch 326 training complete Cost on training data: 0.004634210332208765 Accuracy on evaluation data: 8457 / 10000 Epoch 327 training complete Cost on training data: 0.0046179946139440755 Accuracy on evaluation data: 8456 / 10000 Epoch 328 training complete Cost on training data: 0.0046015235949743655 Accuracy on evaluation data: 8456 / 10000 Epoch 329 training complete Cost on training data: 0.004585486665367072 Accuracy on evaluation data: 8458 / 10000 Epoch 330 training complete Cost on training data: 0.004569374762516196 Accuracy on evaluation data: 8459 / 10000 Epoch 331 training complete Cost on training data: 0.004553359198725704 Accuracy on evaluation data: 8457 / 10000 Epoch 332 training complete Cost on training data: 0.004537789650018289 Accuracy on evaluation data: 8455 / 10000 Epoch 333 training complete Cost on training data: 0.004521863397284219 Accuracy on evaluation data: 8456 / 10000 Epoch 334 training complete Cost on training data: 0.0045063059547557245 Accuracy on evaluation data: 8454 / 10000 Epoch 335 training complete Cost on training data: 0.004490830953853623 Accuracy on evaluation data: 8454 / 10000 Epoch 336 training complete Cost on training data: 0.004475399270124156 Accuracy on evaluation data: 8454 / 10000 Epoch 337 training complete Cost on training data: 0.0044601104423474735 Accuracy on evaluation data: 8454 / 10000 Epoch 338 training complete Cost on training data: 0.004444892712063275 Accuracy on evaluation data: 8454 / 10000 Epoch 339 training complete Cost on training data: 0.0044299373366120266 Accuracy on evaluation data: 8455 / 10000 Epoch 340 training complete Cost on training data: 0.00441495550594844 Accuracy on evaluation data: 8454 / 10000 Epoch 341 training complete Cost on training data: 0.00439999573863545 Accuracy on evaluation data: 8455 / 10000 Epoch 342 training complete Cost on training data: 0.0043851796595118855 Accuracy on evaluation data: 8454 / 10000 Epoch 343 training complete Cost on training data: 0.004370509967274126 Accuracy on evaluation data: 8453 / 10000 Epoch 344 training complete Cost on training data: 0.004356001437446666 Accuracy on evaluation data: 8454 / 10000 Epoch 345 training complete Cost on training data: 0.004341476075756548 Accuracy on evaluation data: 8454 / 10000 Epoch 346 training complete Cost on training data: 0.004327375344027786 Accuracy on evaluation data: 8458 / 10000 Epoch 347 training complete Cost on training data: 0.004312816833407688 Accuracy on evaluation data: 8455 / 10000 Epoch 348 training complete Cost on training data: 0.004298550589725273 Accuracy on evaluation data: 8453 / 10000 Epoch 349 training complete Cost on training data: 0.004284437102809583 Accuracy on evaluation data: 8453 / 10000 Epoch 350 training complete Cost on training data: 0.004270396041901047 Accuracy on evaluation data: 8455 / 10000 Epoch 351 training complete Cost on training data: 0.0042564485888378 Accuracy on evaluation data: 8454 / 10000 Epoch 352 training complete Cost on training data: 0.004242700773955589 Accuracy on evaluation data: 8457 / 10000 Epoch 353 training complete Cost on training data: 0.004228973608756927 Accuracy on evaluation data: 8456 / 10000 Epoch 354 training complete Cost on training data: 0.004215150732240222 Accuracy on evaluation data: 8455 / 10000 Epoch 355 training complete Cost on training data: 0.004201686478348546 Accuracy on evaluation data: 8458 / 10000 Epoch 356 training complete Cost on training data: 0.004188213373837653 Accuracy on evaluation data: 8458 / 10000 Epoch 357 training complete Cost on training data: 0.004174708057344338 Accuracy on evaluation data: 8455 / 10000 Epoch 358 training complete Cost on training data: 0.004161246420505441 Accuracy on evaluation data: 8455 / 10000 Epoch 359 training complete Cost on training data: 0.004147894111635248 Accuracy on evaluation data: 8455 / 10000 Epoch 360 training complete Cost on training data: 0.004134682185277353 Accuracy on evaluation data: 8455 / 10000 Epoch 361 training complete Cost on training data: 0.004121624502562014 Accuracy on evaluation data: 8458 / 10000 Epoch 362 training complete Cost on training data: 0.004108598803852993 Accuracy on evaluation data: 8455 / 10000 Epoch 363 training complete Cost on training data: 0.004095710810742628 Accuracy on evaluation data: 8456 / 10000 Epoch 364 training complete Cost on training data: 0.004082718920143551 Accuracy on evaluation data: 8457 / 10000 Epoch 365 training complete Cost on training data: 0.004070051476235988 Accuracy on evaluation data: 8458 / 10000 Epoch 366 training complete Cost on training data: 0.004056938332299395 Accuracy on evaluation data: 8456 / 10000 Epoch 367 training complete Cost on training data: 0.0040443297875509 Accuracy on evaluation data: 8456 / 10000 Epoch 368 training complete Cost on training data: 0.0040318003206056005 Accuracy on evaluation data: 8456 / 10000 Epoch 369 training complete Cost on training data: 0.004019181753384823 Accuracy on evaluation data: 8457 / 10000 Epoch 370 training complete Cost on training data: 0.004006705267628003 Accuracy on evaluation data: 8457 / 10000 Epoch 371 training complete Cost on training data: 0.003994326146730657 Accuracy on evaluation data: 8457 / 10000 Epoch 372 training complete Cost on training data: 0.003981902892525214 Accuracy on evaluation data: 8458 / 10000 Epoch 373 training complete Cost on training data: 0.00396964517256825 Accuracy on evaluation data: 8457 / 10000 Epoch 374 training complete Cost on training data: 0.003957553909764387 Accuracy on evaluation data: 8458 / 10000 Epoch 375 training complete Cost on training data: 0.003945315482560462 Accuracy on evaluation data: 8457 / 10000 Epoch 376 training complete Cost on training data: 0.003933276759706994 Accuracy on evaluation data: 8457 / 10000 Epoch 377 training complete Cost on training data: 0.003921424852837589 Accuracy on evaluation data: 8459 / 10000 Epoch 378 training complete Cost on training data: 0.003909363708513628 Accuracy on evaluation data: 8459 / 10000 Epoch 379 training complete Cost on training data: 0.00389741880422459 Accuracy on evaluation data: 8457 / 10000 Epoch 380 training complete Cost on training data: 0.003885686878142363 Accuracy on evaluation data: 8459 / 10000 Epoch 381 training complete Cost on training data: 0.003873948097592198 Accuracy on evaluation data: 8460 / 10000 Epoch 382 training complete Cost on training data: 0.0038623321179242914 Accuracy on evaluation data: 8461 / 10000 Epoch 383 training complete Cost on training data: 0.0038507623652346496 Accuracy on evaluation data: 8462 / 10000 Epoch 384 training complete Cost on training data: 0.003839250421204888 Accuracy on evaluation data: 8462 / 10000 Epoch 385 training complete Cost on training data: 0.0038278098301889668 Accuracy on evaluation data: 8462 / 10000 Epoch 386 training complete Cost on training data: 0.003816341730791096 Accuracy on evaluation data: 8462 / 10000 Epoch 387 training complete Cost on training data: 0.003805058387591798 Accuracy on evaluation data: 8462 / 10000 Epoch 388 training complete Cost on training data: 0.003793795821766855 Accuracy on evaluation data: 8464 / 10000 Epoch 389 training complete Cost on training data: 0.0037826058079641384 Accuracy on evaluation data: 8463 / 10000 Epoch 390 training complete Cost on training data: 0.003771464060147009 Accuracy on evaluation data: 8463 / 10000 Epoch 391 training complete Cost on training data: 0.0037604229342176718 Accuracy on evaluation data: 8464 / 10000 Epoch 392 training complete Cost on training data: 0.0037494234527342524 Accuracy on evaluation data: 8463 / 10000 Epoch 393 training complete Cost on training data: 0.003738512485251956 Accuracy on evaluation data: 8463 / 10000 Epoch 394 training complete Cost on training data: 0.003727631899579603 Accuracy on evaluation data: 8463 / 10000 Epoch 395 training complete Cost on training data: 0.003716802182262589 Accuracy on evaluation data: 8462 / 10000 Epoch 396 training complete Cost on training data: 0.003706068792614434 Accuracy on evaluation data: 8462 / 10000 Epoch 397 training complete Cost on training data: 0.0036954481497339015 Accuracy on evaluation data: 8463 / 10000 Epoch 398 training complete Cost on training data: 0.0036848192810071934 Accuracy on evaluation data: 8463 / 10000 Epoch 399 training complete Cost on training data: 0.0036742418585741245 Accuracy on evaluation data: 8464 / 10000 CPU times: user 7min 5s, sys: 5min 31s, total: 12min 37s Wall time: 7min 35s
([], [5362, 6508, 6996, 7367, 7592, 7708, 7752, 7931, 8037, 8080, 8136, 8149, 8160, 8255, 8258, 8267, 8277, 8281, 8276, 8293, 8319, 8324, 8324, 8370, 8351, 8344, 8345, 8352, 8348, 8374, 8386, 8360, 8361, 8381, 8365, 8376, 8390, 8399, 8389, 8398, 8382, 8400, 8394, 8398, 8388, 8392, 8400, 8396, 8410, 8402, 8398, 8405, 8403, 8399, 8410, 8401, 8403, 8405, 8410, 8416, 8408, 8411, 8410, 8413, 8404, 8417, 8418, 8417, 8420, 8412, 8411, 8420, 8410, 8421, 8420, 8426, 8410, 8423, 8431, 8421, 8424, 8434, 8433, 8437, 8419, 8435, 8435, 8424, 8435, 8437, 8441, 8441, 8430, 8443, 8448, 8441, 8441, 8437, 8448, 8444, 8447, 8448, 8445, 8443, 8454, 8446, 8446, 8444, 8441, 8446, 8447, 8444, 8449, 8446, 8442, 8443, 8446, 8444, 8447, 8439, 8439, 8447, 8444, 8444, 8443, 8441, 8447, 8451, 8444, 8447, 8449, 8447, 8448, 8448, 8445, 8447, 8447, 8448, 8448, 8449, 8448, 8447, 8448, 8448, 8452, 8447, 8447, 8447, 8445, 8450, 8452, 8451, 8444, 8442, 8448, 8446, 8446, 8444, 8445, 8447, 8448, 8450, 8445, 8445, 8443, 8445, 8445, 8445, 8448, 8447, 8449, 8444, 8443, 8444, 8452, 8449, 8446, 8449, 8445, 8444, 8442, 8446, 8447, 8447, 8446, 8444, 8446, 8445, 8449, 8447, 8443, 8443, 8442, 8447, 8448, 8442, 8448, 8446, 8449, 8446, 8444, 8448, 8447, 8445, 8444, 8447, 8443, 8446, 8447, 8446, 8448, 8450, 8446, 8447, 8447, 8449, 8448, 8449, 8449, 8449, 8451, 8448, 8445, 8446, 8446, 8450, 8450, 8450, 8451, 8451, 8446, 8449, 8451, 8452, 8453, 8450, 8451, 8454, 8451, 8453, 8450, 8451, 8455, 8449, 8450, 8452, 8450, 8450, 8449, 8449, 8450, 8450, 8448, 8448, 8452, 8448, 8450, 8448, 8449, 8450, 8449, 8452, 8449, 8449, 8451, 8450, 8451, 8452, 8450, 8451, 8450, 8452, 8450, 8451, 8450, 8447, 8447, 8448, 8450, 8450, 8454, 8456, 8457, 8453, 8452, 8453, 8452, 8451, 8451, 8451, 8452, 8452, 8456, 8450, 8452, 8452, 8452, 8452, 8451, 8450, 8451, 8453, 8453, 8454, 8452, 8453, 8453, 8454, 8454, 8454, 8456, 8457, 8456, 8458, 8456, 8456, 8456, 8456, 8457, 8456, 8457, 8460, 8456, 8457, 8459, 8456, 8457, 8456, 8456, 8458, 8459, 8457, 8455, 8456, 8454, 8454, 8454, 8454, 8454, 8455, 8454, 8455, 8454, 8453, 8454, 8454, 8458, 8455, 8453, 8453, 8455, 8454, 8457, 8456, 8455, 8458, 8458, 8455, 8455, 8455, 8455, 8458, 8455, 8456, 8457, 8458, 8456, 8456, 8456, 8457, 8457, 8457, 8458, 8457, 8458, 8457, 8457, 8459, 8459, 8457, 8459, 8460, 8461, 8462, 8462, 8462, 8462, 8462, 8464, 8463, 8463, 8464, 8463, 8463, 8463, 8462, 8462, 8463, 8463, 8464], [2.1334873081011976, 1.6117154896081094, 1.3435858874341642, 1.118955170706648, 0.9901307112582952, 0.8519259734137855, 0.7960956201359782, 0.6720702851986642, 0.5998755333945173, 0.5532262347451836, 0.48301226958062626, 0.43713906935077373, 0.4054099079755518, 0.37177860867561674, 0.3347236482029461, 0.3071926589220765, 0.27895724476902123, 0.2652053196232567, 0.24971868688894489, 0.22578091792710658, 0.21674447452601472, 0.19696616273484055, 0.18367647407713247, 0.1697081997249623, 0.15694410574943818, 0.14931148314777995, 0.1376326060327698, 0.12822834529691673, 0.12334225702609936, 0.11344356383141305, 0.10874642376376649, 0.10232741359823394, 0.09800310442716333, 0.09268095912167088, 0.08985211317214391, 0.08529139016670571, 0.08354889001668293, 0.08003507351151332, 0.07650548159073085, 0.0735963249949398, 0.07054144890418132, 0.06887572297685532, 0.0663065350160309, 0.06408076105973032, 0.061858574556072424, 0.06058942537298044, 0.05873446242587899, 0.05593898642402481, 0.055205914338667846, 0.05313535099205961, 0.051116209408344354, 0.049505308014994136, 0.04786572144766827, 0.04640639733502174, 0.045380854077187775, 0.04412889015222005, 0.04290577626118409, 0.04194561198588216, 0.04079484197387679, 0.039718523191149574, 0.038891299256091943, 0.03801167501946484, 0.03700659233294767, 0.03619008401446996, 0.0354101234112211, 0.03446877877563418, 0.03371575942835778, 0.032671918060232265, 0.03191790922420547, 0.031155109011162536, 0.030581435138702377, 0.029850450319083684, 0.02927639825367843, 0.028877550454782647, 0.028148984621107827, 0.027645446138674794, 0.027157308884780768, 0.02660532840891866, 0.02630193671251622, 0.025685865680059764, 0.025230066226201827, 0.024826864455365017, 0.0243866839572904, 0.02399530254399858, 0.023730621576772862, 0.02325836603295703, 0.02289041133860511, 0.022542631111450415, 0.02219589347435611, 0.021936901953618273, 0.02157206047399831, 0.021223795818202454, 0.02096752615216147, 0.02063715475299584, 0.020356029193518026, 0.020072665857854867, 0.019834001926711618, 0.01954121858171723, 0.019286776431325092, 0.01905240925628857, 0.01880649215622303, 0.01854682840467356, 0.018399883172119994, 0.018090713620616473, 0.01789813825489991, 0.01765118746282579, 0.017473085175173292, 0.017244494927694504, 0.01703486435487612, 0.016859129978839392, 0.01664474198599423, 0.016492894164797507, 0.016277872550429357, 0.01609761470488398, 0.01591808120014808, 0.01574090632673071, 0.015569273751146593, 0.015401941782147353, 0.015238524446743831, 0.015108287488949757, 0.014915727919302634, 0.014765483792022284, 0.014608352572538171, 0.014466773855429526, 0.014318795347529108, 0.014166768716930093, 0.01403021765009755, 0.013889891280038329, 0.013756143033653877, 0.013620655462519938, 0.013493108647379412, 0.013364012980409488, 0.013238234613230631, 0.013117270271950057, 0.01299690578155512, 0.012882657709243744, 0.012758697885839247, 0.012649429525397628, 0.012538584374843613, 0.012422775590650628, 0.012319840609501332, 0.012209649003281678, 0.012102365427467381, 0.012000446070765454, 0.011904631671549513, 0.011805864322997753, 0.011698740239416737, 0.011606371241906156, 0.011514374611308427, 0.011416940179436775, 0.011324325638086047, 0.011232413314906249, 0.011143023721712417, 0.011057575745872053, 0.010968259739096101, 0.01088128644534935, 0.010799772166372307, 0.010717817480123754, 0.010638889630533489, 0.010554400509895827, 0.010475138359528497, 0.010397616721467969, 0.010321260115164373, 0.010244649482948473, 0.010170491415277361, 0.01009958618454486, 0.010024345542467384, 0.009953348266001014, 0.009883756280116205, 0.009811861956010477, 0.009749156561601519, 0.009679778377319816, 0.009609249102981717, 0.009544288870302616, 0.009480519623452777, 0.009416154781809356, 0.009354569506204469, 0.00929067436973555, 0.009229670289513256, 0.009169356854431477, 0.009111816213489487, 0.0090543641894766, 0.008993560686706871, 0.008938581789090341, 0.008880962419123395, 0.008826301190224393, 0.008769672548831493, 0.008716483735853068, 0.00866460369160469, 0.00861036903221576, 0.008557577345388928, 0.00850933448370844, 0.008456169763878356, 0.008404662640716853, 0.008354622029987917, 0.00830697908651364, 0.008257180529236265, 0.008210014573194865, 0.008162098131249284, 0.00811539010760783, 0.008072431304794821, 0.00802376202280493, 0.007979104863057019, 0.007937625159070238, 0.007890554712392644, 0.00784790016459241, 0.007802929222624051, 0.007760549692860105, 0.007718367124741382, 0.007676850015661369, 0.007636902480344225, 0.007594654515272643, 0.007557266065446237, 0.007517549897936283, 0.007475327712505067, 0.007435933824650646, 0.007397819828337148, 0.007359477880672005, 0.0073208837720296705, 0.007283805820236689, 0.007247153976131099, 0.0072106084576830706, 0.0071737567683653304, 0.007137721603632793, 0.0071018808134562916, 0.007066331622788004, 0.007031389918120413, 0.006996545294324694, 0.00696280808553848, 0.0069292201735108635, 0.0068955718106028935, 0.006861764530310163, 0.006828683516656813, 0.006796285258697305, 0.006764736003988712, 0.006731546513205398, 0.006700374780671107, 0.006669692110701232, 0.0066375050596078275, 0.006607049930111248, 0.006575578731710099, 0.006545454671152349, 0.0065158945218681775, 0.006485383413394594, 0.006456175961449934, 0.006426848105220396, 0.006398061937999, 0.0063690181176364775, 0.0063400142312427694, 0.00631159377241229, 0.006283580444020859, 0.006256424756791315, 0.006228133859257206, 0.0062012656237021, 0.006173386086059297, 0.006146747634716472, 0.006119690002133509, 0.006093457222384939, 0.0060670225519100715, 0.006040967453545693, 0.006016303393940634, 0.005989868820592518, 0.005965394043346562, 0.005938647466701287, 0.005913173471753071, 0.00588804629659548, 0.005863373702903854, 0.005838688139919397, 0.005814238787509755, 0.005789700551838541, 0.0057654899095211255, 0.005741943688407352, 0.005717660700910018, 0.005694161758288953, 0.005670904531158865, 0.005647668912346308, 0.005624116044239148, 0.005601062368304801, 0.00557800370514958, 0.005555208869651533, 0.0055328375244215085, 0.005510002368060477, 0.0054877717401872585, 0.0054656957066184534, 0.0054436599852498045, 0.005421555530871548, 0.005399528537032674, 0.005377943555842746, 0.005356354186241844, 0.005334673757338759, 0.005313056392103426, 0.005291963549073837, 0.005270880039216974, 0.005249934586441436, 0.005229237625108339, 0.005208364767316311, 0.005187662045800864, 0.005167176146519333, 0.005147164009746564, 0.005126728309057134, 0.005106603389814559, 0.005086805388927815, 0.005067189496995626, 0.005047382562905665, 0.005028034574598833, 0.0050084702392899, 0.004989487783001165, 0.004970364946417611, 0.0049517185197455625, 0.004932909742147225, 0.004914067483989186, 0.004895392136366004, 0.004877447404631756, 0.004858917942767792, 0.00484093082756921, 0.004822977903949536, 0.0048051048027296156, 0.004787525172086458, 0.004769962311108191, 0.004752465103495572, 0.004735117711139855, 0.004718069015654681, 0.004700954567374447, 0.004684125026718987, 0.004667369207845105, 0.004650662161445141, 0.004634210332208765, 0.0046179946139440755, 0.0046015235949743655, 0.004585486665367072, 0.004569374762516196, 0.004553359198725704, 0.004537789650018289, 0.004521863397284219, 0.0045063059547557245, 0.004490830953853623, 0.004475399270124156, 0.0044601104423474735, 0.004444892712063275, 0.0044299373366120266, 0.00441495550594844, 0.00439999573863545, 0.0043851796595118855, 0.004370509967274126, 0.004356001437446666, 0.004341476075756548, 0.004327375344027786, 0.004312816833407688, 0.004298550589725273, 0.004284437102809583, 0.004270396041901047, 0.0042564485888378, 0.004242700773955589, 0.004228973608756927, 0.004215150732240222, 0.004201686478348546, 0.004188213373837653, 0.004174708057344338, 0.004161246420505441, 0.004147894111635248, 0.004134682185277353, 0.004121624502562014, 0.004108598803852993, 0.004095710810742628, 0.004082718920143551, 0.004070051476235988, 0.004056938332299395, 0.0040443297875509, 0.0040318003206056005, 0.004019181753384823, 0.004006705267628003, 0.003994326146730657, 0.003981902892525214, 0.00396964517256825, 0.003957553909764387, 0.003945315482560462, 0.003933276759706994, 0.003921424852837589, 0.003909363708513628, 0.00389741880422459, 0.003885686878142363, 0.003873948097592198, 0.0038623321179242914, 0.0038507623652346496, 0.003839250421204888, 0.0038278098301889668, 0.003816341730791096, 0.003805058387591798, 0.003793795821766855, 0.0037826058079641384, 0.003771464060147009, 0.0037604229342176718, 0.0037494234527342524, 0.003738512485251956, 0.003727631899579603, 0.003716802182262589, 0.003706068792614434, 0.0036954481497339015, 0.0036848192810071934, 0.0036742418585741245], [])
Overfitting: 84.64% Accuracy¶
- 1st $1000$ training images out of $50000$ MNIST training images
- $30$ neurons in hidden layer
- $0.5$ learning rate
- mini-batch size of $10$
- train for $400$ epochs
# @title
"""
overfitting
~~~~~~~~~~~
Plot graphs to illustrate the problem of overfitting.
"""
# Standard library
import json
import random
import sys
# My library
sys.path.append('../src/')
import mnist_loader
# import network2
# Third-party libraries
import matplotlib.pyplot as plt
import numpy as np
def main(filename, num_epochs,
training_cost_xmin=200,
test_accuracy_xmin=200,
test_cost_xmin=0,
training_accuracy_xmin=0,
training_set_size=1000,
lmbda=0.0):
"""``filename`` is the name of the file where the results will be
stored. ``num_epochs`` is the number of epochs to train for.
``training_set_size`` is the number of images to train on.
``lmbda`` is the regularization parameter. The other parameters
set the epochs at which to start plotting on the x axis.
"""
run_network(filename, num_epochs, training_set_size, lmbda)
make_plots(filename, num_epochs,
training_cost_xmin,
test_accuracy_xmin,
test_cost_xmin,
training_accuracy_xmin,
training_set_size)
def run_network(filename, num_epochs, training_set_size=1000, lmbda=0.0):
"""Train the network for ``num_epochs`` on ``training_set_size``
images, and store the results in ``filename``. Those results can
later be used by ``make_plots``. Note that the results are stored
to disk in large part because it's convenient not to have to
``run_network`` each time we want to make a plot (it's slow).
"""
# Make results more easily reproducible
random.seed(12345678)
np.random.seed(12345678)
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
validation_data = list(validation_data)
test_data = list(test_data)
net = Network2mat([784, 30, 10], cost=CrossEntropyCost())
net.large_weight_initializer()
test_cost, test_accuracy, training_cost, training_accuracy \
= net.SGD(training_data[:training_set_size], num_epochs, 10, 0.5,
evaluation_data=test_data, lmbda = lmbda,
monitor_evaluation_cost=True,
monitor_evaluation_accuracy=True,
monitor_training_cost=True,
monitor_training_accuracy=True)
f = open(filename, "w")
json.dump([test_cost, test_accuracy, training_cost, training_accuracy], f)
f.close()
def make_plots(filename, num_epochs,
training_cost_xmin=200,
test_accuracy_xmin=200,
test_cost_xmin=0,
training_accuracy_xmin=0,
training_set_size=1000):
"""Load the results from ``filename``, and generate the corresponding
plots. """
f = open(filename, "r")
test_cost, test_accuracy, training_cost, training_accuracy \
= json.load(f)
f.close()
plot_training_cost(training_cost, num_epochs, training_cost_xmin)
plot_test_accuracy(test_accuracy, num_epochs, test_accuracy_xmin)
plot_test_cost(test_cost, num_epochs, test_cost_xmin)
plot_training_accuracy(training_accuracy, num_epochs,
training_accuracy_xmin, training_set_size)
plot_overlay(test_accuracy, training_accuracy, num_epochs,
min(test_accuracy_xmin, training_accuracy_xmin),
training_set_size)
def plot_training_cost(training_cost, num_epochs, training_cost_xmin):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(training_cost_xmin, num_epochs),
training_cost[training_cost_xmin:num_epochs],
color='#2A6EA6')
ax.set_xlim([training_cost_xmin, num_epochs])
ax.grid(True)
ax.set_xlabel('Epoch')
ax.set_title('Cost on the training data')
plt.show()
def plot_test_accuracy(test_accuracy, num_epochs, test_accuracy_xmin):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(test_accuracy_xmin, num_epochs),
[accuracy/100.0
for accuracy in test_accuracy[test_accuracy_xmin:num_epochs]],
color='#2A6EA6')
ax.set_xlim([test_accuracy_xmin, num_epochs])
ax.grid(True)
ax.set_xlabel('Epoch')
ax.set_title('Accuracy (%) on the test data')
plt.show()
def plot_test_cost(test_cost, num_epochs, test_cost_xmin):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(test_cost_xmin, num_epochs),
test_cost[test_cost_xmin:num_epochs],
color='#2A6EA6')
ax.set_xlim([test_cost_xmin, num_epochs])
ax.grid(True)
ax.set_xlabel('Epoch')
ax.set_title('Cost on the test data')
plt.show()
def plot_training_accuracy(training_accuracy, num_epochs,
training_accuracy_xmin, training_set_size):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(training_accuracy_xmin, num_epochs),
[accuracy*100.0/training_set_size
for accuracy in training_accuracy[training_accuracy_xmin:num_epochs]],
color='#2A6EA6')
ax.set_xlim([training_accuracy_xmin, num_epochs])
ax.grid(True)
ax.set_xlabel('Epoch')
ax.set_title('Accuracy (%) on the training data')
plt.show()
def plot_overlay(test_accuracy, training_accuracy, num_epochs, xmin,
training_set_size):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(xmin, num_epochs),
[accuracy/100.0 for accuracy in test_accuracy],
color='#2A6EA6',
label="Accuracy on the test data")
ax.plot(np.arange(xmin, num_epochs),
[accuracy*100.0/training_set_size
for accuracy in training_accuracy],
color='#FFA933',
label="Accuracy on the training data")
ax.grid(True)
ax.set_xlim([xmin, num_epochs])
ax.set_xlabel('Epoch')
ax.set_ylim([90, 100])
plt.legend(loc="lower right")
plt.show()
# @title
%%time
if __name__ == "__main__":
filename = input("Enter a file name: ")
num_epochs = int(input("Enter the number of epochs to run for: "))
training_cost_xmin = int(input("training_cost_xmin (suggest 200): "))
test_accuracy_xmin = int(input("test_accuracy_xmin (suggest 200): "))
test_cost_xmin = int(input("test_cost_xmin (suggest 0): "))
training_accuracy_xmin = int(input("training_accuracy_xmin (suggest 0): "))
training_set_size = int(input("Training set size (suggest 1000): "))
lmbda = float(input("Enter the regularization parameter, lambda (suggest: 5.0): "))
main(filename, num_epochs, training_cost_xmin,
test_accuracy_xmin, test_cost_xmin, training_accuracy_xmin,
training_set_size, lmbda)
Enter a file name: train1000-2 Enter the number of epochs to run for: 400 training_cost_xmin (suggest 200): 200 test_accuracy_xmin (suggest 200): 200 test_cost_xmin (suggest 0): 0 training_accuracy_xmin (suggest 0): 0 Training set size (suggest 1000): 1000 Enter the regularization parameter, lambda (suggest: 5.0): 0 Epoch 0 training complete Cost on training data: 1.9075988236669716 Accuracy on training data: 654 / 1000 Cost on evaluation data: 2.15247583066795 Accuracy on evaluation data: 5689 / 10000 Epoch 1 training complete Cost on training data: 1.3963045571853507 Accuracy on training data: 780 / 1000 Cost on evaluation data: 1.7751670577479657 Accuracy on evaluation data: 6621 / 10000 Epoch 2 training complete Cost on training data: 1.1861623435401252 Accuracy on training data: 803 / 1000 Cost on evaluation data: 1.5886885172771115 Accuracy on evaluation data: 6936 / 10000 Epoch 3 training complete Cost on training data: 0.957877685241931 Accuracy on training data: 863 / 1000 Cost on evaluation data: 1.4534095873742074 Accuracy on evaluation data: 7408 / 10000 Epoch 4 training complete Cost on training data: 0.8336335846220341 Accuracy on training data: 889 / 1000 Cost on evaluation data: 1.379012913103051 Accuracy on evaluation data: 7542 / 10000 Epoch 5 training complete Cost on training data: 0.7522116437245072 Accuracy on training data: 912 / 1000 Cost on evaluation data: 1.351870710205931 Accuracy on evaluation data: 7597 / 10000 Epoch 6 training complete Cost on training data: 0.6413963637964828 Accuracy on training data: 930 / 1000 Cost on evaluation data: 1.2747740134443177 Accuracy on evaluation data: 7764 / 10000 Epoch 7 training complete Cost on training data: 0.5681974347964177 Accuracy on training data: 938 / 1000 Cost on evaluation data: 1.2447921820714714 Accuracy on evaluation data: 7807 / 10000 Epoch 8 training complete Cost on training data: 0.5226136255046645 Accuracy on training data: 945 / 1000 Cost on evaluation data: 1.230372968043675 Accuracy on evaluation data: 7867 / 10000 Epoch 9 training complete Cost on training data: 0.4717990360357309 Accuracy on training data: 955 / 1000 Cost on evaluation data: 1.230570058846599 Accuracy on evaluation data: 7906 / 10000 Epoch 10 training complete Cost on training data: 0.4184664793143509 Accuracy on training data: 960 / 1000 Cost on evaluation data: 1.2366302986961217 Accuracy on evaluation data: 7896 / 10000 Epoch 11 training complete Cost on training data: 0.41347693897190724 Accuracy on training data: 962 / 1000 Cost on evaluation data: 1.2208620271618362 Accuracy on evaluation data: 7901 / 10000 Epoch 12 training complete Cost on training data: 0.3521037939208232 Accuracy on training data: 967 / 1000 Cost on evaluation data: 1.2121660360660207 Accuracy on evaluation data: 7955 / 10000 Epoch 13 training complete Cost on training data: 0.32089877700564823 Accuracy on training data: 971 / 1000 Cost on evaluation data: 1.1979290776913063 Accuracy on evaluation data: 8004 / 10000 Epoch 14 training complete Cost on training data: 0.3029826295627433 Accuracy on training data: 976 / 1000 Cost on evaluation data: 1.2022012227364014 Accuracy on evaluation data: 7999 / 10000 Epoch 15 training complete Cost on training data: 0.27898399755520775 Accuracy on training data: 975 / 1000 Cost on evaluation data: 1.2030782451273618 Accuracy on evaluation data: 8046 / 10000 Epoch 16 training complete Cost on training data: 0.25395570439554827 Accuracy on training data: 980 / 1000 Cost on evaluation data: 1.1804909392296614 Accuracy on evaluation data: 8070 / 10000 Epoch 17 training complete Cost on training data: 0.2390643036330512 Accuracy on training data: 980 / 1000 Cost on evaluation data: 1.1844694690376982 Accuracy on evaluation data: 8077 / 10000 Epoch 18 training complete Cost on training data: 0.220000346242534 Accuracy on training data: 980 / 1000 Cost on evaluation data: 1.1959815107293714 Accuracy on evaluation data: 8060 / 10000 Epoch 19 training complete Cost on training data: 0.20275966619724267 Accuracy on training data: 986 / 1000 Cost on evaluation data: 1.1889368752266372 Accuracy on evaluation data: 8107 / 10000 Epoch 20 training complete Cost on training data: 0.18974717206036806 Accuracy on training data: 984 / 1000 Cost on evaluation data: 1.1908627012916029 Accuracy on evaluation data: 8116 / 10000 Epoch 21 training complete Cost on training data: 0.17978632075415268 Accuracy on training data: 988 / 1000 Cost on evaluation data: 1.206416371201434 Accuracy on evaluation data: 8138 / 10000 Epoch 22 training complete Cost on training data: 0.1696180191589008 Accuracy on training data: 986 / 1000 Cost on evaluation data: 1.200500528937712 Accuracy on evaluation data: 8133 / 10000 Epoch 23 training complete Cost on training data: 0.16066829167854627 Accuracy on training data: 990 / 1000 Cost on evaluation data: 1.1916032495370887 Accuracy on evaluation data: 8125 / 10000 Epoch 24 training complete Cost on training data: 0.15979479548060732 Accuracy on training data: 990 / 1000 Cost on evaluation data: 1.2142359462462253 Accuracy on evaluation data: 8084 / 10000 Epoch 25 training complete Cost on training data: 0.14645192808497318 Accuracy on training data: 990 / 1000 Cost on evaluation data: 1.2030957487435563 Accuracy on evaluation data: 8133 / 10000 Epoch 26 training complete Cost on training data: 0.14361544306842858 Accuracy on training data: 991 / 1000 Cost on evaluation data: 1.2132069735876854 Accuracy on evaluation data: 8120 / 10000 Epoch 27 training complete Cost on training data: 0.13293324613026067 Accuracy on training data: 994 / 1000 Cost on evaluation data: 1.2110816888558171 Accuracy on evaluation data: 8136 / 10000 Epoch 28 training complete Cost on training data: 0.12809597159620803 Accuracy on training data: 994 / 1000 Cost on evaluation data: 1.221906351326292 Accuracy on evaluation data: 8112 / 10000 Epoch 29 training complete Cost on training data: 0.12121702604589271 Accuracy on training data: 996 / 1000 Cost on evaluation data: 1.217029749855143 Accuracy on evaluation data: 8143 / 10000 Epoch 30 training complete Cost on training data: 0.12155180353404105 Accuracy on training data: 994 / 1000 Cost on evaluation data: 1.257542166840531 Accuracy on evaluation data: 8132 / 10000 Epoch 31 training complete Cost on training data: 0.11233999927446671 Accuracy on training data: 996 / 1000 Cost on evaluation data: 1.2295626466574059 Accuracy on evaluation data: 8143 / 10000 Epoch 32 training complete Cost on training data: 0.10746363413839789 Accuracy on training data: 996 / 1000 Cost on evaluation data: 1.2264917284804158 Accuracy on evaluation data: 8133 / 10000 Epoch 33 training complete Cost on training data: 0.1048020832388671 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2447689499079413 Accuracy on evaluation data: 8131 / 10000 Epoch 34 training complete Cost on training data: 0.09944015208409258 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2476905216865046 Accuracy on evaluation data: 8132 / 10000 Epoch 35 training complete Cost on training data: 0.09715708214560319 Accuracy on training data: 997 / 1000 Cost on evaluation data: 1.2481767157761254 Accuracy on evaluation data: 8135 / 10000 Epoch 36 training complete Cost on training data: 0.09226811429853458 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2470100151134607 Accuracy on evaluation data: 8137 / 10000 Epoch 37 training complete Cost on training data: 0.09030924500475625 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2554195954781409 Accuracy on evaluation data: 8160 / 10000 Epoch 38 training complete Cost on training data: 0.08682752591099029 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2622992445083403 Accuracy on evaluation data: 8147 / 10000 Epoch 39 training complete Cost on training data: 0.08384814938783021 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2588102938211014 Accuracy on evaluation data: 8142 / 10000 Epoch 40 training complete Cost on training data: 0.08157297192245669 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2631299632261273 Accuracy on evaluation data: 8143 / 10000 Epoch 41 training complete Cost on training data: 0.08020944311658823 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.263860917909261 Accuracy on evaluation data: 8159 / 10000 Epoch 42 training complete Cost on training data: 0.077013592547164 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2727564175269843 Accuracy on evaluation data: 8157 / 10000 Epoch 43 training complete Cost on training data: 0.07501717577506369 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2616965135181386 Accuracy on evaluation data: 8157 / 10000 Epoch 44 training complete Cost on training data: 0.07256130905007778 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2752269079869292 Accuracy on evaluation data: 8161 / 10000 Epoch 45 training complete Cost on training data: 0.0704409498768075 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2801470505634474 Accuracy on evaluation data: 8160 / 10000 Epoch 46 training complete Cost on training data: 0.06863010836166256 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2789606476891509 Accuracy on evaluation data: 8173 / 10000 Epoch 47 training complete Cost on training data: 0.06648076082379294 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.279253509388061 Accuracy on evaluation data: 8168 / 10000 Epoch 48 training complete Cost on training data: 0.06497266858128088 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2754182080246854 Accuracy on evaluation data: 8173 / 10000 Epoch 49 training complete Cost on training data: 0.06297874601918942 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2831719062170928 Accuracy on evaluation data: 8180 / 10000 Epoch 50 training complete Cost on training data: 0.06244284088384119 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.292793526990941 Accuracy on evaluation data: 8168 / 10000 Epoch 51 training complete Cost on training data: 0.06062325729258808 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.28716872806879 Accuracy on evaluation data: 8189 / 10000 Epoch 52 training complete Cost on training data: 0.05844892715523189 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2905043673963854 Accuracy on evaluation data: 8176 / 10000 Epoch 53 training complete Cost on training data: 0.057037591237637436 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.289332558328879 Accuracy on evaluation data: 8190 / 10000 Epoch 54 training complete Cost on training data: 0.05586136017969852 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.289541071379457 Accuracy on evaluation data: 8187 / 10000 Epoch 55 training complete Cost on training data: 0.05443515023471758 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2990823487570156 Accuracy on evaluation data: 8194 / 10000 Epoch 56 training complete Cost on training data: 0.05319308117057278 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3000239962698485 Accuracy on evaluation data: 8194 / 10000 Epoch 57 training complete Cost on training data: 0.05161039604476325 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3043509672082498 Accuracy on evaluation data: 8198 / 10000 Epoch 58 training complete Cost on training data: 0.05083871731572437 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3022715294113845 Accuracy on evaluation data: 8192 / 10000 Epoch 59 training complete Cost on training data: 0.04976307728372554 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3027124826623515 Accuracy on evaluation data: 8204 / 10000 Epoch 60 training complete Cost on training data: 0.04889624941336269 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.311817808052567 Accuracy on evaluation data: 8205 / 10000 Epoch 61 training complete Cost on training data: 0.047355358467197774 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3084747578048694 Accuracy on evaluation data: 8209 / 10000 Epoch 62 training complete Cost on training data: 0.046690844247366935 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3165304367735435 Accuracy on evaluation data: 8199 / 10000 Epoch 63 training complete Cost on training data: 0.04549230589169085 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3184831225330333 Accuracy on evaluation data: 8224 / 10000 Epoch 64 training complete Cost on training data: 0.04439579507040581 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.3176685968090527 Accuracy on evaluation data: 8220 / 10000 Epoch 65 training complete Cost on training data: 0.04380936264543519 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3204777091429898 Accuracy on evaluation data: 8224 / 10000 Epoch 66 training complete Cost on training data: 0.04295522249463422 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.322150656281547 Accuracy on evaluation data: 8227 / 10000 Epoch 67 training complete Cost on training data: 0.04217965757386699 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3312918605319168 Accuracy on evaluation data: 8202 / 10000 Epoch 68 training complete Cost on training data: 0.04111553983491183 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3268372062185354 Accuracy on evaluation data: 8218 / 10000 Epoch 69 training complete Cost on training data: 0.04011753237381811 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3293706774002778 Accuracy on evaluation data: 8221 / 10000 Epoch 70 training complete Cost on training data: 0.03940713880724735 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.330451004552 Accuracy on evaluation data: 8222 / 10000 Epoch 71 training complete Cost on training data: 0.03864022634880402 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3244472119366424 Accuracy on evaluation data: 8227 / 10000 Epoch 72 training complete Cost on training data: 0.03819322155100375 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3356105636135454 Accuracy on evaluation data: 8226 / 10000 Epoch 73 training complete Cost on training data: 0.03795210269276921 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.334786683448296 Accuracy on evaluation data: 8231 / 10000 Epoch 74 training complete Cost on training data: 0.03665713709932965 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3317450719054986 Accuracy on evaluation data: 8238 / 10000 Epoch 75 training complete Cost on training data: 0.036224344977773305 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3405366155623732 Accuracy on evaluation data: 8235 / 10000 Epoch 76 training complete Cost on training data: 0.03594795902601789 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3460334504537177 Accuracy on evaluation data: 8220 / 10000 Epoch 77 training complete Cost on training data: 0.035029786923706556 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3443514365483307 Accuracy on evaluation data: 8222 / 10000 Epoch 78 training complete Cost on training data: 0.03422378002812577 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3470272182018044 Accuracy on evaluation data: 8220 / 10000 Epoch 79 training complete Cost on training data: 0.03377978719514206 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3426779369036395 Accuracy on evaluation data: 8226 / 10000 Epoch 80 training complete Cost on training data: 0.033138308715480395 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3447548765895374 Accuracy on evaluation data: 8232 / 10000 Epoch 81 training complete Cost on training data: 0.03268605845639425 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3450526932437048 Accuracy on evaluation data: 8251 / 10000 Epoch 82 training complete Cost on training data: 0.03209119586792485 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3496497414944504 Accuracy on evaluation data: 8228 / 10000 Epoch 83 training complete Cost on training data: 0.031779354602804455 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3560790776204301 Accuracy on evaluation data: 8234 / 10000 Epoch 84 training complete Cost on training data: 0.031158275092867366 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3523924565970855 Accuracy on evaluation data: 8230 / 10000 Epoch 85 training complete Cost on training data: 0.030822552964318604 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3580212024739295 Accuracy on evaluation data: 8232 / 10000 Epoch 86 training complete Cost on training data: 0.030286835132469672 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3530244927734938 Accuracy on evaluation data: 8242 / 10000 Epoch 87 training complete Cost on training data: 0.029829457325905237 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3558996500427245 Accuracy on evaluation data: 8237 / 10000 Epoch 88 training complete Cost on training data: 0.0294069597301358 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3617463601866189 Accuracy on evaluation data: 8231 / 10000 Epoch 89 training complete Cost on training data: 0.02905029395246835 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3630566055654625 Accuracy on evaluation data: 8238 / 10000 Epoch 90 training complete Cost on training data: 0.028582596150161302 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3643957249849021 Accuracy on evaluation data: 8233 / 10000 Epoch 91 training complete Cost on training data: 0.028324914762123725 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3677404770063595 Accuracy on evaluation data: 8248 / 10000 Epoch 92 training complete Cost on training data: 0.02781108236483961 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3717879363863614 Accuracy on evaluation data: 8229 / 10000 Epoch 93 training complete Cost on training data: 0.027439935185696013 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3733372913909754 Accuracy on evaluation data: 8240 / 10000 Epoch 94 training complete Cost on training data: 0.027090856085152184 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3693605126806525 Accuracy on evaluation data: 8246 / 10000 Epoch 95 training complete Cost on training data: 0.026796102134257774 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3765848871958497 Accuracy on evaluation data: 8239 / 10000 Epoch 96 training complete Cost on training data: 0.02634836198227556 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.375382197351273 Accuracy on evaluation data: 8241 / 10000 Epoch 97 training complete Cost on training data: 0.026166660210878483 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3764636309870855 Accuracy on evaluation data: 8247 / 10000 Epoch 98 training complete Cost on training data: 0.02570743482697377 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3795183694956978 Accuracy on evaluation data: 8241 / 10000 Epoch 99 training complete Cost on training data: 0.02546962734965154 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3802676621668803 Accuracy on evaluation data: 8245 / 10000 Epoch 100 training complete Cost on training data: 0.025135070352877868 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3831611835252005 Accuracy on evaluation data: 8254 / 10000 Epoch 101 training complete Cost on training data: 0.024857003022192948 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.387021430560139 Accuracy on evaluation data: 8255 / 10000 Epoch 102 training complete Cost on training data: 0.024415660700624307 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3869078184979873 Accuracy on evaluation data: 8246 / 10000 Epoch 103 training complete Cost on training data: 0.024189005338626866 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3861328385240215 Accuracy on evaluation data: 8260 / 10000 Epoch 104 training complete Cost on training data: 0.023930930374165098 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3892384906478257 Accuracy on evaluation data: 8254 / 10000 Epoch 105 training complete Cost on training data: 0.02361683607315844 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3905883067110325 Accuracy on evaluation data: 8254 / 10000 Epoch 106 training complete Cost on training data: 0.023304495566227972 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3926414354817855 Accuracy on evaluation data: 8255 / 10000 Epoch 107 training complete Cost on training data: 0.023042273978151624 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3918417501112124 Accuracy on evaluation data: 8252 / 10000 Epoch 108 training complete Cost on training data: 0.022777293795288162 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3946393780268975 Accuracy on evaluation data: 8251 / 10000 Epoch 109 training complete Cost on training data: 0.022534764059725383 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.397671645052809 Accuracy on evaluation data: 8255 / 10000 Epoch 110 training complete Cost on training data: 0.02223438575040059 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.397158494603118 Accuracy on evaluation data: 8255 / 10000 Epoch 111 training complete Cost on training data: 0.02208784166772305 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.3961993057243174 Accuracy on evaluation data: 8253 / 10000 Epoch 112 training complete Cost on training data: 0.021762273396763464 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.402263097584314 Accuracy on evaluation data: 8256 / 10000 Epoch 113 training complete Cost on training data: 0.02148852198993692 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4025027526609668 Accuracy on evaluation data: 8262 / 10000 Epoch 114 training complete Cost on training data: 0.02130258436273831 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4062743842167909 Accuracy on evaluation data: 8257 / 10000 Epoch 115 training complete Cost on training data: 0.02102236595522121 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4080591973252832 Accuracy on evaluation data: 8264 / 10000 Epoch 116 training complete Cost on training data: 0.020844312713047174 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.410027990877223 Accuracy on evaluation data: 8255 / 10000 Epoch 117 training complete Cost on training data: 0.02058027372039338 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4101225365206775 Accuracy on evaluation data: 8260 / 10000 Epoch 118 training complete Cost on training data: 0.020341870116987782 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.410622305822487 Accuracy on evaluation data: 8258 / 10000 Epoch 119 training complete Cost on training data: 0.020193724092252695 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4145837512197723 Accuracy on evaluation data: 8256 / 10000 Epoch 120 training complete Cost on training data: 0.01992633186260965 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4134389838644985 Accuracy on evaluation data: 8257 / 10000 Epoch 121 training complete Cost on training data: 0.019757311487731036 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4129552080415986 Accuracy on evaluation data: 8257 / 10000 Epoch 122 training complete Cost on training data: 0.01954288456104957 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4177607576725875 Accuracy on evaluation data: 8255 / 10000 Epoch 123 training complete Cost on training data: 0.019333246805970948 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.419387030296146 Accuracy on evaluation data: 8265 / 10000 Epoch 124 training complete Cost on training data: 0.01914627828533984 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4233036082510475 Accuracy on evaluation data: 8262 / 10000 Epoch 125 training complete Cost on training data: 0.018970773036744916 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4207850308481844 Accuracy on evaluation data: 8265 / 10000 Epoch 126 training complete Cost on training data: 0.018783260619228612 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4229071574897914 Accuracy on evaluation data: 8258 / 10000 Epoch 127 training complete Cost on training data: 0.01861739769238104 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.425685222963037 Accuracy on evaluation data: 8264 / 10000 Epoch 128 training complete Cost on training data: 0.018435287515398965 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4283066511203715 Accuracy on evaluation data: 8263 / 10000 Epoch 129 training complete Cost on training data: 0.018286089959563163 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4293618030946014 Accuracy on evaluation data: 8265 / 10000 Epoch 130 training complete Cost on training data: 0.01812446522708623 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4310825139939893 Accuracy on evaluation data: 8267 / 10000 Epoch 131 training complete Cost on training data: 0.017961369730303548 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4282144296482868 Accuracy on evaluation data: 8265 / 10000 Epoch 132 training complete Cost on training data: 0.017760121510890896 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4322339476144366 Accuracy on evaluation data: 8266 / 10000 Epoch 133 training complete Cost on training data: 0.017646533059025166 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.434450880282216 Accuracy on evaluation data: 8267 / 10000 Epoch 134 training complete Cost on training data: 0.017475043716433714 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.434732922635616 Accuracy on evaluation data: 8268 / 10000 Epoch 135 training complete Cost on training data: 0.01734564633373677 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.437643377410993 Accuracy on evaluation data: 8270 / 10000 Epoch 136 training complete Cost on training data: 0.017147511489556407 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4346645687058328 Accuracy on evaluation data: 8268 / 10000 Epoch 137 training complete Cost on training data: 0.017009193152674285 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.435957488303919 Accuracy on evaluation data: 8263 / 10000 Epoch 138 training complete Cost on training data: 0.016858186884646947 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4380956950907162 Accuracy on evaluation data: 8265 / 10000 Epoch 139 training complete Cost on training data: 0.016720646928311267 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4410238942110818 Accuracy on evaluation data: 8268 / 10000 Epoch 140 training complete Cost on training data: 0.016598430655668503 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4449023958522522 Accuracy on evaluation data: 8270 / 10000 Epoch 141 training complete Cost on training data: 0.016428012815438174 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4440189903773473 Accuracy on evaluation data: 8270 / 10000 Epoch 142 training complete Cost on training data: 0.016298803110622186 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4423420615804867 Accuracy on evaluation data: 8266 / 10000 Epoch 143 training complete Cost on training data: 0.01617218740738815 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4439811983458035 Accuracy on evaluation data: 8271 / 10000 Epoch 144 training complete Cost on training data: 0.016043214646873288 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.446720940768649 Accuracy on evaluation data: 8269 / 10000 Epoch 145 training complete Cost on training data: 0.015902712760033973 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4478508201337381 Accuracy on evaluation data: 8266 / 10000 Epoch 146 training complete Cost on training data: 0.015785338295322714 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4473790496382208 Accuracy on evaluation data: 8266 / 10000 Epoch 147 training complete Cost on training data: 0.015655610960450456 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.450634094099597 Accuracy on evaluation data: 8264 / 10000 Epoch 148 training complete Cost on training data: 0.015538388797205305 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.45006822529315 Accuracy on evaluation data: 8274 / 10000 Epoch 149 training complete Cost on training data: 0.015410941936529143 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4524579486639575 Accuracy on evaluation data: 8273 / 10000 Epoch 150 training complete Cost on training data: 0.0152857747012854 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4539467327389253 Accuracy on evaluation data: 8271 / 10000 Epoch 151 training complete Cost on training data: 0.015171456001645385 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4562911591979164 Accuracy on evaluation data: 8281 / 10000 Epoch 152 training complete Cost on training data: 0.015059041724475097 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4578653681468134 Accuracy on evaluation data: 8271 / 10000 Epoch 153 training complete Cost on training data: 0.014930753674301758 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4585771793423556 Accuracy on evaluation data: 8271 / 10000 Epoch 154 training complete Cost on training data: 0.014823944184983852 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.459296871379549 Accuracy on evaluation data: 8267 / 10000 Epoch 155 training complete Cost on training data: 0.014711387373920718 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4611042398343053 Accuracy on evaluation data: 8274 / 10000 Epoch 156 training complete Cost on training data: 0.01460827251896262 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4638433915171474 Accuracy on evaluation data: 8276 / 10000 Epoch 157 training complete Cost on training data: 0.014493847710064806 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4638396054779341 Accuracy on evaluation data: 8275 / 10000 Epoch 158 training complete Cost on training data: 0.014409518604683896 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.463682311355057 Accuracy on evaluation data: 8271 / 10000 Epoch 159 training complete Cost on training data: 0.014285795296330341 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4660814996201126 Accuracy on evaluation data: 8282 / 10000 Epoch 160 training complete Cost on training data: 0.01417753956565658 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4661121797970065 Accuracy on evaluation data: 8271 / 10000 Epoch 161 training complete Cost on training data: 0.014073144730616381 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4691084073977518 Accuracy on evaluation data: 8280 / 10000 Epoch 162 training complete Cost on training data: 0.013974520787591172 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4678470727178272 Accuracy on evaluation data: 8281 / 10000 Epoch 163 training complete Cost on training data: 0.01387479292599548 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4689206912517845 Accuracy on evaluation data: 8274 / 10000 Epoch 164 training complete Cost on training data: 0.013804255227650433 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4701044323366772 Accuracy on evaluation data: 8270 / 10000 Epoch 165 training complete Cost on training data: 0.01367398135085149 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4723420386662769 Accuracy on evaluation data: 8274 / 10000 Epoch 166 training complete Cost on training data: 0.013586645142879546 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.474399565865029 Accuracy on evaluation data: 8269 / 10000 Epoch 167 training complete Cost on training data: 0.013482023497314505 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4746436031466308 Accuracy on evaluation data: 8274 / 10000 Epoch 168 training complete Cost on training data: 0.013388518698839932 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4762899794337074 Accuracy on evaluation data: 8268 / 10000 Epoch 169 training complete Cost on training data: 0.013296379898317731 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.476170073641381 Accuracy on evaluation data: 8274 / 10000 Epoch 170 training complete Cost on training data: 0.013206612541539937 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4762451289483594 Accuracy on evaluation data: 8283 / 10000 Epoch 171 training complete Cost on training data: 0.01311791812918744 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4814631982788284 Accuracy on evaluation data: 8279 / 10000 Epoch 172 training complete Cost on training data: 0.013026801812712813 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.480090087570288 Accuracy on evaluation data: 8281 / 10000 Epoch 173 training complete Cost on training data: 0.012956105744968105 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4819430698183 Accuracy on evaluation data: 8277 / 10000 Epoch 174 training complete Cost on training data: 0.01284616635895308 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4831807265130927 Accuracy on evaluation data: 8276 / 10000 Epoch 175 training complete Cost on training data: 0.012768774884022768 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4846064456092476 Accuracy on evaluation data: 8272 / 10000 Epoch 176 training complete Cost on training data: 0.01267280560620696 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4872779405228755 Accuracy on evaluation data: 8272 / 10000 Epoch 177 training complete Cost on training data: 0.0125942958592458 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.487256124755324 Accuracy on evaluation data: 8277 / 10000 Epoch 178 training complete Cost on training data: 0.012509456326562496 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.488762669336739 Accuracy on evaluation data: 8277 / 10000 Epoch 179 training complete Cost on training data: 0.012426678021030951 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4893045636363336 Accuracy on evaluation data: 8274 / 10000 Epoch 180 training complete Cost on training data: 0.012350459166636844 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4908376388339077 Accuracy on evaluation data: 8271 / 10000 Epoch 181 training complete Cost on training data: 0.012272095528212327 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.490305823188322 Accuracy on evaluation data: 8273 / 10000 Epoch 182 training complete Cost on training data: 0.012195359196871949 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4915766684742984 Accuracy on evaluation data: 8274 / 10000 Epoch 183 training complete Cost on training data: 0.01211008938134288 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4934363638091046 Accuracy on evaluation data: 8276 / 10000 Epoch 184 training complete Cost on training data: 0.012034043691115366 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4958805180457355 Accuracy on evaluation data: 8275 / 10000 Epoch 185 training complete Cost on training data: 0.011959648231842602 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4953044018341621 Accuracy on evaluation data: 8275 / 10000 Epoch 186 training complete Cost on training data: 0.01188271539501657 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4982862905659715 Accuracy on evaluation data: 8278 / 10000 Epoch 187 training complete Cost on training data: 0.011805570974375115 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4984599963716536 Accuracy on evaluation data: 8271 / 10000 Epoch 188 training complete Cost on training data: 0.011739130248085065 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.4999222456417727 Accuracy on evaluation data: 8276 / 10000 Epoch 189 training complete Cost on training data: 0.011662019634965269 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5022406106655926 Accuracy on evaluation data: 8273 / 10000 Epoch 190 training complete Cost on training data: 0.011588585105491449 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.501004429202565 Accuracy on evaluation data: 8275 / 10000 Epoch 191 training complete Cost on training data: 0.011513318029394645 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5027807152449528 Accuracy on evaluation data: 8271 / 10000 Epoch 192 training complete Cost on training data: 0.01144913787556783 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5042102278247018 Accuracy on evaluation data: 8277 / 10000 Epoch 193 training complete Cost on training data: 0.011380722462723288 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5043459284240497 Accuracy on evaluation data: 8276 / 10000 Epoch 194 training complete Cost on training data: 0.011310841748858403 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5057309393285034 Accuracy on evaluation data: 8274 / 10000 Epoch 195 training complete Cost on training data: 0.011237910520928911 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5098251083004055 Accuracy on evaluation data: 8277 / 10000 Epoch 196 training complete Cost on training data: 0.011167825740054814 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5083522521607542 Accuracy on evaluation data: 8273 / 10000 Epoch 197 training complete Cost on training data: 0.011098893190490879 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.509689117678321 Accuracy on evaluation data: 8278 / 10000 Epoch 198 training complete Cost on training data: 0.011033184264359744 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5094626586832172 Accuracy on evaluation data: 8273 / 10000 Epoch 199 training complete Cost on training data: 0.010969241073128723 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5111954514857135 Accuracy on evaluation data: 8274 / 10000 Epoch 200 training complete Cost on training data: 0.010901688250409856 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5133778293044429 Accuracy on evaluation data: 8281 / 10000 Epoch 201 training complete Cost on training data: 0.010836919854817734 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.512899045469996 Accuracy on evaluation data: 8276 / 10000 Epoch 202 training complete Cost on training data: 0.01077363280325336 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5141862424925208 Accuracy on evaluation data: 8283 / 10000 Epoch 203 training complete Cost on training data: 0.010710238786932684 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.516021833075121 Accuracy on evaluation data: 8278 / 10000 Epoch 204 training complete Cost on training data: 0.01064802523183221 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5174300992779384 Accuracy on evaluation data: 8274 / 10000 Epoch 205 training complete Cost on training data: 0.01058728437304496 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5175545538577204 Accuracy on evaluation data: 8284 / 10000 Epoch 206 training complete Cost on training data: 0.010524093452105442 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5171366684972472 Accuracy on evaluation data: 8284 / 10000 Epoch 207 training complete Cost on training data: 0.010464047409633297 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5183459691008394 Accuracy on evaluation data: 8279 / 10000 Epoch 208 training complete Cost on training data: 0.010405035820926401 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5199626708782477 Accuracy on evaluation data: 8289 / 10000 Epoch 209 training complete Cost on training data: 0.010346821567523935 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5201538511505353 Accuracy on evaluation data: 8281 / 10000 Epoch 210 training complete Cost on training data: 0.010286450474074083 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5209364473701017 Accuracy on evaluation data: 8280 / 10000 Epoch 211 training complete Cost on training data: 0.010229782911356983 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5221262852400896 Accuracy on evaluation data: 8283 / 10000 Epoch 212 training complete Cost on training data: 0.010174373980374391 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5232705932012571 Accuracy on evaluation data: 8282 / 10000 Epoch 213 training complete Cost on training data: 0.010117792555784311 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5239829918497494 Accuracy on evaluation data: 8285 / 10000 Epoch 214 training complete Cost on training data: 0.01006160721237948 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5255351952080605 Accuracy on evaluation data: 8288 / 10000 Epoch 215 training complete Cost on training data: 0.010005994402084191 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5264244103313802 Accuracy on evaluation data: 8285 / 10000 Epoch 216 training complete Cost on training data: 0.009945515986459671 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5269862218334829 Accuracy on evaluation data: 8288 / 10000 Epoch 217 training complete Cost on training data: 0.009893803245005467 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.526672626053213 Accuracy on evaluation data: 8290 / 10000 Epoch 218 training complete Cost on training data: 0.009839790219893514 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5276038641202723 Accuracy on evaluation data: 8288 / 10000 Epoch 219 training complete Cost on training data: 0.009783638865064177 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.529722582070876 Accuracy on evaluation data: 8289 / 10000 Epoch 220 training complete Cost on training data: 0.009729608663313141 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5307905012686494 Accuracy on evaluation data: 8282 / 10000 Epoch 221 training complete Cost on training data: 0.009676012006254286 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5315590400491936 Accuracy on evaluation data: 8284 / 10000 Epoch 222 training complete Cost on training data: 0.00962409709422437 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5322365418043955 Accuracy on evaluation data: 8284 / 10000 Epoch 223 training complete Cost on training data: 0.009572481113296616 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5337122190780228 Accuracy on evaluation data: 8285 / 10000 Epoch 224 training complete Cost on training data: 0.009520489595211335 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5351252517660996 Accuracy on evaluation data: 8288 / 10000 Epoch 225 training complete Cost on training data: 0.00946919852042269 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5349021748364333 Accuracy on evaluation data: 8290 / 10000 Epoch 226 training complete Cost on training data: 0.009419269761729595 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5361619412199559 Accuracy on evaluation data: 8290 / 10000 Epoch 227 training complete Cost on training data: 0.00937021194318918 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5364592230633645 Accuracy on evaluation data: 8283 / 10000 Epoch 228 training complete Cost on training data: 0.009321031078397397 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5372351166971725 Accuracy on evaluation data: 8288 / 10000 Epoch 229 training complete Cost on training data: 0.009272947056972252 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5369664558159832 Accuracy on evaluation data: 8286 / 10000 Epoch 230 training complete Cost on training data: 0.009224948364530684 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5388243478923795 Accuracy on evaluation data: 8288 / 10000 Epoch 231 training complete Cost on training data: 0.00917793292602622 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5396987958085369 Accuracy on evaluation data: 8287 / 10000 Epoch 232 training complete Cost on training data: 0.009129481267253584 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5398790048659416 Accuracy on evaluation data: 8287 / 10000 Epoch 233 training complete Cost on training data: 0.0090851786527295 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5403340732822746 Accuracy on evaluation data: 8292 / 10000 Epoch 234 training complete Cost on training data: 0.009043266960554519 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5430000141831488 Accuracy on evaluation data: 8291 / 10000 Epoch 235 training complete Cost on training data: 0.008995195976958914 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5420335420285523 Accuracy on evaluation data: 8291 / 10000 Epoch 236 training complete Cost on training data: 0.008950670950450762 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5423219876631749 Accuracy on evaluation data: 8289 / 10000 Epoch 237 training complete Cost on training data: 0.008905987780674442 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5443883818726836 Accuracy on evaluation data: 8292 / 10000 Epoch 238 training complete Cost on training data: 0.00886147955832109 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5450416932433921 Accuracy on evaluation data: 8294 / 10000 Epoch 239 training complete Cost on training data: 0.008819365937289459 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5460247044115711 Accuracy on evaluation data: 8285 / 10000 Epoch 240 training complete Cost on training data: 0.008777622814209884 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5470096421353945 Accuracy on evaluation data: 8286 / 10000 Epoch 241 training complete Cost on training data: 0.008733713683806727 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5474543288446543 Accuracy on evaluation data: 8284 / 10000 Epoch 242 training complete Cost on training data: 0.008692693217847578 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5477454350223538 Accuracy on evaluation data: 8288 / 10000 Epoch 243 training complete Cost on training data: 0.00864955033988838 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5484336171997362 Accuracy on evaluation data: 8290 / 10000 Epoch 244 training complete Cost on training data: 0.008608598619274009 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.549349833676881 Accuracy on evaluation data: 8289 / 10000 Epoch 245 training complete Cost on training data: 0.008570220026530765 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5493258744155092 Accuracy on evaluation data: 8293 / 10000 Epoch 246 training complete Cost on training data: 0.008528773791209502 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5506108702814045 Accuracy on evaluation data: 8289 / 10000 Epoch 247 training complete Cost on training data: 0.008488499093182864 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.550905591527031 Accuracy on evaluation data: 8292 / 10000 Epoch 248 training complete Cost on training data: 0.0084502661222921 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5522673119612387 Accuracy on evaluation data: 8291 / 10000 Epoch 249 training complete Cost on training data: 0.008412317911493328 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5529453503210753 Accuracy on evaluation data: 8292 / 10000 Epoch 250 training complete Cost on training data: 0.008372352432644605 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5535656715063015 Accuracy on evaluation data: 8287 / 10000 Epoch 251 training complete Cost on training data: 0.008332599091548133 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5551894582490937 Accuracy on evaluation data: 8286 / 10000 Epoch 252 training complete Cost on training data: 0.008294105919023428 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5554505735309163 Accuracy on evaluation data: 8292 / 10000 Epoch 253 training complete Cost on training data: 0.008259215320506665 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.556161364977507 Accuracy on evaluation data: 8292 / 10000 Epoch 254 training complete Cost on training data: 0.008220615694691165 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5575670688131764 Accuracy on evaluation data: 8291 / 10000 Epoch 255 training complete Cost on training data: 0.008183659456734401 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5566841456215208 Accuracy on evaluation data: 8293 / 10000 Epoch 256 training complete Cost on training data: 0.008145243765449391 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5580784947499111 Accuracy on evaluation data: 8293 / 10000 Epoch 257 training complete Cost on training data: 0.00811132497633309 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5591491505288406 Accuracy on evaluation data: 8290 / 10000 Epoch 258 training complete Cost on training data: 0.008072867444806033 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.559205777860412 Accuracy on evaluation data: 8293 / 10000 Epoch 259 training complete Cost on training data: 0.008039137471661302 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5595608495494915 Accuracy on evaluation data: 8295 / 10000 Epoch 260 training complete Cost on training data: 0.008002776941955229 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5599915645171585 Accuracy on evaluation data: 8295 / 10000 Epoch 261 training complete Cost on training data: 0.007966135462807927 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5612742191533502 Accuracy on evaluation data: 8293 / 10000 Epoch 262 training complete Cost on training data: 0.007932927803246505 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5617044661896524 Accuracy on evaluation data: 8290 / 10000 Epoch 263 training complete Cost on training data: 0.007896814017856647 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5639061614090142 Accuracy on evaluation data: 8295 / 10000 Epoch 264 training complete Cost on training data: 0.007862314047186325 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5638887080090829 Accuracy on evaluation data: 8300 / 10000 Epoch 265 training complete Cost on training data: 0.007829161245286636 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.564039570976322 Accuracy on evaluation data: 8298 / 10000 Epoch 266 training complete Cost on training data: 0.007794196803171016 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5650650519250455 Accuracy on evaluation data: 8294 / 10000 Epoch 267 training complete Cost on training data: 0.007761089658909686 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5661425998548535 Accuracy on evaluation data: 8297 / 10000 Epoch 268 training complete Cost on training data: 0.007728443999357951 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.565807574673517 Accuracy on evaluation data: 8296 / 10000 Epoch 269 training complete Cost on training data: 0.007694339065644186 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5668031493773735 Accuracy on evaluation data: 8294 / 10000 Epoch 270 training complete Cost on training data: 0.007662401185503222 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.568106770122055 Accuracy on evaluation data: 8300 / 10000 Epoch 271 training complete Cost on training data: 0.007628572916914694 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5687437285597305 Accuracy on evaluation data: 8296 / 10000 Epoch 272 training complete Cost on training data: 0.007596682083618303 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.569268873401768 Accuracy on evaluation data: 8298 / 10000 Epoch 273 training complete Cost on training data: 0.007564724510252255 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.569618285417743 Accuracy on evaluation data: 8298 / 10000 Epoch 274 training complete Cost on training data: 0.00753279685228016 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.57063427330117 Accuracy on evaluation data: 8297 / 10000 Epoch 275 training complete Cost on training data: 0.0075011932152492895 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5711367692299203 Accuracy on evaluation data: 8297 / 10000 Epoch 276 training complete Cost on training data: 0.007469686884988832 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5721961590335034 Accuracy on evaluation data: 8298 / 10000 Epoch 277 training complete Cost on training data: 0.0074397778934368166 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.573410871832064 Accuracy on evaluation data: 8299 / 10000 Epoch 278 training complete Cost on training data: 0.007407899575713503 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5734911482889113 Accuracy on evaluation data: 8299 / 10000 Epoch 279 training complete Cost on training data: 0.007378360422680599 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5744310738185394 Accuracy on evaluation data: 8295 / 10000 Epoch 280 training complete Cost on training data: 0.00734723654093919 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5743071528668362 Accuracy on evaluation data: 8300 / 10000 Epoch 281 training complete Cost on training data: 0.0073182950033790755 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5744745904157171 Accuracy on evaluation data: 8298 / 10000 Epoch 282 training complete Cost on training data: 0.007289688300786332 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5750136164633 Accuracy on evaluation data: 8295 / 10000 Epoch 283 training complete Cost on training data: 0.007258697864985666 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5766372111264622 Accuracy on evaluation data: 8294 / 10000 Epoch 284 training complete Cost on training data: 0.007228247824557503 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5779167560477239 Accuracy on evaluation data: 8295 / 10000 Epoch 285 training complete Cost on training data: 0.0071993309724694525 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5778660066099806 Accuracy on evaluation data: 8294 / 10000 Epoch 286 training complete Cost on training data: 0.0071700828069124894 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5788231418840584 Accuracy on evaluation data: 8294 / 10000 Epoch 287 training complete Cost on training data: 0.007141382897501142 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5797525834529964 Accuracy on evaluation data: 8294 / 10000 Epoch 288 training complete Cost on training data: 0.007112755232208839 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5794581545545405 Accuracy on evaluation data: 8296 / 10000 Epoch 289 training complete Cost on training data: 0.007084432856325476 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.580591489351644 Accuracy on evaluation data: 8296 / 10000 Epoch 290 training complete Cost on training data: 0.007055870763156264 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5812627251939715 Accuracy on evaluation data: 8296 / 10000 Epoch 291 training complete Cost on training data: 0.007028506324634178 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5821939184770741 Accuracy on evaluation data: 8296 / 10000 Epoch 292 training complete Cost on training data: 0.0070009498896063185 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5825582951259767 Accuracy on evaluation data: 8297 / 10000 Epoch 293 training complete Cost on training data: 0.006974487368698741 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.583824629303999 Accuracy on evaluation data: 8295 / 10000 Epoch 294 training complete Cost on training data: 0.006946937966661494 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.583767970377277 Accuracy on evaluation data: 8291 / 10000 Epoch 295 training complete Cost on training data: 0.006919016871455062 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.584793865062959 Accuracy on evaluation data: 8294 / 10000 Epoch 296 training complete Cost on training data: 0.00689320902697137 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5851442725875566 Accuracy on evaluation data: 8298 / 10000 Epoch 297 training complete Cost on training data: 0.006865269809284962 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5858903754774274 Accuracy on evaluation data: 8294 / 10000 Epoch 298 training complete Cost on training data: 0.006838294745804023 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5861635949572546 Accuracy on evaluation data: 8296 / 10000 Epoch 299 training complete Cost on training data: 0.006811919263123583 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5866647471415776 Accuracy on evaluation data: 8296 / 10000 Epoch 300 training complete Cost on training data: 0.006785582799807724 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5880810533631184 Accuracy on evaluation data: 8296 / 10000 Epoch 301 training complete Cost on training data: 0.006760091004834835 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5884613348067216 Accuracy on evaluation data: 8296 / 10000 Epoch 302 training complete Cost on training data: 0.006734380375664931 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.589441767429376 Accuracy on evaluation data: 8299 / 10000 Epoch 303 training complete Cost on training data: 0.006707966319262621 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5889667838339951 Accuracy on evaluation data: 8296 / 10000 Epoch 304 training complete Cost on training data: 0.006683337659338772 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5899947445197147 Accuracy on evaluation data: 8295 / 10000 Epoch 305 training complete Cost on training data: 0.006657937273495311 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5904112229081537 Accuracy on evaluation data: 8294 / 10000 Epoch 306 training complete Cost on training data: 0.006632656524273505 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.591234861717765 Accuracy on evaluation data: 8293 / 10000 Epoch 307 training complete Cost on training data: 0.006607694239544852 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5918131096636272 Accuracy on evaluation data: 8292 / 10000 Epoch 308 training complete Cost on training data: 0.006582527007917741 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.591949681545194 Accuracy on evaluation data: 8293 / 10000 Epoch 309 training complete Cost on training data: 0.006557784507463533 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5931461376998346 Accuracy on evaluation data: 8296 / 10000 Epoch 310 training complete Cost on training data: 0.006532846019595167 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5934244099146166 Accuracy on evaluation data: 8293 / 10000 Epoch 311 training complete Cost on training data: 0.0065083430951528905 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.594333469805743 Accuracy on evaluation data: 8293 / 10000 Epoch 312 training complete Cost on training data: 0.006484709878571502 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5952254737488258 Accuracy on evaluation data: 8293 / 10000 Epoch 313 training complete Cost on training data: 0.006461170226183056 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5964903807368758 Accuracy on evaluation data: 8296 / 10000 Epoch 314 training complete Cost on training data: 0.006437303030948467 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5964405487165547 Accuracy on evaluation data: 8294 / 10000 Epoch 315 training complete Cost on training data: 0.0064127525277012315 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.596278985661997 Accuracy on evaluation data: 8295 / 10000 Epoch 316 training complete Cost on training data: 0.006389409876967011 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.597688882057781 Accuracy on evaluation data: 8293 / 10000 Epoch 317 training complete Cost on training data: 0.006366289655937858 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5981273490843853 Accuracy on evaluation data: 8292 / 10000 Epoch 318 training complete Cost on training data: 0.006342981082541249 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5983906887950496 Accuracy on evaluation data: 8292 / 10000 Epoch 319 training complete Cost on training data: 0.0063203398977905246 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5986559702471281 Accuracy on evaluation data: 8295 / 10000 Epoch 320 training complete Cost on training data: 0.0062962109518768135 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.5996711483418125 Accuracy on evaluation data: 8294 / 10000 Epoch 321 training complete Cost on training data: 0.006273808047758421 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6000424002265707 Accuracy on evaluation data: 8294 / 10000 Epoch 322 training complete Cost on training data: 0.00625151095440419 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6012701332494756 Accuracy on evaluation data: 8296 / 10000 Epoch 323 training complete Cost on training data: 0.006228060550527366 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6009994905314584 Accuracy on evaluation data: 8295 / 10000 Epoch 324 training complete Cost on training data: 0.006206012839317615 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6017933799357573 Accuracy on evaluation data: 8295 / 10000 Epoch 325 training complete Cost on training data: 0.006183551822276642 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6026720476181193 Accuracy on evaluation data: 8295 / 10000 Epoch 326 training complete Cost on training data: 0.00616156253286002 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6031862436345017 Accuracy on evaluation data: 8297 / 10000 Epoch 327 training complete Cost on training data: 0.0061393561034788335 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6034609817542438 Accuracy on evaluation data: 8297 / 10000 Epoch 328 training complete Cost on training data: 0.006117597590134794 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6047903939728643 Accuracy on evaluation data: 8298 / 10000 Epoch 329 training complete Cost on training data: 0.006095757719829368 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6049676902579775 Accuracy on evaluation data: 8298 / 10000 Epoch 330 training complete Cost on training data: 0.006074009583956521 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.606296965410682 Accuracy on evaluation data: 8299 / 10000 Epoch 331 training complete Cost on training data: 0.006052353491692505 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6064514540051067 Accuracy on evaluation data: 8300 / 10000 Epoch 332 training complete Cost on training data: 0.006031630415465684 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.606345865444866 Accuracy on evaluation data: 8298 / 10000 Epoch 333 training complete Cost on training data: 0.0060105752904866605 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6064939849144657 Accuracy on evaluation data: 8298 / 10000 Epoch 334 training complete Cost on training data: 0.005989124166275899 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.607247295769548 Accuracy on evaluation data: 8296 / 10000 Epoch 335 training complete Cost on training data: 0.005968453256550267 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6072743048906684 Accuracy on evaluation data: 8295 / 10000 Epoch 336 training complete Cost on training data: 0.005947808976751187 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6077297907547556 Accuracy on evaluation data: 8293 / 10000 Epoch 337 training complete Cost on training data: 0.005926509371158197 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6093465285897326 Accuracy on evaluation data: 8297 / 10000 Epoch 338 training complete Cost on training data: 0.005905956551024666 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6098180526405625 Accuracy on evaluation data: 8296 / 10000 Epoch 339 training complete Cost on training data: 0.005885509731717664 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6107506260942306 Accuracy on evaluation data: 8296 / 10000 Epoch 340 training complete Cost on training data: 0.0058650594071129785 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6109526589784067 Accuracy on evaluation data: 8298 / 10000 Epoch 341 training complete Cost on training data: 0.005844745282616136 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6122580019575428 Accuracy on evaluation data: 8294 / 10000 Epoch 342 training complete Cost on training data: 0.005824959573318467 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6125485880277985 Accuracy on evaluation data: 8293 / 10000 Epoch 343 training complete Cost on training data: 0.005804486235662657 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.613061937913507 Accuracy on evaluation data: 8294 / 10000 Epoch 344 training complete Cost on training data: 0.005784820721646074 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6131458751515746 Accuracy on evaluation data: 8295 / 10000 Epoch 345 training complete Cost on training data: 0.005765186384621952 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6142646007571384 Accuracy on evaluation data: 8295 / 10000 Epoch 346 training complete Cost on training data: 0.005745120567645598 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6145386574705065 Accuracy on evaluation data: 8294 / 10000 Epoch 347 training complete Cost on training data: 0.005726436921016914 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6149872376103747 Accuracy on evaluation data: 8295 / 10000 Epoch 348 training complete Cost on training data: 0.005706246623579335 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6154425306340765 Accuracy on evaluation data: 8296 / 10000 Epoch 349 training complete Cost on training data: 0.005686681617061784 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.615973840493396 Accuracy on evaluation data: 8298 / 10000 Epoch 350 training complete Cost on training data: 0.005667618354450181 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6168644901395945 Accuracy on evaluation data: 8298 / 10000 Epoch 351 training complete Cost on training data: 0.0056484299253665455 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6175424416430357 Accuracy on evaluation data: 8298 / 10000 Epoch 352 training complete Cost on training data: 0.005629276987089924 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6176808317169489 Accuracy on evaluation data: 8298 / 10000 Epoch 353 training complete Cost on training data: 0.0056105744976983314 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6180581123087519 Accuracy on evaluation data: 8299 / 10000 Epoch 354 training complete Cost on training data: 0.005592218262876864 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6187874868947216 Accuracy on evaluation data: 8297 / 10000 Epoch 355 training complete Cost on training data: 0.0055732862042998 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6194588538992134 Accuracy on evaluation data: 8298 / 10000 Epoch 356 training complete Cost on training data: 0.005555112903494204 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.619157698876115 Accuracy on evaluation data: 8299 / 10000 Epoch 357 training complete Cost on training data: 0.005536896018830674 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6202643900487748 Accuracy on evaluation data: 8296 / 10000 Epoch 358 training complete Cost on training data: 0.005518116027962652 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6206752003129121 Accuracy on evaluation data: 8299 / 10000 Epoch 359 training complete Cost on training data: 0.005500670560409385 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6207342571663153 Accuracy on evaluation data: 8300 / 10000 Epoch 360 training complete Cost on training data: 0.005481677725089759 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.621618064414015 Accuracy on evaluation data: 8298 / 10000 Epoch 361 training complete Cost on training data: 0.005464226171988452 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.622652578125993 Accuracy on evaluation data: 8296 / 10000 Epoch 362 training complete Cost on training data: 0.005446400210087946 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6228148596804397 Accuracy on evaluation data: 8297 / 10000 Epoch 363 training complete Cost on training data: 0.005428454624956246 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.623025821697966 Accuracy on evaluation data: 8300 / 10000 Epoch 364 training complete Cost on training data: 0.0054104286964459 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6237028791233803 Accuracy on evaluation data: 8298 / 10000 Epoch 365 training complete Cost on training data: 0.00539301430658295 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6243806093788618 Accuracy on evaluation data: 8299 / 10000 Epoch 366 training complete Cost on training data: 0.005375498262897481 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6243901540279466 Accuracy on evaluation data: 8300 / 10000 Epoch 367 training complete Cost on training data: 0.005358489797376338 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.624971238427544 Accuracy on evaluation data: 8299 / 10000 Epoch 368 training complete Cost on training data: 0.005340784988125832 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6254374122861526 Accuracy on evaluation data: 8298 / 10000 Epoch 369 training complete Cost on training data: 0.005324152676756311 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6254644712753177 Accuracy on evaluation data: 8302 / 10000 Epoch 370 training complete Cost on training data: 0.005307064677220559 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6262740501600876 Accuracy on evaluation data: 8301 / 10000 Epoch 371 training complete Cost on training data: 0.00529048244829506 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6263261924176353 Accuracy on evaluation data: 8301 / 10000 Epoch 372 training complete Cost on training data: 0.005273317255472328 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6270137416842052 Accuracy on evaluation data: 8299 / 10000 Epoch 373 training complete Cost on training data: 0.005256813242155231 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6273298132854352 Accuracy on evaluation data: 8300 / 10000 Epoch 374 training complete Cost on training data: 0.005240131927593864 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6277954063184625 Accuracy on evaluation data: 8303 / 10000 Epoch 375 training complete Cost on training data: 0.005223825211361032 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6286123134962385 Accuracy on evaluation data: 8299 / 10000 Epoch 376 training complete Cost on training data: 0.005207332331341755 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6288090022631614 Accuracy on evaluation data: 8303 / 10000 Epoch 377 training complete Cost on training data: 0.00519125015797241 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6291172069092357 Accuracy on evaluation data: 8303 / 10000 Epoch 378 training complete Cost on training data: 0.005174970251628666 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6303892442232097 Accuracy on evaluation data: 8300 / 10000 Epoch 379 training complete Cost on training data: 0.005159061104723816 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6307672740156367 Accuracy on evaluation data: 8301 / 10000 Epoch 380 training complete Cost on training data: 0.005142849386959845 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6309609266221168 Accuracy on evaluation data: 8302 / 10000 Epoch 381 training complete Cost on training data: 0.00512710871117804 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6312935288622605 Accuracy on evaluation data: 8302 / 10000 Epoch 382 training complete Cost on training data: 0.005111354331814471 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6315350820484409 Accuracy on evaluation data: 8303 / 10000 Epoch 383 training complete Cost on training data: 0.005096038644866422 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.633040252535604 Accuracy on evaluation data: 8302 / 10000 Epoch 384 training complete Cost on training data: 0.0050798822309203705 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6331708446266922 Accuracy on evaluation data: 8302 / 10000 Epoch 385 training complete Cost on training data: 0.005064595858651629 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6339067912521021 Accuracy on evaluation data: 8302 / 10000 Epoch 386 training complete Cost on training data: 0.00504906391920897 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.63412329890395 Accuracy on evaluation data: 8303 / 10000 Epoch 387 training complete Cost on training data: 0.0050336951762420725 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6347667245639317 Accuracy on evaluation data: 8303 / 10000 Epoch 388 training complete Cost on training data: 0.005018508540358671 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6352536246919185 Accuracy on evaluation data: 8305 / 10000 Epoch 389 training complete Cost on training data: 0.005003339736179524 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.635440492252135 Accuracy on evaluation data: 8303 / 10000 Epoch 390 training complete Cost on training data: 0.004988257563787323 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6360078298787881 Accuracy on evaluation data: 8303 / 10000 Epoch 391 training complete Cost on training data: 0.004973524991423581 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.637184475033575 Accuracy on evaluation data: 8302 / 10000 Epoch 392 training complete Cost on training data: 0.004958559338911718 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6375423803935851 Accuracy on evaluation data: 8303 / 10000 Epoch 393 training complete Cost on training data: 0.004943845879734059 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6368120798376302 Accuracy on evaluation data: 8305 / 10000 Epoch 394 training complete Cost on training data: 0.0049289738244940534 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6375102867468778 Accuracy on evaluation data: 8306 / 10000 Epoch 395 training complete Cost on training data: 0.004914685866062012 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6380359684293087 Accuracy on evaluation data: 8304 / 10000 Epoch 396 training complete Cost on training data: 0.004899697730094281 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6385443849673784 Accuracy on evaluation data: 8305 / 10000 Epoch 397 training complete Cost on training data: 0.004885364227840051 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.639186180627196 Accuracy on evaluation data: 8304 / 10000 Epoch 398 training complete Cost on training data: 0.00487109817644281 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6393365941848124 Accuracy on evaluation data: 8305 / 10000 Epoch 399 training complete Cost on training data: 0.004856754489618354 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.6398650020783767 Accuracy on evaluation data: 8305 / 10000
CPU times: user 14min 38s, sys: 11min 39s, total: 26min 17s Wall time: 15min 50s
training_cost_xmin=200
test_accuracy_xmin=200
test_cost_xmin=0
training_accuracy_xmin=0
training_set_size=1000
lmbda=5.0
# local filename: train1000-lamdba5
make_plots('/content/train1000', 400,
training_cost_xmin,
test_accuracy_xmin,
test_cost_xmin,
training_accuracy_xmin,
training_set_size)
training_cost_xmin=200
test_accuracy_xmin=200
test_cost_xmin=0
training_accuracy_xmin=0
training_set_size=1000
lmbda=0.0
# local filename: train1000
make_plots('/content/train1000-2', 400,
training_cost_xmin,
test_accuracy_xmin,
test_cost_xmin,
training_accuracy_xmin,
training_set_size)
- training accuracy: 100%
- test accuracy: 83.05%
- training acc - test acc: 16.95%
%%time
if __name__ == "__main__":
filename = input("Enter a file name: ")
num_epochs = int(input("Enter the number of epochs to run for: "))
training_cost_xmin = int(input("training_cost_xmin (suggest 200): "))
test_accuracy_xmin = int(input("test_accuracy_xmin (suggest 200): "))
test_cost_xmin = int(input("test_cost_xmin (suggest 0): "))
training_accuracy_xmin = int(input("training_accuracy_xmin (suggest 0): "))
training_set_size = int(input("Training set size (suggest 1000): "))
lmbda = float(input("Enter the regularization parameter, lambda (suggest: 5.0): "))
main(filename, num_epochs, training_cost_xmin,
test_accuracy_xmin, test_cost_xmin, training_accuracy_xmin,
training_set_size, lmbda)
Enter a file name: train50000 Enter the number of epochs to run for: 30 training_cost_xmin (suggest 200): 15 test_accuracy_xmin (suggest 200): 15 test_cost_xmin (suggest 0): 0 training_accuracy_xmin (suggest 0): 0 Training set size (suggest 1000): 50000 Enter the regularization parameter, lambda (suggest: 5.0): 0 Epoch 0 training complete Cost on training data: 0.565487411645113 Accuracy on training data: 45774 / 50000 Cost on evaluation data: 0.5623484668671077 Accuracy on evaluation data: 9147 / 10000 Epoch 1 training complete Cost on training data: 0.4743487323018099 Accuracy on training data: 46415 / 50000 Cost on evaluation data: 0.49780077854652244 Accuracy on evaluation data: 9206 / 10000 Epoch 2 training complete Cost on training data: 0.4241966751129283 Accuracy on training data: 46822 / 50000 Cost on evaluation data: 0.459207819060238 Accuracy on evaluation data: 9303 / 10000 Epoch 3 training complete Cost on training data: 0.37634258350749356 Accuracy on training data: 47143 / 50000 Cost on evaluation data: 0.4322746488815946 Accuracy on evaluation data: 9343 / 10000 Epoch 4 training complete Cost on training data: 0.33737051844768595 Accuracy on training data: 47527 / 50000 Cost on evaluation data: 0.4113851509361249 Accuracy on evaluation data: 9379 / 10000 Epoch 5 training complete Cost on training data: 0.3382252087812596 Accuracy on training data: 47557 / 50000 Cost on evaluation data: 0.41546570994205817 Accuracy on evaluation data: 9370 / 10000 Epoch 6 training complete Cost on training data: 0.2960054626692339 Accuracy on training data: 47814 / 50000 Cost on evaluation data: 0.38841472122981535 Accuracy on evaluation data: 9419 / 10000 Epoch 7 training complete Cost on training data: 0.3110609033056994 Accuracy on training data: 47730 / 50000 Cost on evaluation data: 0.3992007929940586 Accuracy on evaluation data: 9416 / 10000 Epoch 8 training complete Cost on training data: 0.2915602632430604 Accuracy on training data: 47859 / 50000 Cost on evaluation data: 0.39488486195152966 Accuracy on evaluation data: 9397 / 10000 Epoch 9 training complete Cost on training data: 0.2667638206942151 Accuracy on training data: 48138 / 50000 Cost on evaluation data: 0.374039623897005 Accuracy on evaluation data: 9473 / 10000 Epoch 10 training complete Cost on training data: 0.27078803048995786 Accuracy on training data: 48067 / 50000 Cost on evaluation data: 0.3984224935183234 Accuracy on evaluation data: 9423 / 10000 Epoch 11 training complete Cost on training data: 0.26626139438990726 Accuracy on training data: 48122 / 50000 Cost on evaluation data: 0.38517197513213136 Accuracy on evaluation data: 9436 / 10000 Epoch 12 training complete Cost on training data: 0.2541741680259756 Accuracy on training data: 48249 / 50000 Cost on evaluation data: 0.3762106123238996 Accuracy on evaluation data: 9448 / 10000 Epoch 13 training complete Cost on training data: 0.24751161475558864 Accuracy on training data: 48319 / 50000 Cost on evaluation data: 0.3839525171381957 Accuracy on evaluation data: 9459 / 10000 Epoch 14 training complete Cost on training data: 0.22923263801903093 Accuracy on training data: 48417 / 50000 Cost on evaluation data: 0.3669446685984708 Accuracy on evaluation data: 9462 / 10000 Epoch 15 training complete Cost on training data: 0.22156525044004927 Accuracy on training data: 48494 / 50000 Cost on evaluation data: 0.3593594442957297 Accuracy on evaluation data: 9499 / 10000 Epoch 16 training complete Cost on training data: 0.22133254144627743 Accuracy on training data: 48504 / 50000 Cost on evaluation data: 0.3586621737977863 Accuracy on evaluation data: 9525 / 10000 Epoch 17 training complete Cost on training data: 0.20921983346732087 Accuracy on training data: 48601 / 50000 Cost on evaluation data: 0.3600117441081664 Accuracy on evaluation data: 9497 / 10000 Epoch 18 training complete Cost on training data: 0.20592653169237327 Accuracy on training data: 48637 / 50000 Cost on evaluation data: 0.35395119496548 Accuracy on evaluation data: 9505 / 10000 Epoch 19 training complete Cost on training data: 0.19824505059661693 Accuracy on training data: 48692 / 50000 Cost on evaluation data: 0.36864000308210604 Accuracy on evaluation data: 9506 / 10000 Epoch 20 training complete Cost on training data: 0.2082025238766053 Accuracy on training data: 48621 / 50000 Cost on evaluation data: 0.3754736669857341 Accuracy on evaluation data: 9480 / 10000 Epoch 21 training complete Cost on training data: 0.20323017315719372 Accuracy on training data: 48658 / 50000 Cost on evaluation data: 0.3768741163764822 Accuracy on evaluation data: 9493 / 10000 Epoch 22 training complete Cost on training data: 0.19966263392082073 Accuracy on training data: 48629 / 50000 Cost on evaluation data: 0.37276643167074736 Accuracy on evaluation data: 9492 / 10000 Epoch 23 training complete Cost on training data: 0.19885709346335595 Accuracy on training data: 48673 / 50000 Cost on evaluation data: 0.3808985433917027 Accuracy on evaluation data: 9474 / 10000 Epoch 24 training complete Cost on training data: 0.18032189693172532 Accuracy on training data: 48840 / 50000 Cost on evaluation data: 0.3591711188637095 Accuracy on evaluation data: 9500 / 10000 Epoch 25 training complete Cost on training data: 0.17471177293884144 Accuracy on training data: 48861 / 50000 Cost on evaluation data: 0.35192917918287636 Accuracy on evaluation data: 9516 / 10000 Epoch 26 training complete Cost on training data: 0.18026505053099987 Accuracy on training data: 48844 / 50000 Cost on evaluation data: 0.36468757183451384 Accuracy on evaluation data: 9505 / 10000 Epoch 27 training complete Cost on training data: 0.18464408045211 Accuracy on training data: 48783 / 50000 Cost on evaluation data: 0.37161590935708827 Accuracy on evaluation data: 9506 / 10000 Epoch 28 training complete Cost on training data: 0.19594147314018678 Accuracy on training data: 48724 / 50000 Cost on evaluation data: 0.38136079101938825 Accuracy on evaluation data: 9514 / 10000 Epoch 29 training complete Cost on training data: 0.17359688345261265 Accuracy on training data: 48915 / 50000 Cost on evaluation data: 0.3619564888355245 Accuracy on evaluation data: 9507 / 10000
CPU times: user 5min 53s, sys: 3min 57s, total: 9min 50s Wall time: 7min 41s
training_cost_xmin=15
test_accuracy_xmin=15
test_cost_xmin=0
training_accuracy_xmin=0
training_set_size=50000
lmbda=0.0
make_plots('/content/train50000', 30,
training_cost_xmin,
test_accuracy_xmin,
test_cost_xmin,
training_accuracy_xmin,
training_set_size)
- training accuracy: 97.83%
- test accuracy: 95.07%
- training acc $-$ test acc: 2.76%
A 2.76% gap exists between the training and test accuracy compared to the 16.95% gap earlier. Overfitting is still going on, but it's been greatly reduced. Our network is generalizing much better from the training data to the test data. In general, one of the best ways of reducing overfitting is to increase the size of the training data. With enough training data it is difficult for even a very large network to overfit. Unfortunately, training data can be expensive or difficult to acquire, so this is not always a practical option. ¶
Regularization¶
Increasing the amount of training data is one way of reducing overfitting. Are there other ways we can reduce the extent to which overfitting occurs? One possible approach is to reduce the size of our network. However, large networks have the potential to be more powerful than small networks, and so this is an option we'd only adopt reluctantly.
Fortunately, there are other techniques which can reduce overfitting, even when we have a fixed network and fixed training data. These are known as regularization techniques. In this section I describe one of the most commonly used regularization techniques, a technique sometimes known as weight decay or L2 regularization. The idea of L2 regularization is to add an extra term to the cost function, a term called the regularization term. Here's the regularized cross-entropy:
\begin{eqnarray} C = -\frac{1}{n} \sum_x \sum_j \left[ y_j \ln a^L_j + (1 - y_j) \ln (1 - a^L_j) \right] + \frac{\lambda}{2n} \sum_w w^2. \tag{1} \end{eqnarray}
The first term is just the usual expression for the cross-entropy. But we've added a second term, namely the sum of the squares of all the weights in the network. This is scaled by a factor $\lambda / 2n$, where $\lambda > 0$ is known as the regularization parameter, and $n$ is, as usual, the size of our training set. I'll discuss later how $\lambda$ is chosen. It's also worth noting that the regularization term doesn't include the biases. I'll also come back to that below.
Of course, it's possible to regularize other cost functions, such as the quadratic cost. This can be done in a similar way:
\begin{eqnarray} C = \frac{1}{2n} \sum_x ||y - a^L||^2 + \frac{\lambda}{2n} \sum_w w^2. \tag{2} \end{eqnarray}
In both cases we can write the regularized cost function as:
\begin{eqnarray} C = C_0 + \frac{\lambda}{2n} \sum_w w^2, \tag{3} \end{eqnarray} where $C_0$ is the original, unregularized cost function.
Intuitively, the effect of regularization is to make it so the network prefers to learn small weights, all other things being equal. Large weights will only be allowed if they considerably improve the first part of the cost function. Put another way, regularization can be viewed as a way of compromising between finding small weights and minimizing the original cost function. The relative importance of the two elements of the compromise depends on the value of $\lambda$:
- when $\lambda$ is small we prefer to minimize the original cost function,
- but when $\lambda$ is large we prefer small weights.
Now, it's really not at all obvious why making this kind of compromise should help reduce overfitting! But it turns out that it does. We'll address the question of why it helps in the next section. But first, let's work through an example showing that regularization really does reduce overfitting.
To construct such an example, we first need to figure out how to apply our stochastic gradient descent learning algorithm in a regularized neural network. In particular, we need to know how to compute the partial derivatives $\partial C / \partial w$ and $\partial C / \partial b$ for all the weights and biases in the network. Taking the partial derivatives of Equation (1) gives
\begin{eqnarray} \frac{\partial C}{\partial w} & = & \frac{\partial C_0}{\partial w} + \frac{\lambda}{n} w \tag{4}\\ \frac{\partial C}{\partial b} & = & \frac{\partial C_0}{\partial b}. \tag{5} \end{eqnarray}
The $\partial C_0 / \partial w$ and $\partial C_0 / \partial b$ terms can be computed using backpropagation, as described in the last chapter**[2]**. And so we see that it's easy to compute the gradient of the regularized cost function: just use backpropagation, as usual, and then add $\frac{\lambda}{n} w$ to the partial derivative of all the weight terms. The partial derivatives with respect to the biases are unchanged, and so the gradient descent learning rule for the biases doesn't change from the usual rule:
\begin{eqnarray} b & \rightarrow & b -\eta \frac{\partial C_0}{\partial b}. \tag{6} \end{eqnarray}
The learning rule for the weights becomes:
\begin{eqnarray} w & \rightarrow & w-\eta \frac{\partial C_0}{\partial w}-\frac{\eta\lambda}{n} w \tag{7} \\ & = & \left(1-\frac{\eta \lambda}{n}\right) w -\eta \frac{\partial C_0}{\partial w}. \tag{8} \end{eqnarray}
This is exactly the same as the usual gradient descent learning rule, except we first rescale the weight $w$ by a factor $1-\frac{\eta \lambda}{n}$. This rescaling is sometimes referred to as weight decay, since it makes the weights smaller. At first glance it looks as though this means the weights are being driven unstoppably toward zero. But that's not right, since the other term may lead the weights to increase, if so doing causes a decrease in the unregularized cost function.
Okay, that's how gradient descent works. What about stochastic gradient descent? Well, just as in unregularized stochastic gradient descent, we can estimate $\partial C_0 / \partial w$ by averaging over a mini-batch of $m$ training examples. Thus the regularized learning rule for stochastic gradient descent becomes
\begin{eqnarray} w \rightarrow \left(1-\frac{\eta \lambda}{n}\right) w -\frac{\eta}{m} \sum_x \frac{\partial C_x}{\partial w}, \tag{9} \end{eqnarray}
where the sum is over training examples $x$ in the mini-batch, and $C_x$ is the (unregularized) cost for each training example. This is exactly the same as the usual rule for stochastic gradient descent, except for the $1-\frac{\eta \lambda}{n}$ weight decay factor. Finally, and for completeness, let me state the regularized learning rule for the biases. This is, of course, exactly the same as in the unregularized case
\begin{eqnarray} b \rightarrow b - \frac{\eta}{m} \sum_x \frac{\partial C_x}{\partial b}, \tag{10} \end{eqnarray} where the sum is over training examples $x$ in the mini-batch.
Let's see how regularization changes the performance of our neural
network. We'll use a network with $30$ hidden neurons, a mini-batch size
of $10$, a learning rate of $0.5$, and the cross-entropy cost function.
However, this time we'll use a regularization parameter of $\lambda =
0.1$. Note that in the code, we use the variable name lmbda, because
lambda is a reserved word in Python, with an unrelated meaning. I've
also used the test_data again, not the validation_data. Strictly
speaking, we should use the validation_data, for all the reasons we
discussed earlier. But I decided to use the test_data because it makes
the results more directly comparable with our earlier, unregularized
results. You can easily change the code to use the validation_data
instead, and you'll find that it gives similar results.
References:
2. Chapter 2: How The Backpropagation Algorithm Works. Neural Networks and Deep Learning. By Michael Nielsen. Dec 2019.
# net = Network2mat([784, 30, 10], cost=CrossEntropyCost)
# net.large_weight_initializer()
# net.SGD(training_data[:1000], 400, 10, 0.5,
# evaluation_data=test_data, lmbda = 0.1,
# monitor_evaluation_cost=True, monitor_evaluation_accuracy=True,
# monitor_training_cost=True, monitor_training_accuracy=True)
%%time
if __name__ == "__main__":
filename = input("Enter a file name: ")
num_epochs = int(input("Enter the number of epochs to run for: "))
training_cost_xmin = int(input("training_cost_xmin (suggest 200): "))
test_accuracy_xmin = int(input("test_accuracy_xmin (suggest 200): "))
test_cost_xmin = int(input("test_cost_xmin (suggest 0): "))
training_accuracy_xmin = int(input("training_accuracy_xmin (suggest 0): "))
training_set_size = int(input("Training set size (suggest 1000): "))
lmbda = float(input("Enter the regularization parameter, lambda (suggest: 5.0): "))
main(filename, num_epochs, training_cost_xmin,
test_accuracy_xmin, test_cost_xmin, training_accuracy_xmin,
training_set_size, lmbda)
Enter a file name: train1000-lambda_point1 Enter the number of epochs to run for: 400 training_cost_xmin (suggest 200): 200 test_accuracy_xmin (suggest 200): 200 test_cost_xmin (suggest 0): 0 training_accuracy_xmin (suggest 0): 0 Training set size (suggest 1000): 1000 Enter the regularization parameter, lambda (suggest: 5.0): 0.1 Epoch 0 training complete Cost on training data: 3.070360696676798 Accuracy on training data: 654 / 1000 Cost on evaluation data: 2.267426805451026 Accuracy on evaluation data: 5689 / 10000 Epoch 1 training complete Cost on training data: 2.5499498812714574 Accuracy on training data: 779 / 1000 Cost on evaluation data: 1.8874601622712677 Accuracy on evaluation data: 6627 / 10000 Epoch 2 training complete Cost on training data: 2.3300385720251486 Accuracy on training data: 801 / 1000 Cost on evaluation data: 1.6980853395461923 Accuracy on evaluation data: 6951 / 10000 Epoch 3 training complete Cost on training data: 2.09308027964456 Accuracy on training data: 863 / 1000 Cost on evaluation data: 1.558920509036749 Accuracy on evaluation data: 7414 / 10000 Epoch 4 training complete Cost on training data: 1.959190834576042 Accuracy on training data: 890 / 1000 Cost on evaluation data: 1.4806930558341391 Accuracy on evaluation data: 7560 / 10000 Epoch 5 training complete Cost on training data: 1.8701389458524686 Accuracy on training data: 911 / 1000 Cost on evaluation data: 1.4505745942997819 Accuracy on evaluation data: 7622 / 10000 Epoch 6 training complete Cost on training data: 1.7506274221524538 Accuracy on training data: 933 / 1000 Cost on evaluation data: 1.3703546508680589 Accuracy on evaluation data: 7787 / 10000 Epoch 7 training complete Cost on training data: 1.6674245348944023 Accuracy on training data: 939 / 1000 Cost on evaluation data: 1.3360211887461975 Accuracy on evaluation data: 7858 / 10000 Epoch 8 training complete Cost on training data: 1.6157130804251154 Accuracy on training data: 946 / 1000 Cost on evaluation data: 1.3219846238241026 Accuracy on evaluation data: 7880 / 10000 Epoch 9 training complete Cost on training data: 1.554686268195161 Accuracy on training data: 955 / 1000 Cost on evaluation data: 1.315796372936809 Accuracy on evaluation data: 7935 / 10000 Epoch 10 training complete Cost on training data: 1.4949204835817977 Accuracy on training data: 961 / 1000 Cost on evaluation data: 1.320230219689416 Accuracy on evaluation data: 7929 / 10000 Epoch 11 training complete Cost on training data: 1.4818460096460242 Accuracy on training data: 964 / 1000 Cost on evaluation data: 1.30039531832619 Accuracy on evaluation data: 7944 / 10000 Epoch 12 training complete Cost on training data: 1.4137442275209868 Accuracy on training data: 967 / 1000 Cost on evaluation data: 1.2875201012045665 Accuracy on evaluation data: 8000 / 10000 Epoch 13 training complete Cost on training data: 1.3731826171058648 Accuracy on training data: 971 / 1000 Cost on evaluation data: 1.2676480508606796 Accuracy on evaluation data: 8046 / 10000 Epoch 14 training complete Cost on training data: 1.3463558779205007 Accuracy on training data: 974 / 1000 Cost on evaluation data: 1.2705197922835934 Accuracy on evaluation data: 8055 / 10000 Epoch 15 training complete Cost on training data: 1.3164924028939695 Accuracy on training data: 975 / 1000 Cost on evaluation data: 1.2665984376116841 Accuracy on evaluation data: 8117 / 10000 Epoch 16 training complete Cost on training data: 1.2817951437471875 Accuracy on training data: 981 / 1000 Cost on evaluation data: 1.2378727008655925 Accuracy on evaluation data: 8121 / 10000 Epoch 17 training complete Cost on training data: 1.2614812043125732 Accuracy on training data: 982 / 1000 Cost on evaluation data: 1.236990536073006 Accuracy on evaluation data: 8127 / 10000 Epoch 18 training complete Cost on training data: 1.2317981130366493 Accuracy on training data: 981 / 1000 Cost on evaluation data: 1.2416701168090345 Accuracy on evaluation data: 8116 / 10000 Epoch 19 training complete Cost on training data: 1.2092999770497324 Accuracy on training data: 985 / 1000 Cost on evaluation data: 1.2345992370599745 Accuracy on evaluation data: 8179 / 10000 Epoch 20 training complete Cost on training data: 1.1891372287177537 Accuracy on training data: 985 / 1000 Cost on evaluation data: 1.231776145659345 Accuracy on evaluation data: 8185 / 10000 Epoch 21 training complete Cost on training data: 1.1708545314330734 Accuracy on training data: 988 / 1000 Cost on evaluation data: 1.243009048023027 Accuracy on evaluation data: 8197 / 10000 Epoch 22 training complete Cost on training data: 1.1532019095305681 Accuracy on training data: 987 / 1000 Cost on evaluation data: 1.2302276620841754 Accuracy on evaluation data: 8209 / 10000 Epoch 23 training complete Cost on training data: 1.1362273197668147 Accuracy on training data: 990 / 1000 Cost on evaluation data: 1.219180684096704 Accuracy on evaluation data: 8201 / 10000 Epoch 24 training complete Cost on training data: 1.1271831452904617 Accuracy on training data: 990 / 1000 Cost on evaluation data: 1.2373382475294543 Accuracy on evaluation data: 8171 / 10000 Epoch 25 training complete Cost on training data: 1.1068411285820956 Accuracy on training data: 989 / 1000 Cost on evaluation data: 1.221990180563778 Accuracy on evaluation data: 8242 / 10000 Epoch 26 training complete Cost on training data: 1.0954351860053821 Accuracy on training data: 991 / 1000 Cost on evaluation data: 1.2263361751773023 Accuracy on evaluation data: 8225 / 10000 Epoch 27 training complete Cost on training data: 1.0770384742595405 Accuracy on training data: 994 / 1000 Cost on evaluation data: 1.221169926679863 Accuracy on evaluation data: 8248 / 10000 Epoch 28 training complete Cost on training data: 1.0647476972021186 Accuracy on training data: 993 / 1000 Cost on evaluation data: 1.2268031620380757 Accuracy on evaluation data: 8233 / 10000 Epoch 29 training complete Cost on training data: 1.0504298589808183 Accuracy on training data: 995 / 1000 Cost on evaluation data: 1.218352952579399 Accuracy on evaluation data: 8252 / 10000 Epoch 30 training complete Cost on training data: 1.0431744378239685 Accuracy on training data: 994 / 1000 Cost on evaluation data: 1.249762387453506 Accuracy on evaluation data: 8235 / 10000 Epoch 31 training complete Cost on training data: 1.0270402407258246 Accuracy on training data: 996 / 1000 Cost on evaluation data: 1.2164889227325593 Accuracy on evaluation data: 8271 / 10000 Epoch 32 training complete Cost on training data: 1.0145262510213389 Accuracy on training data: 997 / 1000 Cost on evaluation data: 1.2067352650513907 Accuracy on evaluation data: 8284 / 10000 Epoch 33 training complete Cost on training data: 1.005263678102775 Accuracy on training data: 997 / 1000 Cost on evaluation data: 1.2145690708533032 Accuracy on evaluation data: 8274 / 10000 Epoch 34 training complete Cost on training data: 0.9924583626742032 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2126795283986687 Accuracy on evaluation data: 8288 / 10000 Epoch 35 training complete Cost on training data: 0.9830586317364072 Accuracy on training data: 997 / 1000 Cost on evaluation data: 1.2119285236493695 Accuracy on evaluation data: 8300 / 10000 Epoch 36 training complete Cost on training data: 0.9705926102024827 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2033980838931593 Accuracy on evaluation data: 8305 / 10000 Epoch 37 training complete Cost on training data: 0.9614662788410542 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.209260429527872 Accuracy on evaluation data: 8303 / 10000 Epoch 38 training complete Cost on training data: 0.9504859623649382 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.209794237046139 Accuracy on evaluation data: 8298 / 10000 Epoch 39 training complete Cost on training data: 0.9409620715462244 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.2013984540125793 Accuracy on evaluation data: 8314 / 10000 Epoch 40 training complete Cost on training data: 0.931409062408318 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2041893743294771 Accuracy on evaluation data: 8292 / 10000 Epoch 41 training complete Cost on training data: 0.9233605694063073 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1957668550497065 Accuracy on evaluation data: 8316 / 10000 Epoch 42 training complete Cost on training data: 0.9135406247829807 Accuracy on training data: 998 / 1000 Cost on evaluation data: 1.208849699811312 Accuracy on evaluation data: 8332 / 10000 Epoch 43 training complete Cost on training data: 0.9045779503370333 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1905092238989747 Accuracy on evaluation data: 8344 / 10000 Epoch 44 training complete Cost on training data: 0.894746526106206 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1952179540903338 Accuracy on evaluation data: 8339 / 10000 Epoch 45 training complete Cost on training data: 0.8859516418619959 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.2001018188519033 Accuracy on evaluation data: 8329 / 10000 Epoch 46 training complete Cost on training data: 0.8775834772799677 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1956884045628653 Accuracy on evaluation data: 8362 / 10000 Epoch 47 training complete Cost on training data: 0.868318997843876 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1878009617275824 Accuracy on evaluation data: 8363 / 10000 Epoch 48 training complete Cost on training data: 0.8602327271854222 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1790846301736781 Accuracy on evaluation data: 8371 / 10000 Epoch 49 training complete Cost on training data: 0.8518103930713838 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1859390790245632 Accuracy on evaluation data: 8356 / 10000 Epoch 50 training complete Cost on training data: 0.8452577691690797 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.189137429036529 Accuracy on evaluation data: 8354 / 10000 Epoch 51 training complete Cost on training data: 0.8371444093461841 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1798285194326754 Accuracy on evaluation data: 8374 / 10000 Epoch 52 training complete Cost on training data: 0.8287714969068899 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1756404086913743 Accuracy on evaluation data: 8374 / 10000 Epoch 53 training complete Cost on training data: 0.8206680240068689 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1743344319866673 Accuracy on evaluation data: 8380 / 10000 Epoch 54 training complete Cost on training data: 0.8133380574119782 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1679987805090895 Accuracy on evaluation data: 8395 / 10000 Epoch 55 training complete Cost on training data: 0.805778782386357 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.172367941841726 Accuracy on evaluation data: 8408 / 10000 Epoch 56 training complete Cost on training data: 0.7987269778265124 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1761319882370984 Accuracy on evaluation data: 8401 / 10000 Epoch 57 training complete Cost on training data: 0.7906693290400094 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1724772566768158 Accuracy on evaluation data: 8400 / 10000 Epoch 58 training complete Cost on training data: 0.7839454856281693 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1674510374324722 Accuracy on evaluation data: 8410 / 10000 Epoch 59 training complete Cost on training data: 0.7768349139088552 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1602928677115827 Accuracy on evaluation data: 8414 / 10000 Epoch 60 training complete Cost on training data: 0.7701948501121045 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1649740554734405 Accuracy on evaluation data: 8401 / 10000 Epoch 61 training complete Cost on training data: 0.76265131896608 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1610097442259038 Accuracy on evaluation data: 8420 / 10000 Epoch 62 training complete Cost on training data: 0.7563411017977935 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1677569586756251 Accuracy on evaluation data: 8387 / 10000 Epoch 63 training complete Cost on training data: 0.7487698963499093 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1667465701026938 Accuracy on evaluation data: 8411 / 10000 Epoch 64 training complete Cost on training data: 0.7420017001531081 Accuracy on training data: 999 / 1000 Cost on evaluation data: 1.1609317453576495 Accuracy on evaluation data: 8420 / 10000 Epoch 65 training complete Cost on training data: 0.7357105122958817 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.155752894849745 Accuracy on evaluation data: 8425 / 10000 Epoch 66 training complete Cost on training data: 0.7289733522730543 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1577199669551295 Accuracy on evaluation data: 8432 / 10000 Epoch 67 training complete Cost on training data: 0.7235684943760071 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1688554113909086 Accuracy on evaluation data: 8398 / 10000 Epoch 68 training complete Cost on training data: 0.7159325158524454 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.154304690658254 Accuracy on evaluation data: 8426 / 10000 Epoch 69 training complete Cost on training data: 0.7093997734589172 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1574750196566603 Accuracy on evaluation data: 8414 / 10000 Epoch 70 training complete Cost on training data: 0.7035583367839017 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1516106340542782 Accuracy on evaluation data: 8442 / 10000 Epoch 71 training complete Cost on training data: 0.6968430288757788 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.142106898612304 Accuracy on evaluation data: 8435 / 10000 Epoch 72 training complete Cost on training data: 0.6909832833275426 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1529215728801063 Accuracy on evaluation data: 8421 / 10000 Epoch 73 training complete Cost on training data: 0.6855772122537542 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1457975205409108 Accuracy on evaluation data: 8434 / 10000 Epoch 74 training complete Cost on training data: 0.6786027156334329 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.135481103621664 Accuracy on evaluation data: 8459 / 10000 Epoch 75 training complete Cost on training data: 0.6727448600233423 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1437997618199078 Accuracy on evaluation data: 8442 / 10000 Epoch 76 training complete Cost on training data: 0.6672691866478249 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1442576706424303 Accuracy on evaluation data: 8422 / 10000 Epoch 77 training complete Cost on training data: 0.6616917968102124 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1435320800257693 Accuracy on evaluation data: 8435 / 10000 Epoch 78 training complete Cost on training data: 0.6552344417618767 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.145340054605354 Accuracy on evaluation data: 8445 / 10000 Epoch 79 training complete Cost on training data: 0.6497423315673907 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1320900400485996 Accuracy on evaluation data: 8443 / 10000 Epoch 80 training complete Cost on training data: 0.6439332583387082 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.13272644353737 Accuracy on evaluation data: 8460 / 10000 Epoch 81 training complete Cost on training data: 0.6383980997901139 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1334349258652565 Accuracy on evaluation data: 8450 / 10000 Epoch 82 training complete Cost on training data: 0.6328834371928292 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1276393352544032 Accuracy on evaluation data: 8464 / 10000 Epoch 83 training complete Cost on training data: 0.6275276812766616 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1369029185673407 Accuracy on evaluation data: 8458 / 10000 Epoch 84 training complete Cost on training data: 0.6221252884667142 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1251081483350736 Accuracy on evaluation data: 8477 / 10000 Epoch 85 training complete Cost on training data: 0.6167786748976244 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.129389445581057 Accuracy on evaluation data: 8462 / 10000 Epoch 86 training complete Cost on training data: 0.6112779255542808 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1196692186773112 Accuracy on evaluation data: 8463 / 10000 Epoch 87 training complete Cost on training data: 0.6060701874474181 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1166357542958638 Accuracy on evaluation data: 8471 / 10000 Epoch 88 training complete Cost on training data: 0.6010666249184339 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.125102894622701 Accuracy on evaluation data: 8469 / 10000 Epoch 89 training complete Cost on training data: 0.5959465659903667 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1213750906869682 Accuracy on evaluation data: 8470 / 10000 Epoch 90 training complete Cost on training data: 0.5906568544392168 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1259289331964941 Accuracy on evaluation data: 8465 / 10000 Epoch 91 training complete Cost on training data: 0.5861264127955454 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1184106580461106 Accuracy on evaluation data: 8477 / 10000 Epoch 92 training complete Cost on training data: 0.580671935411445 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1184002783363547 Accuracy on evaluation data: 8470 / 10000 Epoch 93 training complete Cost on training data: 0.5760981459781768 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1228835056066304 Accuracy on evaluation data: 8475 / 10000 Epoch 94 training complete Cost on training data: 0.5709105081459104 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1060498607910458 Accuracy on evaluation data: 8481 / 10000 Epoch 95 training complete Cost on training data: 0.5660342620187431 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1124311855112545 Accuracy on evaluation data: 8468 / 10000 Epoch 96 training complete Cost on training data: 0.5612067120458198 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1075789221289434 Accuracy on evaluation data: 8483 / 10000 Epoch 97 training complete Cost on training data: 0.5568060296911028 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.105766761279775 Accuracy on evaluation data: 8469 / 10000 Epoch 98 training complete Cost on training data: 0.5518568991926573 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1072128439657136 Accuracy on evaluation data: 8481 / 10000 Epoch 99 training complete Cost on training data: 0.5472253893243857 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1061384536719019 Accuracy on evaluation data: 8494 / 10000 Epoch 100 training complete Cost on training data: 0.5426711441807877 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.100378031811514 Accuracy on evaluation data: 8500 / 10000 Epoch 101 training complete Cost on training data: 0.5380397636741305 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.1002199662004 Accuracy on evaluation data: 8499 / 10000 Epoch 102 training complete Cost on training data: 0.5335646434856679 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0988213785480394 Accuracy on evaluation data: 8490 / 10000 Epoch 103 training complete Cost on training data: 0.5294047294109829 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0900107533164984 Accuracy on evaluation data: 8504 / 10000 Epoch 104 training complete Cost on training data: 0.52523416065568 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0964760601101404 Accuracy on evaluation data: 8507 / 10000 Epoch 105 training complete Cost on training data: 0.5207395152501778 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0927849650735937 Accuracy on evaluation data: 8492 / 10000 Epoch 106 training complete Cost on training data: 0.5163693446450212 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0901597358410224 Accuracy on evaluation data: 8507 / 10000 Epoch 107 training complete Cost on training data: 0.5120147366887396 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0844035394638436 Accuracy on evaluation data: 8509 / 10000 Epoch 108 training complete Cost on training data: 0.5079181077933959 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0856628699864233 Accuracy on evaluation data: 8514 / 10000 Epoch 109 training complete Cost on training data: 0.5036345285230972 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0849985286006492 Accuracy on evaluation data: 8513 / 10000 Epoch 110 training complete Cost on training data: 0.49979401285433644 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.079939108150978 Accuracy on evaluation data: 8523 / 10000 Epoch 111 training complete Cost on training data: 0.49589769801639955 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0731377554486958 Accuracy on evaluation data: 8500 / 10000 Epoch 112 training complete Cost on training data: 0.49160978873305156 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.080378646446618 Accuracy on evaluation data: 8513 / 10000 Epoch 113 training complete Cost on training data: 0.4876300112581351 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0745828097900179 Accuracy on evaluation data: 8508 / 10000 Epoch 114 training complete Cost on training data: 0.4836723405761315 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.075208901561714 Accuracy on evaluation data: 8520 / 10000 Epoch 115 training complete Cost on training data: 0.47973197290061925 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0686971799792375 Accuracy on evaluation data: 8520 / 10000 Epoch 116 training complete Cost on training data: 0.4763398529076438 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0707577092006326 Accuracy on evaluation data: 8515 / 10000 Epoch 117 training complete Cost on training data: 0.4721794847942432 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0663157688165716 Accuracy on evaluation data: 8539 / 10000 Epoch 118 training complete Cost on training data: 0.4685008823816642 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0645619067938241 Accuracy on evaluation data: 8518 / 10000 Epoch 119 training complete Cost on training data: 0.4649434739239494 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0712796107664448 Accuracy on evaluation data: 8515 / 10000 Epoch 120 training complete Cost on training data: 0.46083726276079234 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0630403877519798 Accuracy on evaluation data: 8539 / 10000 Epoch 121 training complete Cost on training data: 0.45737056060447684 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.058825461535758 Accuracy on evaluation data: 8524 / 10000 Epoch 122 training complete Cost on training data: 0.45376923712463946 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.059786012154478 Accuracy on evaluation data: 8542 / 10000 Epoch 123 training complete Cost on training data: 0.4501138092475525 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.054497592028444 Accuracy on evaluation data: 8526 / 10000 Epoch 124 training complete Cost on training data: 0.44651199771842986 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0565889019220311 Accuracy on evaluation data: 8535 / 10000 Epoch 125 training complete Cost on training data: 0.4429338795642369 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0542271093617395 Accuracy on evaluation data: 8543 / 10000 Epoch 126 training complete Cost on training data: 0.43965173142168684 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.054063176870209 Accuracy on evaluation data: 8529 / 10000 Epoch 127 training complete Cost on training data: 0.43615191533552083 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.05726970234447 Accuracy on evaluation data: 8533 / 10000 Epoch 128 training complete Cost on training data: 0.4326840876960149 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0541307579736678 Accuracy on evaluation data: 8555 / 10000 Epoch 129 training complete Cost on training data: 0.4292515478091215 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0452310988523206 Accuracy on evaluation data: 8566 / 10000 Epoch 130 training complete Cost on training data: 0.42599583041749456 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.044747823372503 Accuracy on evaluation data: 8559 / 10000 Epoch 131 training complete Cost on training data: 0.4228333858996333 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.042498469069074 Accuracy on evaluation data: 8534 / 10000 Epoch 132 training complete Cost on training data: 0.4192813211802949 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0431359244934744 Accuracy on evaluation data: 8559 / 10000 Epoch 133 training complete Cost on training data: 0.4160666888406107 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0409472442784973 Accuracy on evaluation data: 8548 / 10000 Epoch 134 training complete Cost on training data: 0.4128396953510987 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.038907117079897 Accuracy on evaluation data: 8564 / 10000 Epoch 135 training complete Cost on training data: 0.40976503154808963 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0382415495506565 Accuracy on evaluation data: 8570 / 10000 Epoch 136 training complete Cost on training data: 0.4064628935065046 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0334902529629897 Accuracy on evaluation data: 8552 / 10000 Epoch 137 training complete Cost on training data: 0.4033967976834742 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.032090639686283 Accuracy on evaluation data: 8555 / 10000 Epoch 138 training complete Cost on training data: 0.40031038484944415 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0284082484237094 Accuracy on evaluation data: 8573 / 10000 Epoch 139 training complete Cost on training data: 0.3972970573611687 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0258324426923557 Accuracy on evaluation data: 8556 / 10000 Epoch 140 training complete Cost on training data: 0.3943584506185519 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0298310624445937 Accuracy on evaluation data: 8560 / 10000 Epoch 141 training complete Cost on training data: 0.39120683113290244 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.028337639590758 Accuracy on evaluation data: 8566 / 10000 Epoch 142 training complete Cost on training data: 0.38848087310504403 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.018580436270432 Accuracy on evaluation data: 8557 / 10000 Epoch 143 training complete Cost on training data: 0.38536270281883955 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.022723966140331 Accuracy on evaluation data: 8577 / 10000 Epoch 144 training complete Cost on training data: 0.3824613198142168 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0224744277019158 Accuracy on evaluation data: 8567 / 10000 Epoch 145 training complete Cost on training data: 0.3797024443953414 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0221023701873893 Accuracy on evaluation data: 8565 / 10000 Epoch 146 training complete Cost on training data: 0.3768851487747798 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0163006934093424 Accuracy on evaluation data: 8572 / 10000 Epoch 147 training complete Cost on training data: 0.37397519712488925 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.016980417190237 Accuracy on evaluation data: 8577 / 10000 Epoch 148 training complete Cost on training data: 0.37137686970197914 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.011710160417635 Accuracy on evaluation data: 8580 / 10000 Epoch 149 training complete Cost on training data: 0.3685688099007376 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.014571757311663 Accuracy on evaluation data: 8570 / 10000 Epoch 150 training complete Cost on training data: 0.3657936421174424 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0108394155438951 Accuracy on evaluation data: 8572 / 10000 Epoch 151 training complete Cost on training data: 0.36312853286413804 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0128783771821217 Accuracy on evaluation data: 8571 / 10000 Epoch 152 training complete Cost on training data: 0.36085510824244477 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0097383655086116 Accuracy on evaluation data: 8566 / 10000 Epoch 153 training complete Cost on training data: 0.35799258689175095 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0108136294487764 Accuracy on evaluation data: 8575 / 10000 Epoch 154 training complete Cost on training data: 0.35538710006655067 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0077854021898414 Accuracy on evaluation data: 8585 / 10000 Epoch 155 training complete Cost on training data: 0.35271170449808054 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0054234676795113 Accuracy on evaluation data: 8585 / 10000 Epoch 156 training complete Cost on training data: 0.35018199235213654 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.0040649538199333 Accuracy on evaluation data: 8587 / 10000 Epoch 157 training complete Cost on training data: 0.34766872465283727 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 1.00090907590078 Accuracy on evaluation data: 8584 / 10000 Epoch 158 training complete Cost on training data: 0.34531116354604563 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9984777760002546 Accuracy on evaluation data: 8590 / 10000 Epoch 159 training complete Cost on training data: 0.3426584939464257 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9970503420863798 Accuracy on evaluation data: 8591 / 10000 Epoch 160 training complete Cost on training data: 0.3403031228838666 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9955190435795641 Accuracy on evaluation data: 8588 / 10000 Epoch 161 training complete Cost on training data: 0.3378355694728108 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9949213751773776 Accuracy on evaluation data: 8595 / 10000 Epoch 162 training complete Cost on training data: 0.3356056767370044 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9900862138776373 Accuracy on evaluation data: 8591 / 10000 Epoch 163 training complete Cost on training data: 0.33310719669294325 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9913091622946635 Accuracy on evaluation data: 8590 / 10000 Epoch 164 training complete Cost on training data: 0.33085299998072476 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9921913237587365 Accuracy on evaluation data: 8591 / 10000 Epoch 165 training complete Cost on training data: 0.3285090890048322 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9901275774854743 Accuracy on evaluation data: 8595 / 10000 Epoch 166 training complete Cost on training data: 0.3263825835415328 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9863752173064689 Accuracy on evaluation data: 8599 / 10000 Epoch 167 training complete Cost on training data: 0.3237915297385139 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9846798984106111 Accuracy on evaluation data: 8596 / 10000 Epoch 168 training complete Cost on training data: 0.32158844793255303 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9854608993112698 Accuracy on evaluation data: 8591 / 10000 Epoch 169 training complete Cost on training data: 0.3195464556953592 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9835123271244862 Accuracy on evaluation data: 8598 / 10000 Epoch 170 training complete Cost on training data: 0.317141138389106 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9796438058708128 Accuracy on evaluation data: 8608 / 10000 Epoch 171 training complete Cost on training data: 0.3150041408200562 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9850629369437014 Accuracy on evaluation data: 8604 / 10000 Epoch 172 training complete Cost on training data: 0.31282405970860505 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9775500072502445 Accuracy on evaluation data: 8604 / 10000 Epoch 173 training complete Cost on training data: 0.31063170022820646 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9750909696904299 Accuracy on evaluation data: 8597 / 10000 Epoch 174 training complete Cost on training data: 0.3086164420005054 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9735322648485687 Accuracy on evaluation data: 8616 / 10000 Epoch 175 training complete Cost on training data: 0.30659936417506584 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9737922837158631 Accuracy on evaluation data: 8612 / 10000 Epoch 176 training complete Cost on training data: 0.30429730075902967 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9730490636218293 Accuracy on evaluation data: 8597 / 10000 Epoch 177 training complete Cost on training data: 0.30236591054689943 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9717680417877619 Accuracy on evaluation data: 8605 / 10000 Epoch 178 training complete Cost on training data: 0.30022352996640783 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9657337660887518 Accuracy on evaluation data: 8619 / 10000 Epoch 179 training complete Cost on training data: 0.2982864533786486 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9673564428068605 Accuracy on evaluation data: 8609 / 10000 Epoch 180 training complete Cost on training data: 0.2963812191834984 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9659019178588237 Accuracy on evaluation data: 8613 / 10000 Epoch 181 training complete Cost on training data: 0.2943137630449074 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.962307111801244 Accuracy on evaluation data: 8621 / 10000 Epoch 182 training complete Cost on training data: 0.2922992628006298 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9627495828237937 Accuracy on evaluation data: 8622 / 10000 Epoch 183 training complete Cost on training data: 0.2902443604580467 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9604034454622192 Accuracy on evaluation data: 8619 / 10000 Epoch 184 training complete Cost on training data: 0.28854875075350334 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9601704289619261 Accuracy on evaluation data: 8627 / 10000 Epoch 185 training complete Cost on training data: 0.2863777436727088 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.957753524939023 Accuracy on evaluation data: 8615 / 10000 Epoch 186 training complete Cost on training data: 0.2845138185768666 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9618269604373911 Accuracy on evaluation data: 8620 / 10000 Epoch 187 training complete Cost on training data: 0.28283263133510983 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.953499131707952 Accuracy on evaluation data: 8629 / 10000 Epoch 188 training complete Cost on training data: 0.280866056155417 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9575321711864925 Accuracy on evaluation data: 8613 / 10000 Epoch 189 training complete Cost on training data: 0.279058864259464 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9567347439271653 Accuracy on evaluation data: 8624 / 10000 Epoch 190 training complete Cost on training data: 0.2771139561623108 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9525171937974678 Accuracy on evaluation data: 8630 / 10000 Epoch 191 training complete Cost on training data: 0.27536900577029405 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.949788560785232 Accuracy on evaluation data: 8621 / 10000 Epoch 192 training complete Cost on training data: 0.27375144392891065 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9504958774810262 Accuracy on evaluation data: 8624 / 10000 Epoch 193 training complete Cost on training data: 0.2718968371231152 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9464862060950203 Accuracy on evaluation data: 8639 / 10000 Epoch 194 training complete Cost on training data: 0.27029286454149304 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9492755218281824 Accuracy on evaluation data: 8644 / 10000 Epoch 195 training complete Cost on training data: 0.26847142641013705 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9566018777828571 Accuracy on evaluation data: 8627 / 10000 Epoch 196 training complete Cost on training data: 0.2666335939921046 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9477481981511001 Accuracy on evaluation data: 8636 / 10000 Epoch 197 training complete Cost on training data: 0.2651374125542186 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9396362842646786 Accuracy on evaluation data: 8652 / 10000 Epoch 198 training complete Cost on training data: 0.2632965290836348 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9407665642837855 Accuracy on evaluation data: 8641 / 10000 Epoch 199 training complete Cost on training data: 0.2616826647558872 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9441674938361294 Accuracy on evaluation data: 8639 / 10000 Epoch 200 training complete Cost on training data: 0.25988938503472225 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9383478224987111 Accuracy on evaluation data: 8636 / 10000 Epoch 201 training complete Cost on training data: 0.2584688652869881 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9381589456557016 Accuracy on evaluation data: 8641 / 10000 Epoch 202 training complete Cost on training data: 0.25675261711143976 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9363087006261198 Accuracy on evaluation data: 8633 / 10000 Epoch 203 training complete Cost on training data: 0.2549806002368845 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9374467003094413 Accuracy on evaluation data: 8647 / 10000 Epoch 204 training complete Cost on training data: 0.25344269793200874 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.931210670511748 Accuracy on evaluation data: 8649 / 10000 Epoch 205 training complete Cost on training data: 0.2521553929400422 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9311850191669658 Accuracy on evaluation data: 8660 / 10000 Epoch 206 training complete Cost on training data: 0.25037697554788413 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9313284762598302 Accuracy on evaluation data: 8665 / 10000 Epoch 207 training complete Cost on training data: 0.2489173769908963 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9347901300663953 Accuracy on evaluation data: 8651 / 10000 Epoch 208 training complete Cost on training data: 0.24729540873151434 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9323403598425785 Accuracy on evaluation data: 8667 / 10000 Epoch 209 training complete Cost on training data: 0.24579436325741222 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9283407320427631 Accuracy on evaluation data: 8649 / 10000 Epoch 210 training complete Cost on training data: 0.24424169041095997 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.923566411053962 Accuracy on evaluation data: 8677 / 10000 Epoch 211 training complete Cost on training data: 0.24269927248517825 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9268513094560215 Accuracy on evaluation data: 8671 / 10000 Epoch 212 training complete Cost on training data: 0.24121942182590764 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9216509435151032 Accuracy on evaluation data: 8667 / 10000 Epoch 213 training complete Cost on training data: 0.23990350598194607 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9273240920041805 Accuracy on evaluation data: 8663 / 10000 Epoch 214 training complete Cost on training data: 0.23823197200383942 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.921769830037589 Accuracy on evaluation data: 8662 / 10000 Epoch 215 training complete Cost on training data: 0.23701995434122158 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9224243125300559 Accuracy on evaluation data: 8660 / 10000 Epoch 216 training complete Cost on training data: 0.23536747054157547 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9184186623253383 Accuracy on evaluation data: 8676 / 10000 Epoch 217 training complete Cost on training data: 0.23419937121139953 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9202427079076817 Accuracy on evaluation data: 8664 / 10000 Epoch 218 training complete Cost on training data: 0.2330044036927178 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.925146712482847 Accuracy on evaluation data: 8676 / 10000 Epoch 219 training complete Cost on training data: 0.2312596724716881 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9206080162930965 Accuracy on evaluation data: 8673 / 10000 Epoch 220 training complete Cost on training data: 0.23031645833158104 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9186762344355945 Accuracy on evaluation data: 8693 / 10000 Epoch 221 training complete Cost on training data: 0.22852373208896215 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9157567645926983 Accuracy on evaluation data: 8681 / 10000 Epoch 222 training complete Cost on training data: 0.22714725274498995 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9135863072322205 Accuracy on evaluation data: 8673 / 10000 Epoch 223 training complete Cost on training data: 0.22587134615750346 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.914875845634017 Accuracy on evaluation data: 8692 / 10000 Epoch 224 training complete Cost on training data: 0.22471543142772396 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9140169572443706 Accuracy on evaluation data: 8694 / 10000 Epoch 225 training complete Cost on training data: 0.22319764742878007 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9109334878257309 Accuracy on evaluation data: 8681 / 10000 Epoch 226 training complete Cost on training data: 0.22203460880767 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9118069504960488 Accuracy on evaluation data: 8679 / 10000 Epoch 227 training complete Cost on training data: 0.22077112517778738 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9100672062235233 Accuracy on evaluation data: 8693 / 10000 Epoch 228 training complete Cost on training data: 0.21945204892126075 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9076287588568888 Accuracy on evaluation data: 8690 / 10000 Epoch 229 training complete Cost on training data: 0.21836887455102844 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9138478062382027 Accuracy on evaluation data: 8687 / 10000 Epoch 230 training complete Cost on training data: 0.21688496595709547 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.908990815376184 Accuracy on evaluation data: 8701 / 10000 Epoch 231 training complete Cost on training data: 0.2158607257598287 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9030413552962572 Accuracy on evaluation data: 8694 / 10000 Epoch 232 training complete Cost on training data: 0.21442570199725358 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9057739751178543 Accuracy on evaluation data: 8701 / 10000 Epoch 233 training complete Cost on training data: 0.21335977468874118 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.905471356610055 Accuracy on evaluation data: 8686 / 10000 Epoch 234 training complete Cost on training data: 0.21213295908548604 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9068125487436939 Accuracy on evaluation data: 8696 / 10000 Epoch 235 training complete Cost on training data: 0.21116580709214125 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8985111163433342 Accuracy on evaluation data: 8691 / 10000 Epoch 236 training complete Cost on training data: 0.20974135291887233 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.9013553847590637 Accuracy on evaluation data: 8704 / 10000 Epoch 237 training complete Cost on training data: 0.20902771097558934 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.905843516512316 Accuracy on evaluation data: 8701 / 10000 Epoch 238 training complete Cost on training data: 0.20752110861891707 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8975060263870962 Accuracy on evaluation data: 8702 / 10000 Epoch 239 training complete Cost on training data: 0.20666548641945548 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.897458046069742 Accuracy on evaluation data: 8701 / 10000 Epoch 240 training complete Cost on training data: 0.20516917587776332 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8972825714057207 Accuracy on evaluation data: 8704 / 10000 Epoch 241 training complete Cost on training data: 0.20404513591729895 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8958285017955858 Accuracy on evaluation data: 8704 / 10000 Epoch 242 training complete Cost on training data: 0.20308501563760334 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8933725254857114 Accuracy on evaluation data: 8715 / 10000 Epoch 243 training complete Cost on training data: 0.20207403845826008 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8945412115057829 Accuracy on evaluation data: 8710 / 10000 Epoch 244 training complete Cost on training data: 0.20090103199861262 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.896354523311267 Accuracy on evaluation data: 8698 / 10000 Epoch 245 training complete Cost on training data: 0.19985771509972403 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8910236688436194 Accuracy on evaluation data: 8714 / 10000 Epoch 246 training complete Cost on training data: 0.19880992614009171 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8959842012066697 Accuracy on evaluation data: 8708 / 10000 Epoch 247 training complete Cost on training data: 0.19762300820897988 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8896306922687188 Accuracy on evaluation data: 8714 / 10000 Epoch 248 training complete Cost on training data: 0.19665061492181354 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8871209620294733 Accuracy on evaluation data: 8717 / 10000 Epoch 249 training complete Cost on training data: 0.19571459431875518 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8871345609980276 Accuracy on evaluation data: 8711 / 10000 Epoch 250 training complete Cost on training data: 0.19467215390331755 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8827273599503881 Accuracy on evaluation data: 8726 / 10000 Epoch 251 training complete Cost on training data: 0.19369183099718398 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8874416355569478 Accuracy on evaluation data: 8718 / 10000 Epoch 252 training complete Cost on training data: 0.192713459763124 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.885017442705497 Accuracy on evaluation data: 8719 / 10000 Epoch 253 training complete Cost on training data: 0.19165592854161145 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8796660589499661 Accuracy on evaluation data: 8719 / 10000 Epoch 254 training complete Cost on training data: 0.1906992830498837 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8852527111928207 Accuracy on evaluation data: 8717 / 10000 Epoch 255 training complete Cost on training data: 0.18987857405109324 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8768442183460146 Accuracy on evaluation data: 8729 / 10000 Epoch 256 training complete Cost on training data: 0.18876869005230054 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8803530344668762 Accuracy on evaluation data: 8724 / 10000 Epoch 257 training complete Cost on training data: 0.18790291522859634 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8796840253468329 Accuracy on evaluation data: 8724 / 10000 Epoch 258 training complete Cost on training data: 0.18680638466839836 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8814789381055727 Accuracy on evaluation data: 8722 / 10000 Epoch 259 training complete Cost on training data: 0.1858223497920047 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8782524710274955 Accuracy on evaluation data: 8722 / 10000 Epoch 260 training complete Cost on training data: 0.1851331972053311 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8818642229781822 Accuracy on evaluation data: 8714 / 10000 Epoch 261 training complete Cost on training data: 0.18405047616237283 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8766672977860988 Accuracy on evaluation data: 8735 / 10000 Epoch 262 training complete Cost on training data: 0.1832290889453867 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.873742031222319 Accuracy on evaluation data: 8727 / 10000 Epoch 263 training complete Cost on training data: 0.18237111496653696 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8781558197293345 Accuracy on evaluation data: 8718 / 10000 Epoch 264 training complete Cost on training data: 0.18158797740176535 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8787899570140779 Accuracy on evaluation data: 8731 / 10000 Epoch 265 training complete Cost on training data: 0.1804788401626141 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8784740042938518 Accuracy on evaluation data: 8727 / 10000 Epoch 266 training complete Cost on training data: 0.17961304241880377 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8745434667728088 Accuracy on evaluation data: 8728 / 10000 Epoch 267 training complete Cost on training data: 0.17880555004096815 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8747834270544793 Accuracy on evaluation data: 8732 / 10000 Epoch 268 training complete Cost on training data: 0.17803010361153762 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8753472940556462 Accuracy on evaluation data: 8730 / 10000 Epoch 269 training complete Cost on training data: 0.17709268685236854 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8702290007130803 Accuracy on evaluation data: 8746 / 10000 Epoch 270 training complete Cost on training data: 0.1761624007930124 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8724291169250498 Accuracy on evaluation data: 8731 / 10000 Epoch 271 training complete Cost on training data: 0.17526785299409112 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8695080400735214 Accuracy on evaluation data: 8742 / 10000 Epoch 272 training complete Cost on training data: 0.17440818970390012 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.868413955057592 Accuracy on evaluation data: 8742 / 10000 Epoch 273 training complete Cost on training data: 0.17371291586772553 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8661118930541547 Accuracy on evaluation data: 8730 / 10000 Epoch 274 training complete Cost on training data: 0.17281687516691144 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8722480394357472 Accuracy on evaluation data: 8750 / 10000 Epoch 275 training complete Cost on training data: 0.17212397937429325 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8708098226644576 Accuracy on evaluation data: 8747 / 10000 Epoch 276 training complete Cost on training data: 0.17130834243087967 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8680567324915787 Accuracy on evaluation data: 8738 / 10000 Epoch 277 training complete Cost on training data: 0.1705983452888632 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8679780190483897 Accuracy on evaluation data: 8733 / 10000 Epoch 278 training complete Cost on training data: 0.16976784290285465 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8687125166801766 Accuracy on evaluation data: 8741 / 10000 Epoch 279 training complete Cost on training data: 0.16897487447558304 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.868062550136856 Accuracy on evaluation data: 8741 / 10000 Epoch 280 training complete Cost on training data: 0.1681435488497453 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8664250486527446 Accuracy on evaluation data: 8739 / 10000 Epoch 281 training complete Cost on training data: 0.16752242651900234 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8596361075275913 Accuracy on evaluation data: 8742 / 10000 Epoch 282 training complete Cost on training data: 0.16694517728433494 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8644967911578578 Accuracy on evaluation data: 8746 / 10000 Epoch 283 training complete Cost on training data: 0.16591901283459615 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8661258031447138 Accuracy on evaluation data: 8745 / 10000 Epoch 284 training complete Cost on training data: 0.16545278495789495 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8691742560718051 Accuracy on evaluation data: 8742 / 10000 Epoch 285 training complete Cost on training data: 0.16461081030928087 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.860170074662745 Accuracy on evaluation data: 8752 / 10000 Epoch 286 training complete Cost on training data: 0.16387809903379055 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8593284942714079 Accuracy on evaluation data: 8744 / 10000 Epoch 287 training complete Cost on training data: 0.16304514019924352 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8592619320684322 Accuracy on evaluation data: 8748 / 10000 Epoch 288 training complete Cost on training data: 0.16235159857895218 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8593827738015778 Accuracy on evaluation data: 8739 / 10000 Epoch 289 training complete Cost on training data: 0.16168332722360398 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8603761701070151 Accuracy on evaluation data: 8751 / 10000 Epoch 290 training complete Cost on training data: 0.16085056685944527 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8561631786061727 Accuracy on evaluation data: 8749 / 10000 Epoch 291 training complete Cost on training data: 0.16028388092220697 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.861405446259314 Accuracy on evaluation data: 8749 / 10000 Epoch 292 training complete Cost on training data: 0.1597981086525645 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8499553395549216 Accuracy on evaluation data: 8761 / 10000 Epoch 293 training complete Cost on training data: 0.15891831916068125 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8561751683714229 Accuracy on evaluation data: 8764 / 10000 Epoch 294 training complete Cost on training data: 0.15841224299383208 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8570601534398546 Accuracy on evaluation data: 8758 / 10000 Epoch 295 training complete Cost on training data: 0.15763790106980125 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8591204786877937 Accuracy on evaluation data: 8750 / 10000 Epoch 296 training complete Cost on training data: 0.1570692587700943 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8516669886751229 Accuracy on evaluation data: 8762 / 10000 Epoch 297 training complete Cost on training data: 0.1564893556655105 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8604790151106874 Accuracy on evaluation data: 8752 / 10000 Epoch 298 training complete Cost on training data: 0.15581712150175053 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8590736400347022 Accuracy on evaluation data: 8754 / 10000 Epoch 299 training complete Cost on training data: 0.1550418737771008 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8563272926522457 Accuracy on evaluation data: 8758 / 10000 Epoch 300 training complete Cost on training data: 0.1546069113991705 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8633989711839911 Accuracy on evaluation data: 8750 / 10000 Epoch 301 training complete Cost on training data: 0.15384522961996192 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8575040517327326 Accuracy on evaluation data: 8755 / 10000 Epoch 302 training complete Cost on training data: 0.153355404670292 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8548103414629044 Accuracy on evaluation data: 8756 / 10000 Epoch 303 training complete Cost on training data: 0.15256887885695644 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.848563865397737 Accuracy on evaluation data: 8773 / 10000 Epoch 304 training complete Cost on training data: 0.1520211753401304 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8581834888737044 Accuracy on evaluation data: 8750 / 10000 Epoch 305 training complete Cost on training data: 0.15153503383253425 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8500322556026624 Accuracy on evaluation data: 8763 / 10000 Epoch 306 training complete Cost on training data: 0.15132816513799746 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8546914421092543 Accuracy on evaluation data: 8766 / 10000 Epoch 307 training complete Cost on training data: 0.15018184983382027 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8470091349826819 Accuracy on evaluation data: 8770 / 10000 Epoch 308 training complete Cost on training data: 0.14979032889717372 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8529945270926104 Accuracy on evaluation data: 8765 / 10000 Epoch 309 training complete Cost on training data: 0.14919603036390208 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8451131173525848 Accuracy on evaluation data: 8764 / 10000 Epoch 310 training complete Cost on training data: 0.1486027239692737 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8509555995075965 Accuracy on evaluation data: 8764 / 10000 Epoch 311 training complete Cost on training data: 0.14797657037804773 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8511266568604978 Accuracy on evaluation data: 8768 / 10000 Epoch 312 training complete Cost on training data: 0.1477608150699406 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8574676773062803 Accuracy on evaluation data: 8763 / 10000 Epoch 313 training complete Cost on training data: 0.14692974751943663 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.850444061083833 Accuracy on evaluation data: 8768 / 10000 Epoch 314 training complete Cost on training data: 0.14668362017644135 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8474883114403449 Accuracy on evaluation data: 8762 / 10000 Epoch 315 training complete Cost on training data: 0.14582269857815605 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8471343928275197 Accuracy on evaluation data: 8773 / 10000 Epoch 316 training complete Cost on training data: 0.14528504532811662 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8486264785179806 Accuracy on evaluation data: 8773 / 10000 Epoch 317 training complete Cost on training data: 0.14491095205977828 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8451266002607654 Accuracy on evaluation data: 8775 / 10000 Epoch 318 training complete Cost on training data: 0.14426993117418524 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8433642733803693 Accuracy on evaluation data: 8780 / 10000 Epoch 319 training complete Cost on training data: 0.1438321603511557 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8468581179612625 Accuracy on evaluation data: 8758 / 10000 Epoch 320 training complete Cost on training data: 0.14317215897867297 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.840482956925582 Accuracy on evaluation data: 8785 / 10000 Epoch 321 training complete Cost on training data: 0.14292495379330583 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8448835571000327 Accuracy on evaluation data: 8778 / 10000 Epoch 322 training complete Cost on training data: 0.14209766562468454 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8415624299216345 Accuracy on evaluation data: 8780 / 10000 Epoch 323 training complete Cost on training data: 0.14184968306277826 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8438949761469066 Accuracy on evaluation data: 8778 / 10000 Epoch 324 training complete Cost on training data: 0.14121532608975104 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8435455043809489 Accuracy on evaluation data: 8773 / 10000 Epoch 325 training complete Cost on training data: 0.1407352278292615 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8459187913893154 Accuracy on evaluation data: 8772 / 10000 Epoch 326 training complete Cost on training data: 0.14056005979323763 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8468729253172412 Accuracy on evaluation data: 8791 / 10000 Epoch 327 training complete Cost on training data: 0.13984309974868192 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8438960543392997 Accuracy on evaluation data: 8776 / 10000 Epoch 328 training complete Cost on training data: 0.1393031840077545 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8461526625852205 Accuracy on evaluation data: 8772 / 10000 Epoch 329 training complete Cost on training data: 0.13893443875108552 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8466725252038557 Accuracy on evaluation data: 8774 / 10000 Epoch 330 training complete Cost on training data: 0.13836333971624212 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8412929901870647 Accuracy on evaluation data: 8775 / 10000 Epoch 331 training complete Cost on training data: 0.13798121398605698 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8379412428434512 Accuracy on evaluation data: 8773 / 10000 Epoch 332 training complete Cost on training data: 0.13756579456342607 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.839826115428956 Accuracy on evaluation data: 8785 / 10000 Epoch 333 training complete Cost on training data: 0.13699774549693122 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8360784938337461 Accuracy on evaluation data: 8791 / 10000 Epoch 334 training complete Cost on training data: 0.13661254851615787 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.843131035966578 Accuracy on evaluation data: 8782 / 10000 Epoch 335 training complete Cost on training data: 0.13618621814987159 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8417472732606027 Accuracy on evaluation data: 8783 / 10000 Epoch 336 training complete Cost on training data: 0.13565012325818337 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8419977742433912 Accuracy on evaluation data: 8783 / 10000 Epoch 337 training complete Cost on training data: 0.13525905839785057 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8410148641516034 Accuracy on evaluation data: 8780 / 10000 Epoch 338 training complete Cost on training data: 0.13491559339179013 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8423164484264181 Accuracy on evaluation data: 8779 / 10000 Epoch 339 training complete Cost on training data: 0.1344323535815333 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.842664809038009 Accuracy on evaluation data: 8785 / 10000 Epoch 340 training complete Cost on training data: 0.13404731061822198 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8405227423735879 Accuracy on evaluation data: 8779 / 10000 Epoch 341 training complete Cost on training data: 0.13355373396820433 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8396472815854342 Accuracy on evaluation data: 8785 / 10000 Epoch 342 training complete Cost on training data: 0.13307040752759386 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8385306816693389 Accuracy on evaluation data: 8786 / 10000 Epoch 343 training complete Cost on training data: 0.13275218974931693 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.838663780165443 Accuracy on evaluation data: 8783 / 10000 Epoch 344 training complete Cost on training data: 0.1324433897836284 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8322896913418766 Accuracy on evaluation data: 8796 / 10000 Epoch 345 training complete Cost on training data: 0.13209933579839758 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8450391804977546 Accuracy on evaluation data: 8784 / 10000 Epoch 346 training complete Cost on training data: 0.1314316701511752 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8356146399803589 Accuracy on evaluation data: 8796 / 10000 Epoch 347 training complete Cost on training data: 0.13131368532748672 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8357746382980542 Accuracy on evaluation data: 8780 / 10000 Epoch 348 training complete Cost on training data: 0.13072936057769857 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8369195080731275 Accuracy on evaluation data: 8780 / 10000 Epoch 349 training complete Cost on training data: 0.130349814479051 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8421027358067932 Accuracy on evaluation data: 8783 / 10000 Epoch 350 training complete Cost on training data: 0.1300845659978494 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8376856239448361 Accuracy on evaluation data: 8785 / 10000 Epoch 351 training complete Cost on training data: 0.1298038673776775 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8456000839095424 Accuracy on evaluation data: 8777 / 10000 Epoch 352 training complete Cost on training data: 0.1292694531459024 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8378961092644421 Accuracy on evaluation data: 8788 / 10000 Epoch 353 training complete Cost on training data: 0.1289583127009526 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8303405004961687 Accuracy on evaluation data: 8797 / 10000 Epoch 354 training complete Cost on training data: 0.12838220214374454 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8376466419269839 Accuracy on evaluation data: 8788 / 10000 Epoch 355 training complete Cost on training data: 0.1281504276141033 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.842210245651563 Accuracy on evaluation data: 8775 / 10000 Epoch 356 training complete Cost on training data: 0.12795474293066292 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8345268646356802 Accuracy on evaluation data: 8786 / 10000 Epoch 357 training complete Cost on training data: 0.12732501909625765 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8336268109642112 Accuracy on evaluation data: 8797 / 10000 Epoch 358 training complete Cost on training data: 0.12728450912521477 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.841932351706898 Accuracy on evaluation data: 8770 / 10000 Epoch 359 training complete Cost on training data: 0.12716156293969375 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8367820574512923 Accuracy on evaluation data: 8776 / 10000 Epoch 360 training complete Cost on training data: 0.12638695145313797 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8321287637891325 Accuracy on evaluation data: 8790 / 10000 Epoch 361 training complete Cost on training data: 0.12615606989434983 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8353553242508271 Accuracy on evaluation data: 8798 / 10000 Epoch 362 training complete Cost on training data: 0.1257316679583279 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8383729452223393 Accuracy on evaluation data: 8798 / 10000 Epoch 363 training complete Cost on training data: 0.12535505181304776 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8424090170979928 Accuracy on evaluation data: 8787 / 10000 Epoch 364 training complete Cost on training data: 0.12498550456407347 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8317105456597119 Accuracy on evaluation data: 8797 / 10000 Epoch 365 training complete Cost on training data: 0.12477479503094986 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8308041582396846 Accuracy on evaluation data: 8800 / 10000 Epoch 366 training complete Cost on training data: 0.12436206198020541 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8376529645035693 Accuracy on evaluation data: 8780 / 10000 Epoch 367 training complete Cost on training data: 0.12393343236225658 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8352680732768047 Accuracy on evaluation data: 8795 / 10000 Epoch 368 training complete Cost on training data: 0.12359744371206685 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8325036849006247 Accuracy on evaluation data: 8791 / 10000 Epoch 369 training complete Cost on training data: 0.12338945974522555 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8352216074832646 Accuracy on evaluation data: 8797 / 10000 Epoch 370 training complete Cost on training data: 0.12334604145825466 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8431169662289458 Accuracy on evaluation data: 8793 / 10000 Epoch 371 training complete Cost on training data: 0.12283331725188486 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8285677028643451 Accuracy on evaluation data: 8790 / 10000 Epoch 372 training complete Cost on training data: 0.12247976087574089 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8359789613879433 Accuracy on evaluation data: 8792 / 10000 Epoch 373 training complete Cost on training data: 0.12240715213924068 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8288199442690634 Accuracy on evaluation data: 8806 / 10000 Epoch 374 training complete Cost on training data: 0.1218214815554502 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.835155191862855 Accuracy on evaluation data: 8798 / 10000 Epoch 375 training complete Cost on training data: 0.1216793161345654 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8363447777000258 Accuracy on evaluation data: 8800 / 10000 Epoch 376 training complete Cost on training data: 0.1212549411994653 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8302505190580958 Accuracy on evaluation data: 8801 / 10000 Epoch 377 training complete Cost on training data: 0.12091637896576013 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8276392341166917 Accuracy on evaluation data: 8793 / 10000 Epoch 378 training complete Cost on training data: 0.12063856179848394 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8318815791445036 Accuracy on evaluation data: 8801 / 10000 Epoch 379 training complete Cost on training data: 0.12024383608696004 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8332620110540632 Accuracy on evaluation data: 8803 / 10000 Epoch 380 training complete Cost on training data: 0.1200298853153678 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8304495324699973 Accuracy on evaluation data: 8799 / 10000 Epoch 381 training complete Cost on training data: 0.11993416981604951 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.830252214438044 Accuracy on evaluation data: 8787 / 10000 Epoch 382 training complete Cost on training data: 0.11969626290203031 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8273790633700642 Accuracy on evaluation data: 8804 / 10000 Epoch 383 training complete Cost on training data: 0.11916854601410923 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8307873439050035 Accuracy on evaluation data: 8797 / 10000 Epoch 384 training complete Cost on training data: 0.1188639298321219 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8333581634199259 Accuracy on evaluation data: 8799 / 10000 Epoch 385 training complete Cost on training data: 0.11868051764206795 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8330874905761427 Accuracy on evaluation data: 8801 / 10000 Epoch 386 training complete Cost on training data: 0.11850167669051143 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8307881689869424 Accuracy on evaluation data: 8802 / 10000 Epoch 387 training complete Cost on training data: 0.11811432976982253 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8327728592264831 Accuracy on evaluation data: 8798 / 10000 Epoch 388 training complete Cost on training data: 0.11796020316729892 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8348151818920478 Accuracy on evaluation data: 8783 / 10000 Epoch 389 training complete Cost on training data: 0.11753848255812442 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8320888422582724 Accuracy on evaluation data: 8795 / 10000 Epoch 390 training complete Cost on training data: 0.11725473032176129 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8332554737252845 Accuracy on evaluation data: 8801 / 10000 Epoch 391 training complete Cost on training data: 0.11708829042162623 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8349636796974668 Accuracy on evaluation data: 8802 / 10000 Epoch 392 training complete Cost on training data: 0.11678559008525219 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8319947481378631 Accuracy on evaluation data: 8792 / 10000 Epoch 393 training complete Cost on training data: 0.11669829208430223 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8269181803307477 Accuracy on evaluation data: 8801 / 10000 Epoch 394 training complete Cost on training data: 0.11641542629859208 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.832593000267452 Accuracy on evaluation data: 8804 / 10000 Epoch 395 training complete Cost on training data: 0.11597176808243001 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.830180287413146 Accuracy on evaluation data: 8802 / 10000 Epoch 396 training complete Cost on training data: 0.11573759472250579 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.828598271123198 Accuracy on evaluation data: 8795 / 10000 Epoch 397 training complete Cost on training data: 0.11567845127433003 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8303041352390372 Accuracy on evaluation data: 8808 / 10000 Epoch 398 training complete Cost on training data: 0.1153003438591176 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.825470604759123 Accuracy on evaluation data: 8799 / 10000 Epoch 399 training complete Cost on training data: 0.11499844911758361 Accuracy on training data: 1000 / 1000 Cost on evaluation data: 0.8284975824916161 Accuracy on evaluation data: 8800 / 10000
CPU times: user 14min 42s, sys: 11min 45s, total: 26min 28s Wall time: 16min 41s
training_cost_xmin=200
test_accuracy_xmin=200
test_cost_xmin=0
training_accuracy_xmin=0
training_set_size=1000
lmbda=0.1
make_plots('/content/train1000-lambda_point1', 400,
training_cost_xmin,
test_accuracy_xmin,
test_cost_xmin,
training_accuracy_xmin,
training_set_size)
The cost on the training data decreases over the whole time, much as it did in the earlier, unregularized case
- training accuracy: 100%
- test accuracy: 88.08%
- training acc $-$ test acc: 11.92%
Clearly, the use of regularization has suppressed overfitting. What's more, the accuracy is considerably higher, with a peak classification accuracy of $\textbf{88.08 %}$ for the regularized case ($\lambda = 0.1$), compared to the peak of $\textbf{83.05 %}$ obtained in the unregularized case. Indeed, we could almost certainly get considerably better results by continuing to train past 400 epochs. It seems that, empirically, regularization is causing our network to generalize better, and considerably reducing the effects of overfitting.
What happens if we move out of the artificial environment of just having 1,000 training images, and return to the full 50,000 image training set? Of course, we've seen already that overfitting is much less of a problem with the full 50,000 images. Does regularization help any further? Let's keep the hyper-parameters the same as before - $30$ epochs, learning rate $0.5$, mini-batch size of $10$. However, we need to modify the regularization parameter. The reason is because the size $n$ of the training set has changed from $n = 1,000$ to $n = 50,000$, and this changes the weight decay factor $1 - \frac{\eta \lambda}{n}$. If we continued to use $\lambda = 0.1$ that would mean much less weight decay, and thus much less of a regularization effect. We compensate by changing to $\lambda = 5.0$. $$$$ $$\frac{\lambda}{n}=\frac{0.1}{1000} = \frac{\lambda_{50000}}{50000}$$ $$$$ $${\lambda_{50000}} = \frac{0.1 \times 50000}{1000} = 5$$ $$$$ Okay, let's train our network, stopping first to re-initialize the weights:
%%time
if __name__ == "__main__":
filename = input("Enter a file name: ")
num_epochs = int(input("Enter the number of epochs to run for: "))
training_cost_xmin = int(input("training_cost_xmin (suggest 200): "))
test_accuracy_xmin = int(input("test_accuracy_xmin (suggest 200): "))
test_cost_xmin = int(input("test_cost_xmin (suggest 0): "))
training_accuracy_xmin = int(input("training_accuracy_xmin (suggest 0): "))
training_set_size = int(input("Training set size (suggest 1000): "))
lmbda = float(input("Enter the regularization parameter, lambda (suggest: 5.0): "))
main(filename, num_epochs, training_cost_xmin,
test_accuracy_xmin, test_cost_xmin, training_accuracy_xmin,
training_set_size, lmbda)
Enter a file name: train50000-lambda5 Enter the number of epochs to run for: 30 training_cost_xmin (suggest 200): 15 test_accuracy_xmin (suggest 200): 15 test_cost_xmin (suggest 0): 0 training_accuracy_xmin (suggest 0): 0 Training set size (suggest 1000): 50000 Enter the regularization parameter, lambda (suggest: 5.0): 5 Epoch 0 training complete Cost on training data: 1.2734727241718988 Accuracy on training data: 46164 / 50000 Cost on evaluation data: 4.2905433057644355 Accuracy on evaluation data: 9216 / 10000 Epoch 1 training complete Cost on training data: 0.9419156008205658 Accuracy on training data: 46721 / 50000 Cost on evaluation data: 2.9450097579589958 Accuracy on evaluation data: 9279 / 10000 Epoch 2 training complete Cost on training data: 0.7565864531292588 Accuracy on training data: 46957 / 50000 Cost on evaluation data: 2.155298294411187 Accuracy on evaluation data: 9336 / 10000 Epoch 3 training complete Cost on training data: 0.6028287666804373 Accuracy on training data: 47445 / 50000 Cost on evaluation data: 1.6458785962838665 Accuracy on evaluation data: 9445 / 10000 Epoch 4 training complete Cost on training data: 0.5124487479761338 Accuracy on training data: 47766 / 50000 Cost on evaluation data: 1.3640756256352797 Accuracy on evaluation data: 9465 / 10000 Epoch 5 training complete Cost on training data: 0.4988030577938535 Accuracy on training data: 47580 / 50000 Cost on evaluation data: 1.2157115394650067 Accuracy on evaluation data: 9455 / 10000 Epoch 6 training complete Cost on training data: 0.43609154230748126 Accuracy on training data: 47986 / 50000 Cost on evaluation data: 1.11371122465704 Accuracy on evaluation data: 9496 / 10000 Epoch 7 training complete Cost on training data: 0.42985246104424635 Accuracy on training data: 48046 / 50000 Cost on evaluation data: 1.056222328708533 Accuracy on evaluation data: 9526 / 10000 Epoch 8 training complete Cost on training data: 0.4167811747375013 Accuracy on training data: 48013 / 50000 Cost on evaluation data: 1.0273016132708597 Accuracy on evaluation data: 9512 / 10000 Epoch 9 training complete Cost on training data: 0.4034474632442032 Accuracy on training data: 48226 / 50000 Cost on evaluation data: 0.9997864707487703 Accuracy on evaluation data: 9573 / 10000 Epoch 10 training complete Cost on training data: 0.38505878309243957 Accuracy on training data: 48318 / 50000 Cost on evaluation data: 0.9861193088556921 Accuracy on evaluation data: 9566 / 10000 Epoch 11 training complete Cost on training data: 0.4405024885937533 Accuracy on training data: 47801 / 50000 Cost on evaluation data: 1.0344830258067927 Accuracy on evaluation data: 9499 / 10000 Epoch 12 training complete Cost on training data: 0.42016577221228857 Accuracy on training data: 47956 / 50000 Cost on evaluation data: 1.01032844850172 Accuracy on evaluation data: 9479 / 10000 Epoch 13 training complete Cost on training data: 0.4245495018669271 Accuracy on training data: 47991 / 50000 Cost on evaluation data: 1.025928470139144 Accuracy on evaluation data: 9523 / 10000 Epoch 14 training complete Cost on training data: 0.37420541639298843 Accuracy on training data: 48428 / 50000 Cost on evaluation data: 0.9717311023828072 Accuracy on evaluation data: 9600 / 10000 Epoch 15 training complete Cost on training data: 0.3727184218730436 Accuracy on training data: 48442 / 50000 Cost on evaluation data: 0.9684745026763021 Accuracy on evaluation data: 9582 / 10000 Epoch 16 training complete Cost on training data: 0.36119260065521486 Accuracy on training data: 48554 / 50000 Cost on evaluation data: 0.9550291952912006 Accuracy on evaluation data: 9620 / 10000 Epoch 17 training complete Cost on training data: 0.3913731761457112 Accuracy on training data: 48308 / 50000 Cost on evaluation data: 0.9904390273644688 Accuracy on evaluation data: 9567 / 10000 Epoch 18 training complete Cost on training data: 0.3985734385684887 Accuracy on training data: 48344 / 50000 Cost on evaluation data: 0.987286695088534 Accuracy on evaluation data: 9552 / 10000 Epoch 19 training complete Cost on training data: 0.35887388840256534 Accuracy on training data: 48571 / 50000 Cost on evaluation data: 0.9597223344502038 Accuracy on evaluation data: 9607 / 10000 Epoch 20 training complete Cost on training data: 0.3906438501336217 Accuracy on training data: 48351 / 50000 Cost on evaluation data: 0.9961442351509222 Accuracy on evaluation data: 9569 / 10000 Epoch 21 training complete Cost on training data: 0.372900408436176 Accuracy on training data: 48495 / 50000 Cost on evaluation data: 0.9673109260072522 Accuracy on evaluation data: 9608 / 10000 Epoch 22 training complete Cost on training data: 0.36846837975730923 Accuracy on training data: 48499 / 50000 Cost on evaluation data: 0.9639326651932834 Accuracy on evaluation data: 9605 / 10000 Epoch 23 training complete Cost on training data: 0.3560745890509801 Accuracy on training data: 48536 / 50000 Cost on evaluation data: 0.9566863207067859 Accuracy on evaluation data: 9613 / 10000 Epoch 24 training complete Cost on training data: 0.3819290164271956 Accuracy on training data: 48422 / 50000 Cost on evaluation data: 0.9732715096591932 Accuracy on evaluation data: 9596 / 10000 Epoch 25 training complete Cost on training data: 0.3641173885958884 Accuracy on training data: 48573 / 50000 Cost on evaluation data: 0.9610934702051449 Accuracy on evaluation data: 9616 / 10000 Epoch 26 training complete Cost on training data: 0.3706151345751465 Accuracy on training data: 48479 / 50000 Cost on evaluation data: 0.9671416611522785 Accuracy on evaluation data: 9613 / 10000 Epoch 27 training complete Cost on training data: 0.38072640598772167 Accuracy on training data: 48417 / 50000 Cost on evaluation data: 0.9801406029906612 Accuracy on evaluation data: 9590 / 10000 Epoch 28 training complete Cost on training data: 0.37538138281760225 Accuracy on training data: 48466 / 50000 Cost on evaluation data: 0.9707955441233471 Accuracy on evaluation data: 9611 / 10000 Epoch 29 training complete Cost on training data: 0.3720172066378544 Accuracy on training data: 48491 / 50000 Cost on evaluation data: 0.9704432700280308 Accuracy on evaluation data: 9613 / 10000
CPU times: user 5min 52s, sys: 3min 59s, total: 9min 51s Wall time: 6min 41s
import numpy as np
import matplotlib.pyplot as plt
from numpy.polynomial import Polynomial
# Data points
x = np.array([0.7, 1.3, 2, 2.7, 3, 3.7, 3.9, 4.1, 4.5, 4.9])
# y = np.array([1.8, 2.2, 4, 5, 6, 7, 7.5, 8, 9.2, 10])
y = np.array([p(i) for i in x])
# Polynomial function
def p(x):
return (2.20539187e-01 * x**9
- 5.49142821 * x**8
+ 5.87844045e+01 * x**7
- 3.53892824e+02 * x**6
+ 1.31549254e+03 * x**5
- 3.11809836e+03 * x**4
+ 4.69080366e+03 * x**3
- 4.29612493e+03 * x**2
+ 2.16228823e+03 * x
- 4.50983951e+02)
# Function to create a plot
def create_plot(ax, x, y, fit_func=None, title=''):
ax.scatter(x, y, color='black')
ax.set_xlim(0, 5)
ax.set_ylim(0, 11)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title(title)
if fit_func:
x_fit = np.linspace(0, 5, 1000)
y_fit = fit_func(x_fit)
ax.plot(x_fit, y_fit, color='blue')
# Create a figure with 3 subplots
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(5, 10))
# Plot 1: Simple scatter plot
create_plot(ax1, x, y, title='Simple Scatter Plot')
# Plot 2: 9th order polynomial fit
poly = Polynomial.fit(x, y, 9)
create_plot(ax2, x, y, fit_func=p, title='9th Order Polynomial Fit')
# Plot 3: Linear model y = 2x
linear_model = lambda x: 2 * x
create_plot(ax3, x, y, fit_func=linear_model, title='Linear Model: y = 2x')
plt.tight_layout()
plt.show()
Why does regularization help reduce overfitting?¶
We've seen empirically that regularization helps reduce overfitting. That's encouraging but, unfortunately, it's not obvious why regularization helps! A standard story people tell to explain what's going on is along the following lines: smaller weights are, in some sense, lower complexity, and so provide a simpler and more powerful explanation for the data, and should thus be preferred. That's a pretty terse story, though, and contains several elements that perhaps seem dubious or mystifying. Let's unpack the story and examine it critically. To do that, let's suppose we have a simple data set for which we wish to build a model:
# @title
fig, ax = plt.subplots()
create_plot(ax, x, y, title='Simple Scatter Plot')
plt.tight_layout()
plt.show()
Implicitly, we're studying some real-world phenomenon here, with $x$ and $y$ representing real-world data. Our goal is to build a model which lets us predict $y$ as a function of $x$. We could try using neural networks to build such a model, but I'm going to do something even simpler: I'll try to model $y$ as a polynomial in $x$. I'm doing this instead of using neural nets because using polynomials will make things particularly transparent. Once we've understood the polynomial case, we'll translate to neural networks. Now, there are ten points in the graph above, which means we can find a unique $9$th-order polynomial $y = a_0 x^9 + a_1 x^8 + \ldots + a_9$ which fits the data exactly. Here's the graph of that polynomial:
# @title
fig, ax = plt.subplots()
create_plot(ax, x, y, fit_func=p, title='9th Order Polynomial Fit')
plt.tight_layout()
plt.show()
That provides an exact fit. But we can also get a good fit using the linear model $y = 2x$:
# @title
fig, ax = plt.subplots()
create_plot(ax, x, y, fit_func=linear_model, title='Linear Model: y = 2x')
plt.tight_layout()
plt.show()
Which of these is the better model? Which is more likely to be true? And which model is more likely to generalize well to other examples of the same underlying real-world phenomenon?
These are difficult questions. In fact, we can't determine with certainty the answer to any of the above questions, without much more information about the underlying real-world phenomenon. But let's consider two possibilities:
- The $9$th order polynomial is, in fact, the model which truly describes the real-world phenomenon, and the model will therefore generalize perfectly;
- The correct model is $y = 2x$, but there's a little additional noise due to, say, measurement error, and that's why the model isn't an exact fit.
It's not a priori possible to say which of these two possibilities is correct. (Or, indeed, if some third possibility holds). Logically, either could be true. And it's not a trivial difference. It's true that on the data provided there's only a small difference between the two models. But suppose we want to predict the value of $y$ corresponding to some large value of $x$, much larger than any shown on the graph above. If we try to do that there will be a dramatic difference between the predictions of the two models, as the $9$th order polynomial model comes to be dominated by the $x^9$ term, while the linear model remains, well, linear.
One point of view is to say that in science we should go with the simpler explanation, unless compelled not to. When we find a simple model that seems to explain many data points we are tempted to shout "Eureka!" After all, it seems unlikely that a simple explanation should occur merely by coincidence. Rather, we suspect that the model must be expressing some underlying truth about the phenomenon. In the case at hand, the model $y = 2x+{\rm noise}$ seems much simpler than $y = a_0 x^9 + a_1 x^8 + \ldots$. It would be surprising if that simplicity had occurred by chance, and so we suspect that $y = 2x+{\rm noise}$ expresses some underlying truth. In this point of view, the 9th order model is really just learning the effects of local noise. And so while the 9th order model works perfectly for these particular data points, the model will fail to generalize to other data points, and the noisy linear model will have greater predictive power.
Let's see what this point of view means for neural networks. Suppose our network mostly has small weights, as will tend to happen in a regularized network. The smallness of the weights means that the behaviour of the network won't change too much if we change a few random inputs here and there. That makes it difficult for a regularized network to learn the effects of local noise in the data. Think of it as a way of making it so single pieces of evidence don't matter too much to the output of the network. Instead, a regularized network learns to respond to types of evidence which are seen often across the training set. By contrast, a network with large weights may change its behaviour quite a bit in response to small changes in the input. And so an unregularized network can use large weights to learn a complex model that carries a lot of information about the noise in the training data. In a nutshell, regularized networks are constrained to build relatively simple models based on patterns seen often in the training data, and are resistant to learning peculiarities of the noise in the training data. The hope is that this will force our networks to do real learning about the phenomenon at hand, and to generalize better from what they learn.
With that said, this idea of preferring simpler explanation should make you nervous. People sometimes refer to this idea as "Occam's Razor", and will zealously apply it as though it has the status of some general scientific principle. But, of course, it's not a general scientific principle. There is no a priori logical reason to prefer simple explanations over more complex explanations. Indeed, sometimes the more complex explanation turns out to be correct.
Let me describe two examples where more complex explanations have turned out to be correct. In the 1940s the physicist Marcel Schein announced the discovery of a new particle of nature. The company he worked for, General Electric, was ecstatic, and publicized the discovery widely. But the physicist Hans Bethe was skeptical. Bethe visited Schein, and looked at the plates showing the tracks of Schein's new particle. Schein showed Bethe plate after plate, but on each plate Bethe identified some problem that suggested the data should be discarded. Finally, Schein showed Bethe a plate that looked good. Bethe said it might just be a statistical fluke. Schein: "Yes, but the chance that this would be statistics, even according to your own formula, is one in five." Bethe: "But we have already looked at five plates." Finally, Schein said: "But on my plates, each one of the good plates, each one of the good pictures, you explain by a different theory, whereas I have one hypothesis that explains all the plates, that they are [the new particle]." Bethe replied: "The sole difference between your and my explanations is that yours is wrong and all of mine are right. Your single explanation is wrong, and all of my multiple explanations are right." Subsequent work confirmed that Nature agreed with Bethe, and Schein's particle is no more**[3]**.
As a second example, in 1859 the astronomer Urbain Le Verrier observed that the orbit of the planet Mercury doesn't have quite the shape that Newton's theory of gravitation says it should have. It was a tiny, tiny deviation from Newton's theory, and several of the explanations proferred at the time boiled down to saying that Newton's theory was more or less right, but needed a tiny alteration. In 1916, Einstein showed that the deviation could be explained very well using his general theory of relativity, a theory radically different to Newtonian gravitation, and based on much more complex mathematics. Despite that additional complexity, today it's accepted that Einstein's explanation is correct, and Newtonian gravity, even in its modified forms, is wrong. This is in part because we now know that Einstein's theory explains many other phenomena which Newton's theory has difficulty with. Furthermore, and even more impressively, Einstein's theory accurately predicts several phenomena which aren't predicted by Newtonian gravity at all. But these impressive qualities weren't entirely obvious in the early days. If one had judged merely on the grounds of simplicity, then some modified form of Newton's theory would arguably have been more attractive.
There are three morals to draw from these stories.
- $\text{1st}$, it can be quite a subtle business deciding which of two explanations is truly "simpler".
- $\text{2nd}$, even if we can make such a judgment, simplicity is a guide that must be used with great caution!
- $\text{3rd}$, the true test of a model is not simplicity, but rather how well it does in predicting new phenomena, in new regimes of behaviour.
With that said, and keeping the need for caution in mind, it's an empirical fact that regularized neural networks usually generalize better than unregularized networks. And so through the remainder of the book we will make frequent use of regularization. I've included the stories above merely to help convey why no-one has yet developed an entirely convincing theoretical explanation for why regularization helps networks generalize. Indeed, researchers continue to write papers where they try different approaches to regularization, compare them to see which works better, and attempt to understand why different approaches work better or worse. And so you can view regularization as something of a kludge. While it often helps, we don't have an entirely satisfactory systematic understanding of what's going on, merely incomplete heuristics and rules of thumb.
There's a deeper set of issues here, issues which go to the heart of science. It's the question of how we generalize. Regularization may give us a computational magic wand that helps our networks generalize better, but it doesn't give us a principled understanding of how generalization works, nor of what the best approach is**[4]**.
This is particularly galling because in everyday life, we humans generalize phenomenally well. Shown just a few images of an elephant a child will quickly learn to recognize other elephants. Of course, they may occasionally make mistakes, perhaps confusing a rhinoceros for an elephant, but in general this process works remarkably accurately. So we have a system - the human brain - with a huge number of free parameters. And after being shown just one or a few training images that system learns to generalize to other images. Our brains are, in some sense, regularizing amazingly well! How do we do it? At this point we don't know. I expect that in years to come we will develop more powerful techniques for regularization in artificial neural networks, techniques that will ultimately enable neural nets to generalize well even from small data sets.
In fact, our networks already generalize better than one might a priori expect. A network with 100 hidden neurons has nearly 80,000 parameters. We have only 50,000 images in our training data. It's like trying to fit an 80,000th degree polynomial to 50,000 data points. By all rights, our network should overfit terribly. And yet, as we saw earlier, such a network actually does a pretty good job generalizing. Why is that the case? It's not well understood. It has been conjectured**[5]** that "the dynamics of gradient descent learning in multilayer nets has a 'self-regularization' effect". This is exceptionally fortunate, but it's also somewhat disquieting that we don't understand why it's the case. In the meantime, we will adopt the pragmatic approach and use regularization whenever we can. Our neural networks will be the better for it.
Let me conclude this section by returning to a detail which I left
unexplained earlier: the fact that L2 regularization doesn't constrain
the biases. Of course, it would be easy to modify the regularization
procedure to regularize the biases. Empirically, doing this often
doesn't change the results very much, so to some extent it's merely a
convention whether to regularize the biases or not. However, it's worth
noting that having a large bias doesn't make a neuron sensitive to its
inputs in the same way as having large weights. And so we don't need to
worry about large biases enabling our network to learn the noise in our
training data. At the same time, allowing large biases gives our
networks more flexibility in behaviour - in particular, large biases
make it easier for neurons to saturate, which is sometimes desirable.
For these reasons we don't usually include bias terms when regularizing.
References:
3. The story is related by the physicist Richard Feynman in an
interview with the historian Charles Weiner.
4. These issues go back to the problem of induction, famously discussed by the Scottish philosopher David Hume in "An Enquiry Concerning Human Understanding" (1748). The problem of induction has been given a modern machine learning form in the no-free lunch theorem (link)
of David Wolpert and William Macready (1997).
5. In Gradient-Based Learning Applied to Document Recognition, by Yann LeCun, Léon Bottou, Yoshua Bengio, and Patrick Haffner (1998).
Other Regularization Techniques: L1 Reg., Dropout, Artificial Expansion of Training Data¶
There are many regularization techniques other than L2 regularization. In fact, so many techniques have been developed that I can't possibly summarize them all. In this section I briefly describe three other approaches to reducing overfitting:
- L1 regularization,
- dropout, &
- artificially increasing the training set size.
We won't go into nearly as much depth studying these techniques as we did earlier. Instead, the purpose is to get familiar with the main ideas, and to appreciate something of the diversity of regularization techniques available.
L1 regularization: In this approach we modify the unregularized cost function by adding the sum of the absolute values of the weights:
\begin{eqnarray} C = C_0 + \frac{\lambda}{n} \sum_w \|w\|. \tag{11} \end{eqnarray}
Intuitively, this is similar to L2 regularization, penalizing large weights, and tending to make the network prefer small weights. Of course, the L1 regularization term isn't the same as the L2 regularization term, and so we shouldn't expect to get exactly the same behaviour. Let's try to understand how the behaviour of a network trained using L1 regularization differs from a network trained using L2 regularization.
To do that, we'll look at the partial derivatives of the cost function. Differentiating Equation (11) we obtain:
\begin{eqnarray} \frac{\partial C}{\partial w} = \frac{\partial C_0}{\partial w} + \frac{\lambda}{n} {\rm sgn}(w), \tag{12} \end{eqnarray}
where ${\rm sgn}(w)$ is the sign of $w$, that is, $+1$ if $w$ is positive, and $-1$ if $w$ is negative. Using this expression, we can easily modify backpropagation to do stochastic gradient descent using L1 regularization. The resulting update rule for an L1 regularized network is
\begin{eqnarray} w \rightarrow w' = w-\frac{\eta \lambda}{n} \mbox{sgn}(w) - \eta \frac{\partial C_0}{\partial w}, \tag{13} \end{eqnarray}
where, as per usual, we can estimate $\partial C_0 / \partial w$ using a mini-batch average, if we wish. Compare that to the update rule for L2 regularization (c.f. Equation (9)),
\begin{eqnarray} w \rightarrow w' = w\left(1 - \frac{\eta \lambda}{n} \right) - \eta \frac{\partial C_0}{\partial w}. \tag{14} \end{eqnarray}
In both expressions the effect of regularization is to shrink the weights. This accords with our intuition that both kinds of regularization penalize large weights. But the way the weights shrink is different. In L1 regularization, the weights shrink by a constant amount toward $0$. In L2 regularization, the weights shrink by an amount which is proportional to $w$. And so when a particular weight has a large magnitude, $\|w\|$, L1 regularization shrinks the weight much less than L2 regularization does. By contrast, when $\|w\|$ is small, L1 regularization shrinks the weight much more than L2 regularization. The net result is that L1 regularization tends to concentrate the weight of the network in a relatively small number of high-importance connections, while the other weights are driven toward zero.
I've glossed over an issue in the above discussion, which is that the partial derivative $\partial C / \partial w$ isn't defined when $w = 0$. The reason is that the function $\|w\|$ has a sharp "corner" at $w = 0$, and so isn't differentiable at that point. That's okay, though. What we'll do is just apply the usual (unregularized) rule for stochastic gradient descent when $w = 0$. That should be okay - intuitively, the effect of regularization is to shrink weights, and obviously it can't shrink a weight which is already $0$. To put it more precisely, we'll use Equations (12) and (13) with the convention that $\mbox{sgn}(0) = 0$. That gives a nice, compact rule for doing stochastic gradient descent with L1 regularization.
Dropout: Dropout is a radically different technique for regularization. Unlike L1 and L2 regularization, dropout doesn't rely on modifying the cost function. Instead, in dropout we modify the network itself. Let me describe the basic mechanics of how dropout works, before getting into why it works, and what the results are.
Suppose we're trying to train a network (Fig. a). In particular, suppose we have a training input $x$ and corresponding desired output $y$. Ordinarily, we'd train by forward-propagating $x$ through the network, and then backpropagating to determine the contribution to the gradient. With dropout, this process is modified. We start by randomly (and temporarily) deleting half the hidden neurons in the network, while leaving the input and output neurons untouched. After doing this, we'll end up with a network along the following lines. Note that the dropout neurons, i.e., the neurons which have been temporarily deleted, are still ghosted in as seen in (Fig. b).

We forward-propagate the input $x$ through the modified network, and then backpropagate the result, also through the modified network. After doing this over a mini-batch of examples, we update the appropriate weights and biases. We then repeat the process, first restoring the dropout neurons, then choosing a new random subset of hidden neurons to delete, estimating the gradient for a different mini-batch, and updating the weights and biases in the network.
By repeating this process over and over, our network will learn a set of weights and biases. Of course, those weights and biases will have been learnt under conditions in which half the hidden neurons were dropped out. When we actually run the full network that means that twice as many hidden neurons will be active. To compensate for that, we halve the weights outgoing from the hidden neurons.
This dropout procedure may seem strange and ad hoc. Why would we expect it to help with regularization? To explain what's going on, I'd like you to briefly stop thinking about dropout, and instead imagine training neural networks in the standard way (no dropout). In particular, imagine we train several different neural networks, all using the same training data. Of course, the networks may not start out identical, and as a result after training they may sometimes give different results. When that happens we could use some kind of averaging or voting scheme to decide which output to accept. For instance, if we have trained five networks, and three of them are classifying a digit as a "3", then it probably really is a "3". The other two networks are probably just making a mistake. This kind of averaging scheme is often found to be a powerful (though expensive) way of reducing overfitting. The reason is that the different networks may overfit in different ways, and averaging may help eliminate that kind of overfitting.
What's this got to do with dropout? Heuristically, when we dropout different sets of neurons, it's rather like we're training different neural networks. And so the dropout procedure is like averaging the effects of a very large number of different networks. The different networks will overfit in different ways, and so, hopefully, the net effect of dropout will be to reduce overfitting.
A related heuristic explanation for dropout is given in one of the earliest papers to use the technique**[6]**:
"This technique reduces complex co-adaptations of neurons, since a neuron cannot rely on the presence of particular other neurons. It is, therefore, forced to learn more robust features that are useful in conjunction with many different random subsets of the other neurons."
In other words, if we think of our network as a model which is making predictions, then we can think of dropout as a way of making sure that the model is robust to the loss of any individual piece of evidence. In this, it's somewhat similar to L1 and L2 regularization, which tend to reduce weights, and thus make the network more robust to losing any individual connection in the network.
Of course, the true measure of dropout is that it has been very successful in improving the performance of neural networks. The original paper**[7]** introducing the technique applied it to many different tasks. For us, it's of particular interest that they applied dropout to MNIST digit classification, using a vanilla feedforward neural network along lines similar to those we've been considering. The paper noted that the best result anyone had achieved up to that point using such an architecture was $98.4$ percent classification accuracy on the test set. They improved that to $98.7$ percent accuracy using a combination of dropout and a modified form of L2 regularization. Similarly impressive results have been obtained for many other tasks, including problems in image and speech recognition, and natural language processing. Dropout has been especially useful in training large, deep networks, where the problem of overfitting is often acute.
Artificially expanding the training data: We saw earlier that our
MNIST classification accuracy dropped down to percentages in the mid-80s
when we used only 1,000 training images. It's not surprising that this
is the case, since less training data means our network will be exposed
to fewer variations in the way human beings write digits. Let's try
training our 30 hidden neuron network with a variety of different
training data set sizes, to see how performance varies. We train using a
mini-batch size of 10, a learning rate $\eta = 0.5$, a regularization
parameter $\lambda = 5.0$, and the cross-entropy cost function. We will
train for 30 epochs when the full training data set is used, and scale
up the number of epochs proportionally when smaller training sets are
used. To ensure the weight decay factor remains the same across training
sets, we will use a regularization parameter of $\lambda = 5.0$ when the
full training data set is used, and scale down $\lambda$ proportionally
when smaller training sets are used.
References:
6. ImageNet Classification with Deep Convolutional Neural Networks, by Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton (2012).
7. Improving neural networks by preventing co-adaptation of feature detectors by Geoffrey Hinton, Nitish Srivastava, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov (2012). Note that the paper discusses a number of subtleties that I have glossed over in this brief introduction.
# @title
"""more_data
~~~~~~~~~~~~
Plot graphs to illustrate the performance of MNIST when different size
training sets are used.
"""
# Standard library
import json
import random
import sys
# My library
sys.path.append('../src/')
import mnist_loader
# import network2
# Third-party libraries
import matplotlib.pyplot as plt
import numpy as np
from sklearn import svm
# The sizes to use for the different training sets
SIZES = [100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000]
def main():
run_networks()
run_svms()
make_plots()
def run_networks():
# Make results more easily reproducible
random.seed(12345678)
np.random.seed(12345678)
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
validation_data = list(validation_data)
test_data = list(test_data)
net = Network2mat([784, 30, 10], cost=CrossEntropyCost())
accuracies = []
for size in SIZES:
print("\n\nTraining network with data set size %s" % size)
net.large_weight_initializer()
num_epochs = int(1500000 / size)
net.SGD(training_data[:size], num_epochs, 10, 0.5, lmbda = size*0.0001)
accuracy = net.accuracy(validation_data) / 100.0
print("Accuracy was %s percent" % accuracy)
accuracies.append(accuracy)
f = open("more_data.json", "w")
json.dump(accuracies, f)
f.close()
def run_svms():
svm_training_data, svm_validation_data, svm_test_data \
= mnist_loader.load_data()
accuracies = []
for size in SIZES:
print("\n\nTraining SVM with data set size %s" % size)
clf = svm.SVC()
clf.fit(svm_training_data[0][:size], svm_training_data[1][:size])
predictions = [int(a) for a in clf.predict(svm_validation_data[0])]
accuracy = sum(int(a == y) for a, y in
zip(predictions, svm_validation_data[1])) / 100.0
print("Accuracy was %s percent" % accuracy)
accuracies.append(accuracy)
f = open("more_data_svm.json", "w")
json.dump(accuracies, f)
f.close()
def make_plots():
f = open("more_data.json", "r")
accuracies = json.load(f)
f.close()
f = open("more_data_svm.json", "r")
svm_accuracies = json.load(f)
f.close()
make_linear_plot(accuracies)
make_log_plot(accuracies)
make_combined_plot(accuracies, svm_accuracies)
def make_linear_plot(accuracies):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(SIZES, accuracies, color='#2A6EA6')
ax.plot(SIZES, accuracies, "o", color='#FFA933')
ax.set_xlim(0, 50000)
ax.set_ylim(60, 100)
ax.grid(True)
ax.set_xlabel('Training set size')
ax.set_title('Accuracy (%) on the validation data')
plt.show()
def make_log_plot(accuracies):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(SIZES, accuracies, color='#2A6EA6')
ax.plot(SIZES, accuracies, "o", color='#FFA933')
ax.set_xlim(100, 50000)
ax.set_ylim(60, 100)
ax.set_xscale('log')
ax.grid(True)
ax.set_xlabel('Training set size')
ax.set_title('Accuracy (%) on the validation data')
plt.show()
def make_combined_plot(accuracies, svm_accuracies):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(SIZES, accuracies, color='#2A6EA6')
ax.plot(SIZES, accuracies, "o", color='#2A6EA6',
label='Neural network accuracy (%)')
ax.plot(SIZES, svm_accuracies, color='#FFA933')
ax.plot(SIZES, svm_accuracies, "o", color='#FFA933',
label='SVM accuracy (%)')
ax.set_xlim(100, 50000)
ax.set_ylim(25, 100)
ax.set_xscale('log')
ax.grid(True)
ax.set_xlabel('Training set size')
plt.legend(loc="lower right")
plt.show()
if __name__ == "__main__":
main()
Streaming output truncated to the last 5000 lines.
Epoch 866 training complete
Epoch 867 training complete
Epoch 868 training complete
Epoch 869 training complete
Epoch 870 training complete
Epoch 871 training complete
Epoch 872 training complete
Epoch 873 training complete
Epoch 874 training complete
Epoch 875 training complete
Epoch 876 training complete
Epoch 877 training complete
Epoch 878 training complete
Epoch 879 training complete
Epoch 880 training complete
Epoch 881 training complete
Epoch 882 training complete
Epoch 883 training complete
Epoch 884 training complete
Epoch 885 training complete
Epoch 886 training complete
Epoch 887 training complete
Epoch 888 training complete
Epoch 889 training complete
Epoch 890 training complete
Epoch 891 training complete
Epoch 892 training complete
Epoch 893 training complete
Epoch 894 training complete
Epoch 895 training complete
Epoch 896 training complete
Epoch 897 training complete
Epoch 898 training complete
Epoch 899 training complete
Epoch 900 training complete
Epoch 901 training complete
Epoch 902 training complete
Epoch 903 training complete
Epoch 904 training complete
Epoch 905 training complete
Epoch 906 training complete
Epoch 907 training complete
Epoch 908 training complete
Epoch 909 training complete
Epoch 910 training complete
Epoch 911 training complete
Epoch 912 training complete
Epoch 913 training complete
Epoch 914 training complete
Epoch 915 training complete
Epoch 916 training complete
Epoch 917 training complete
Epoch 918 training complete
Epoch 919 training complete
Epoch 920 training complete
Epoch 921 training complete
Epoch 922 training complete
Epoch 923 training complete
Epoch 924 training complete
Epoch 925 training complete
Epoch 926 training complete
Epoch 927 training complete
Epoch 928 training complete
Epoch 929 training complete
Epoch 930 training complete
Epoch 931 training complete
Epoch 932 training complete
Epoch 933 training complete
Epoch 934 training complete
Epoch 935 training complete
Epoch 936 training complete
Epoch 937 training complete
Epoch 938 training complete
Epoch 939 training complete
Epoch 940 training complete
Epoch 941 training complete
Epoch 942 training complete
Epoch 943 training complete
Epoch 944 training complete
Epoch 945 training complete
Epoch 946 training complete
Epoch 947 training complete
Epoch 948 training complete
Epoch 949 training complete
Epoch 950 training complete
Epoch 951 training complete
Epoch 952 training complete
Epoch 953 training complete
Epoch 954 training complete
Epoch 955 training complete
Epoch 956 training complete
Epoch 957 training complete
Epoch 958 training complete
Epoch 959 training complete
Epoch 960 training complete
Epoch 961 training complete
Epoch 962 training complete
Epoch 963 training complete
Epoch 964 training complete
Epoch 965 training complete
Epoch 966 training complete
Epoch 967 training complete
Epoch 968 training complete
Epoch 969 training complete
Epoch 970 training complete
Epoch 971 training complete
Epoch 972 training complete
Epoch 973 training complete
Epoch 974 training complete
Epoch 975 training complete
Epoch 976 training complete
Epoch 977 training complete
Epoch 978 training complete
Epoch 979 training complete
Epoch 980 training complete
Epoch 981 training complete
Epoch 982 training complete
Epoch 983 training complete
Epoch 984 training complete
Epoch 985 training complete
Epoch 986 training complete
Epoch 987 training complete
Epoch 988 training complete
Epoch 989 training complete
Epoch 990 training complete
Epoch 991 training complete
Epoch 992 training complete
Epoch 993 training complete
Epoch 994 training complete
Epoch 995 training complete
Epoch 996 training complete
Epoch 997 training complete
Epoch 998 training complete
Epoch 999 training complete
Epoch 1000 training complete
Epoch 1001 training complete
Epoch 1002 training complete
Epoch 1003 training complete
Epoch 1004 training complete
Epoch 1005 training complete
Epoch 1006 training complete
Epoch 1007 training complete
Epoch 1008 training complete
Epoch 1009 training complete
Epoch 1010 training complete
Epoch 1011 training complete
Epoch 1012 training complete
Epoch 1013 training complete
Epoch 1014 training complete
Epoch 1015 training complete
Epoch 1016 training complete
Epoch 1017 training complete
Epoch 1018 training complete
Epoch 1019 training complete
Epoch 1020 training complete
Epoch 1021 training complete
Epoch 1022 training complete
Epoch 1023 training complete
Epoch 1024 training complete
Epoch 1025 training complete
Epoch 1026 training complete
Epoch 1027 training complete
Epoch 1028 training complete
Epoch 1029 training complete
Epoch 1030 training complete
Epoch 1031 training complete
Epoch 1032 training complete
Epoch 1033 training complete
Epoch 1034 training complete
Epoch 1035 training complete
Epoch 1036 training complete
Epoch 1037 training complete
Epoch 1038 training complete
Epoch 1039 training complete
Epoch 1040 training complete
Epoch 1041 training complete
Epoch 1042 training complete
Epoch 1043 training complete
Epoch 1044 training complete
Epoch 1045 training complete
Epoch 1046 training complete
Epoch 1047 training complete
Epoch 1048 training complete
Epoch 1049 training complete
Epoch 1050 training complete
Epoch 1051 training complete
Epoch 1052 training complete
Epoch 1053 training complete
Epoch 1054 training complete
Epoch 1055 training complete
Epoch 1056 training complete
Epoch 1057 training complete
Epoch 1058 training complete
Epoch 1059 training complete
Epoch 1060 training complete
Epoch 1061 training complete
Epoch 1062 training complete
Epoch 1063 training complete
Epoch 1064 training complete
Epoch 1065 training complete
Epoch 1066 training complete
Epoch 1067 training complete
Epoch 1068 training complete
Epoch 1069 training complete
Epoch 1070 training complete
Epoch 1071 training complete
Epoch 1072 training complete
Epoch 1073 training complete
Epoch 1074 training complete
Epoch 1075 training complete
Epoch 1076 training complete
Epoch 1077 training complete
Epoch 1078 training complete
Epoch 1079 training complete
Epoch 1080 training complete
Epoch 1081 training complete
Epoch 1082 training complete
Epoch 1083 training complete
Epoch 1084 training complete
Epoch 1085 training complete
Epoch 1086 training complete
Epoch 1087 training complete
Epoch 1088 training complete
Epoch 1089 training complete
Epoch 1090 training complete
Epoch 1091 training complete
Epoch 1092 training complete
Epoch 1093 training complete
Epoch 1094 training complete
Epoch 1095 training complete
Epoch 1096 training complete
Epoch 1097 training complete
Epoch 1098 training complete
Epoch 1099 training complete
Epoch 1100 training complete
Epoch 1101 training complete
Epoch 1102 training complete
Epoch 1103 training complete
Epoch 1104 training complete
Epoch 1105 training complete
Epoch 1106 training complete
Epoch 1107 training complete
Epoch 1108 training complete
Epoch 1109 training complete
Epoch 1110 training complete
Epoch 1111 training complete
Epoch 1112 training complete
Epoch 1113 training complete
Epoch 1114 training complete
Epoch 1115 training complete
Epoch 1116 training complete
Epoch 1117 training complete
Epoch 1118 training complete
Epoch 1119 training complete
Epoch 1120 training complete
Epoch 1121 training complete
Epoch 1122 training complete
Epoch 1123 training complete
Epoch 1124 training complete
Epoch 1125 training complete
Epoch 1126 training complete
Epoch 1127 training complete
Epoch 1128 training complete
Epoch 1129 training complete
Epoch 1130 training complete
Epoch 1131 training complete
Epoch 1132 training complete
Epoch 1133 training complete
Epoch 1134 training complete
Epoch 1135 training complete
Epoch 1136 training complete
Epoch 1137 training complete
Epoch 1138 training complete
Epoch 1139 training complete
Epoch 1140 training complete
Epoch 1141 training complete
Epoch 1142 training complete
Epoch 1143 training complete
Epoch 1144 training complete
Epoch 1145 training complete
Epoch 1146 training complete
Epoch 1147 training complete
Epoch 1148 training complete
Epoch 1149 training complete
Epoch 1150 training complete
Epoch 1151 training complete
Epoch 1152 training complete
Epoch 1153 training complete
Epoch 1154 training complete
Epoch 1155 training complete
Epoch 1156 training complete
Epoch 1157 training complete
Epoch 1158 training complete
Epoch 1159 training complete
Epoch 1160 training complete
Epoch 1161 training complete
Epoch 1162 training complete
Epoch 1163 training complete
Epoch 1164 training complete
Epoch 1165 training complete
Epoch 1166 training complete
Epoch 1167 training complete
Epoch 1168 training complete
Epoch 1169 training complete
Epoch 1170 training complete
Epoch 1171 training complete
Epoch 1172 training complete
Epoch 1173 training complete
Epoch 1174 training complete
Epoch 1175 training complete
Epoch 1176 training complete
Epoch 1177 training complete
Epoch 1178 training complete
Epoch 1179 training complete
Epoch 1180 training complete
Epoch 1181 training complete
Epoch 1182 training complete
Epoch 1183 training complete
Epoch 1184 training complete
Epoch 1185 training complete
Epoch 1186 training complete
Epoch 1187 training complete
Epoch 1188 training complete
Epoch 1189 training complete
Epoch 1190 training complete
Epoch 1191 training complete
Epoch 1192 training complete
Epoch 1193 training complete
Epoch 1194 training complete
Epoch 1195 training complete
Epoch 1196 training complete
Epoch 1197 training complete
Epoch 1198 training complete
Epoch 1199 training complete
Epoch 1200 training complete
Epoch 1201 training complete
Epoch 1202 training complete
Epoch 1203 training complete
Epoch 1204 training complete
Epoch 1205 training complete
Epoch 1206 training complete
Epoch 1207 training complete
Epoch 1208 training complete
Epoch 1209 training complete
Epoch 1210 training complete
Epoch 1211 training complete
Epoch 1212 training complete
Epoch 1213 training complete
Epoch 1214 training complete
Epoch 1215 training complete
Epoch 1216 training complete
Epoch 1217 training complete
Epoch 1218 training complete
Epoch 1219 training complete
Epoch 1220 training complete
Epoch 1221 training complete
Epoch 1222 training complete
Epoch 1223 training complete
Epoch 1224 training complete
Epoch 1225 training complete
Epoch 1226 training complete
Epoch 1227 training complete
Epoch 1228 training complete
Epoch 1229 training complete
Epoch 1230 training complete
Epoch 1231 training complete
Epoch 1232 training complete
Epoch 1233 training complete
Epoch 1234 training complete
Epoch 1235 training complete
Epoch 1236 training complete
Epoch 1237 training complete
Epoch 1238 training complete
Epoch 1239 training complete
Epoch 1240 training complete
Epoch 1241 training complete
Epoch 1242 training complete
Epoch 1243 training complete
Epoch 1244 training complete
Epoch 1245 training complete
Epoch 1246 training complete
Epoch 1247 training complete
Epoch 1248 training complete
Epoch 1249 training complete
Epoch 1250 training complete
Epoch 1251 training complete
Epoch 1252 training complete
Epoch 1253 training complete
Epoch 1254 training complete
Epoch 1255 training complete
Epoch 1256 training complete
Epoch 1257 training complete
Epoch 1258 training complete
Epoch 1259 training complete
Epoch 1260 training complete
Epoch 1261 training complete
Epoch 1262 training complete
Epoch 1263 training complete
Epoch 1264 training complete
Epoch 1265 training complete
Epoch 1266 training complete
Epoch 1267 training complete
Epoch 1268 training complete
Epoch 1269 training complete
Epoch 1270 training complete
Epoch 1271 training complete
Epoch 1272 training complete
Epoch 1273 training complete
Epoch 1274 training complete
Epoch 1275 training complete
Epoch 1276 training complete
Epoch 1277 training complete
Epoch 1278 training complete
Epoch 1279 training complete
Epoch 1280 training complete
Epoch 1281 training complete
Epoch 1282 training complete
Epoch 1283 training complete
Epoch 1284 training complete
Epoch 1285 training complete
Epoch 1286 training complete
Epoch 1287 training complete
Epoch 1288 training complete
Epoch 1289 training complete
Epoch 1290 training complete
Epoch 1291 training complete
Epoch 1292 training complete
Epoch 1293 training complete
Epoch 1294 training complete
Epoch 1295 training complete
Epoch 1296 training complete
Epoch 1297 training complete
Epoch 1298 training complete
Epoch 1299 training complete
Epoch 1300 training complete
Epoch 1301 training complete
Epoch 1302 training complete
Epoch 1303 training complete
Epoch 1304 training complete
Epoch 1305 training complete
Epoch 1306 training complete
Epoch 1307 training complete
Epoch 1308 training complete
Epoch 1309 training complete
Epoch 1310 training complete
Epoch 1311 training complete
Epoch 1312 training complete
Epoch 1313 training complete
Epoch 1314 training complete
Epoch 1315 training complete
Epoch 1316 training complete
Epoch 1317 training complete
Epoch 1318 training complete
Epoch 1319 training complete
Epoch 1320 training complete
Epoch 1321 training complete
Epoch 1322 training complete
Epoch 1323 training complete
Epoch 1324 training complete
Epoch 1325 training complete
Epoch 1326 training complete
Epoch 1327 training complete
Epoch 1328 training complete
Epoch 1329 training complete
Epoch 1330 training complete
Epoch 1331 training complete
Epoch 1332 training complete
Epoch 1333 training complete
Epoch 1334 training complete
Epoch 1335 training complete
Epoch 1336 training complete
Epoch 1337 training complete
Epoch 1338 training complete
Epoch 1339 training complete
Epoch 1340 training complete
Epoch 1341 training complete
Epoch 1342 training complete
Epoch 1343 training complete
Epoch 1344 training complete
Epoch 1345 training complete
Epoch 1346 training complete
Epoch 1347 training complete
Epoch 1348 training complete
Epoch 1349 training complete
Epoch 1350 training complete
Epoch 1351 training complete
Epoch 1352 training complete
Epoch 1353 training complete
Epoch 1354 training complete
Epoch 1355 training complete
Epoch 1356 training complete
Epoch 1357 training complete
Epoch 1358 training complete
Epoch 1359 training complete
Epoch 1360 training complete
Epoch 1361 training complete
Epoch 1362 training complete
Epoch 1363 training complete
Epoch 1364 training complete
Epoch 1365 training complete
Epoch 1366 training complete
Epoch 1367 training complete
Epoch 1368 training complete
Epoch 1369 training complete
Epoch 1370 training complete
Epoch 1371 training complete
Epoch 1372 training complete
Epoch 1373 training complete
Epoch 1374 training complete
Epoch 1375 training complete
Epoch 1376 training complete
Epoch 1377 training complete
Epoch 1378 training complete
Epoch 1379 training complete
Epoch 1380 training complete
Epoch 1381 training complete
Epoch 1382 training complete
Epoch 1383 training complete
Epoch 1384 training complete
Epoch 1385 training complete
Epoch 1386 training complete
Epoch 1387 training complete
Epoch 1388 training complete
Epoch 1389 training complete
Epoch 1390 training complete
Epoch 1391 training complete
Epoch 1392 training complete
Epoch 1393 training complete
Epoch 1394 training complete
Epoch 1395 training complete
Epoch 1396 training complete
Epoch 1397 training complete
Epoch 1398 training complete
Epoch 1399 training complete
Epoch 1400 training complete
Epoch 1401 training complete
Epoch 1402 training complete
Epoch 1403 training complete
Epoch 1404 training complete
Epoch 1405 training complete
Epoch 1406 training complete
Epoch 1407 training complete
Epoch 1408 training complete
Epoch 1409 training complete
Epoch 1410 training complete
Epoch 1411 training complete
Epoch 1412 training complete
Epoch 1413 training complete
Epoch 1414 training complete
Epoch 1415 training complete
Epoch 1416 training complete
Epoch 1417 training complete
Epoch 1418 training complete
Epoch 1419 training complete
Epoch 1420 training complete
Epoch 1421 training complete
Epoch 1422 training complete
Epoch 1423 training complete
Epoch 1424 training complete
Epoch 1425 training complete
Epoch 1426 training complete
Epoch 1427 training complete
Epoch 1428 training complete
Epoch 1429 training complete
Epoch 1430 training complete
Epoch 1431 training complete
Epoch 1432 training complete
Epoch 1433 training complete
Epoch 1434 training complete
Epoch 1435 training complete
Epoch 1436 training complete
Epoch 1437 training complete
Epoch 1438 training complete
Epoch 1439 training complete
Epoch 1440 training complete
Epoch 1441 training complete
Epoch 1442 training complete
Epoch 1443 training complete
Epoch 1444 training complete
Epoch 1445 training complete
Epoch 1446 training complete
Epoch 1447 training complete
Epoch 1448 training complete
Epoch 1449 training complete
Epoch 1450 training complete
Epoch 1451 training complete
Epoch 1452 training complete
Epoch 1453 training complete
Epoch 1454 training complete
Epoch 1455 training complete
Epoch 1456 training complete
Epoch 1457 training complete
Epoch 1458 training complete
Epoch 1459 training complete
Epoch 1460 training complete
Epoch 1461 training complete
Epoch 1462 training complete
Epoch 1463 training complete
Epoch 1464 training complete
Epoch 1465 training complete
Epoch 1466 training complete
Epoch 1467 training complete
Epoch 1468 training complete
Epoch 1469 training complete
Epoch 1470 training complete
Epoch 1471 training complete
Epoch 1472 training complete
Epoch 1473 training complete
Epoch 1474 training complete
Epoch 1475 training complete
Epoch 1476 training complete
Epoch 1477 training complete
Epoch 1478 training complete
Epoch 1479 training complete
Epoch 1480 training complete
Epoch 1481 training complete
Epoch 1482 training complete
Epoch 1483 training complete
Epoch 1484 training complete
Epoch 1485 training complete
Epoch 1486 training complete
Epoch 1487 training complete
Epoch 1488 training complete
Epoch 1489 training complete
Epoch 1490 training complete
Epoch 1491 training complete
Epoch 1492 training complete
Epoch 1493 training complete
Epoch 1494 training complete
Epoch 1495 training complete
Epoch 1496 training complete
Epoch 1497 training complete
Epoch 1498 training complete
Epoch 1499 training complete
Epoch 1500 training complete
Epoch 1501 training complete
Epoch 1502 training complete
Epoch 1503 training complete
Epoch 1504 training complete
Epoch 1505 training complete
Epoch 1506 training complete
Epoch 1507 training complete
Epoch 1508 training complete
Epoch 1509 training complete
Epoch 1510 training complete
Epoch 1511 training complete
Epoch 1512 training complete
Epoch 1513 training complete
Epoch 1514 training complete
Epoch 1515 training complete
Epoch 1516 training complete
Epoch 1517 training complete
Epoch 1518 training complete
Epoch 1519 training complete
Epoch 1520 training complete
Epoch 1521 training complete
Epoch 1522 training complete
Epoch 1523 training complete
Epoch 1524 training complete
Epoch 1525 training complete
Epoch 1526 training complete
Epoch 1527 training complete
Epoch 1528 training complete
Epoch 1529 training complete
Epoch 1530 training complete
Epoch 1531 training complete
Epoch 1532 training complete
Epoch 1533 training complete
Epoch 1534 training complete
Epoch 1535 training complete
Epoch 1536 training complete
Epoch 1537 training complete
Epoch 1538 training complete
Epoch 1539 training complete
Epoch 1540 training complete
Epoch 1541 training complete
Epoch 1542 training complete
Epoch 1543 training complete
Epoch 1544 training complete
Epoch 1545 training complete
Epoch 1546 training complete
Epoch 1547 training complete
Epoch 1548 training complete
Epoch 1549 training complete
Epoch 1550 training complete
Epoch 1551 training complete
Epoch 1552 training complete
Epoch 1553 training complete
Epoch 1554 training complete
Epoch 1555 training complete
Epoch 1556 training complete
Epoch 1557 training complete
Epoch 1558 training complete
Epoch 1559 training complete
Epoch 1560 training complete
Epoch 1561 training complete
Epoch 1562 training complete
Epoch 1563 training complete
Epoch 1564 training complete
Epoch 1565 training complete
Epoch 1566 training complete
Epoch 1567 training complete
Epoch 1568 training complete
Epoch 1569 training complete
Epoch 1570 training complete
Epoch 1571 training complete
Epoch 1572 training complete
Epoch 1573 training complete
Epoch 1574 training complete
Epoch 1575 training complete
Epoch 1576 training complete
Epoch 1577 training complete
Epoch 1578 training complete
Epoch 1579 training complete
Epoch 1580 training complete
Epoch 1581 training complete
Epoch 1582 training complete
Epoch 1583 training complete
Epoch 1584 training complete
Epoch 1585 training complete
Epoch 1586 training complete
Epoch 1587 training complete
Epoch 1588 training complete
Epoch 1589 training complete
Epoch 1590 training complete
Epoch 1591 training complete
Epoch 1592 training complete
Epoch 1593 training complete
Epoch 1594 training complete
Epoch 1595 training complete
Epoch 1596 training complete
Epoch 1597 training complete
Epoch 1598 training complete
Epoch 1599 training complete
Epoch 1600 training complete
Epoch 1601 training complete
Epoch 1602 training complete
Epoch 1603 training complete
Epoch 1604 training complete
Epoch 1605 training complete
Epoch 1606 training complete
Epoch 1607 training complete
Epoch 1608 training complete
Epoch 1609 training complete
Epoch 1610 training complete
Epoch 1611 training complete
Epoch 1612 training complete
Epoch 1613 training complete
Epoch 1614 training complete
Epoch 1615 training complete
Epoch 1616 training complete
Epoch 1617 training complete
Epoch 1618 training complete
Epoch 1619 training complete
Epoch 1620 training complete
Epoch 1621 training complete
Epoch 1622 training complete
Epoch 1623 training complete
Epoch 1624 training complete
Epoch 1625 training complete
Epoch 1626 training complete
Epoch 1627 training complete
Epoch 1628 training complete
Epoch 1629 training complete
Epoch 1630 training complete
Epoch 1631 training complete
Epoch 1632 training complete
Epoch 1633 training complete
Epoch 1634 training complete
Epoch 1635 training complete
Epoch 1636 training complete
Epoch 1637 training complete
Epoch 1638 training complete
Epoch 1639 training complete
Epoch 1640 training complete
Epoch 1641 training complete
Epoch 1642 training complete
Epoch 1643 training complete
Epoch 1644 training complete
Epoch 1645 training complete
Epoch 1646 training complete
Epoch 1647 training complete
Epoch 1648 training complete
Epoch 1649 training complete
Epoch 1650 training complete
Epoch 1651 training complete
Epoch 1652 training complete
Epoch 1653 training complete
Epoch 1654 training complete
Epoch 1655 training complete
Epoch 1656 training complete
Epoch 1657 training complete
Epoch 1658 training complete
Epoch 1659 training complete
Epoch 1660 training complete
Epoch 1661 training complete
Epoch 1662 training complete
Epoch 1663 training complete
Epoch 1664 training complete
Epoch 1665 training complete
Epoch 1666 training complete
Epoch 1667 training complete
Epoch 1668 training complete
Epoch 1669 training complete
Epoch 1670 training complete
Epoch 1671 training complete
Epoch 1672 training complete
Epoch 1673 training complete
Epoch 1674 training complete
Epoch 1675 training complete
Epoch 1676 training complete
Epoch 1677 training complete
Epoch 1678 training complete
Epoch 1679 training complete
Epoch 1680 training complete
Epoch 1681 training complete
Epoch 1682 training complete
Epoch 1683 training complete
Epoch 1684 training complete
Epoch 1685 training complete
Epoch 1686 training complete
Epoch 1687 training complete
Epoch 1688 training complete
Epoch 1689 training complete
Epoch 1690 training complete
Epoch 1691 training complete
Epoch 1692 training complete
Epoch 1693 training complete
Epoch 1694 training complete
Epoch 1695 training complete
Epoch 1696 training complete
Epoch 1697 training complete
Epoch 1698 training complete
Epoch 1699 training complete
Epoch 1700 training complete
Epoch 1701 training complete
Epoch 1702 training complete
Epoch 1703 training complete
Epoch 1704 training complete
Epoch 1705 training complete
Epoch 1706 training complete
Epoch 1707 training complete
Epoch 1708 training complete
Epoch 1709 training complete
Epoch 1710 training complete
Epoch 1711 training complete
Epoch 1712 training complete
Epoch 1713 training complete
Epoch 1714 training complete
Epoch 1715 training complete
Epoch 1716 training complete
Epoch 1717 training complete
Epoch 1718 training complete
Epoch 1719 training complete
Epoch 1720 training complete
Epoch 1721 training complete
Epoch 1722 training complete
Epoch 1723 training complete
Epoch 1724 training complete
Epoch 1725 training complete
Epoch 1726 training complete
Epoch 1727 training complete
Epoch 1728 training complete
Epoch 1729 training complete
Epoch 1730 training complete
Epoch 1731 training complete
Epoch 1732 training complete
Epoch 1733 training complete
Epoch 1734 training complete
Epoch 1735 training complete
Epoch 1736 training complete
Epoch 1737 training complete
Epoch 1738 training complete
Epoch 1739 training complete
Epoch 1740 training complete
Epoch 1741 training complete
Epoch 1742 training complete
Epoch 1743 training complete
Epoch 1744 training complete
Epoch 1745 training complete
Epoch 1746 training complete
Epoch 1747 training complete
Epoch 1748 training complete
Epoch 1749 training complete
Epoch 1750 training complete
Epoch 1751 training complete
Epoch 1752 training complete
Epoch 1753 training complete
Epoch 1754 training complete
Epoch 1755 training complete
Epoch 1756 training complete
Epoch 1757 training complete
Epoch 1758 training complete
Epoch 1759 training complete
Epoch 1760 training complete
Epoch 1761 training complete
Epoch 1762 training complete
Epoch 1763 training complete
Epoch 1764 training complete
Epoch 1765 training complete
Epoch 1766 training complete
Epoch 1767 training complete
Epoch 1768 training complete
Epoch 1769 training complete
Epoch 1770 training complete
Epoch 1771 training complete
Epoch 1772 training complete
Epoch 1773 training complete
Epoch 1774 training complete
Epoch 1775 training complete
Epoch 1776 training complete
Epoch 1777 training complete
Epoch 1778 training complete
Epoch 1779 training complete
Epoch 1780 training complete
Epoch 1781 training complete
Epoch 1782 training complete
Epoch 1783 training complete
Epoch 1784 training complete
Epoch 1785 training complete
Epoch 1786 training complete
Epoch 1787 training complete
Epoch 1788 training complete
Epoch 1789 training complete
Epoch 1790 training complete
Epoch 1791 training complete
Epoch 1792 training complete
Epoch 1793 training complete
Epoch 1794 training complete
Epoch 1795 training complete
Epoch 1796 training complete
Epoch 1797 training complete
Epoch 1798 training complete
Epoch 1799 training complete
Epoch 1800 training complete
Epoch 1801 training complete
Epoch 1802 training complete
Epoch 1803 training complete
Epoch 1804 training complete
Epoch 1805 training complete
Epoch 1806 training complete
Epoch 1807 training complete
Epoch 1808 training complete
Epoch 1809 training complete
Epoch 1810 training complete
Epoch 1811 training complete
Epoch 1812 training complete
Epoch 1813 training complete
Epoch 1814 training complete
Epoch 1815 training complete
Epoch 1816 training complete
Epoch 1817 training complete
Epoch 1818 training complete
Epoch 1819 training complete
Epoch 1820 training complete
Epoch 1821 training complete
Epoch 1822 training complete
Epoch 1823 training complete
Epoch 1824 training complete
Epoch 1825 training complete
Epoch 1826 training complete
Epoch 1827 training complete
Epoch 1828 training complete
Epoch 1829 training complete
Epoch 1830 training complete
Epoch 1831 training complete
Epoch 1832 training complete
Epoch 1833 training complete
Epoch 1834 training complete
Epoch 1835 training complete
Epoch 1836 training complete
Epoch 1837 training complete
Epoch 1838 training complete
Epoch 1839 training complete
Epoch 1840 training complete
Epoch 1841 training complete
Epoch 1842 training complete
Epoch 1843 training complete
Epoch 1844 training complete
Epoch 1845 training complete
Epoch 1846 training complete
Epoch 1847 training complete
Epoch 1848 training complete
Epoch 1849 training complete
Epoch 1850 training complete
Epoch 1851 training complete
Epoch 1852 training complete
Epoch 1853 training complete
Epoch 1854 training complete
Epoch 1855 training complete
Epoch 1856 training complete
Epoch 1857 training complete
Epoch 1858 training complete
Epoch 1859 training complete
Epoch 1860 training complete
Epoch 1861 training complete
Epoch 1862 training complete
Epoch 1863 training complete
Epoch 1864 training complete
Epoch 1865 training complete
Epoch 1866 training complete
Epoch 1867 training complete
Epoch 1868 training complete
Epoch 1869 training complete
Epoch 1870 training complete
Epoch 1871 training complete
Epoch 1872 training complete
Epoch 1873 training complete
Epoch 1874 training complete
Epoch 1875 training complete
Epoch 1876 training complete
Epoch 1877 training complete
Epoch 1878 training complete
Epoch 1879 training complete
Epoch 1880 training complete
Epoch 1881 training complete
Epoch 1882 training complete
Epoch 1883 training complete
Epoch 1884 training complete
Epoch 1885 training complete
Epoch 1886 training complete
Epoch 1887 training complete
Epoch 1888 training complete
Epoch 1889 training complete
Epoch 1890 training complete
Epoch 1891 training complete
Epoch 1892 training complete
Epoch 1893 training complete
Epoch 1894 training complete
Epoch 1895 training complete
Epoch 1896 training complete
Epoch 1897 training complete
Epoch 1898 training complete
Epoch 1899 training complete
Epoch 1900 training complete
Epoch 1901 training complete
Epoch 1902 training complete
Epoch 1903 training complete
Epoch 1904 training complete
Epoch 1905 training complete
Epoch 1906 training complete
Epoch 1907 training complete
Epoch 1908 training complete
Epoch 1909 training complete
Epoch 1910 training complete
Epoch 1911 training complete
Epoch 1912 training complete
Epoch 1913 training complete
Epoch 1914 training complete
Epoch 1915 training complete
Epoch 1916 training complete
Epoch 1917 training complete
Epoch 1918 training complete
Epoch 1919 training complete
Epoch 1920 training complete
Epoch 1921 training complete
Epoch 1922 training complete
Epoch 1923 training complete
Epoch 1924 training complete
Epoch 1925 training complete
Epoch 1926 training complete
Epoch 1927 training complete
Epoch 1928 training complete
Epoch 1929 training complete
Epoch 1930 training complete
Epoch 1931 training complete
Epoch 1932 training complete
Epoch 1933 training complete
Epoch 1934 training complete
Epoch 1935 training complete
Epoch 1936 training complete
Epoch 1937 training complete
Epoch 1938 training complete
Epoch 1939 training complete
Epoch 1940 training complete
Epoch 1941 training complete
Epoch 1942 training complete
Epoch 1943 training complete
Epoch 1944 training complete
Epoch 1945 training complete
Epoch 1946 training complete
Epoch 1947 training complete
Epoch 1948 training complete
Epoch 1949 training complete
Epoch 1950 training complete
Epoch 1951 training complete
Epoch 1952 training complete
Epoch 1953 training complete
Epoch 1954 training complete
Epoch 1955 training complete
Epoch 1956 training complete
Epoch 1957 training complete
Epoch 1958 training complete
Epoch 1959 training complete
Epoch 1960 training complete
Epoch 1961 training complete
Epoch 1962 training complete
Epoch 1963 training complete
Epoch 1964 training complete
Epoch 1965 training complete
Epoch 1966 training complete
Epoch 1967 training complete
Epoch 1968 training complete
Epoch 1969 training complete
Epoch 1970 training complete
Epoch 1971 training complete
Epoch 1972 training complete
Epoch 1973 training complete
Epoch 1974 training complete
Epoch 1975 training complete
Epoch 1976 training complete
Epoch 1977 training complete
Epoch 1978 training complete
Epoch 1979 training complete
Epoch 1980 training complete
Epoch 1981 training complete
Epoch 1982 training complete
Epoch 1983 training complete
Epoch 1984 training complete
Epoch 1985 training complete
Epoch 1986 training complete
Epoch 1987 training complete
Epoch 1988 training complete
Epoch 1989 training complete
Epoch 1990 training complete
Epoch 1991 training complete
Epoch 1992 training complete
Epoch 1993 training complete
Epoch 1994 training complete
Epoch 1995 training complete
Epoch 1996 training complete
Epoch 1997 training complete
Epoch 1998 training complete
Epoch 1999 training complete
Epoch 2000 training complete
Epoch 2001 training complete
Epoch 2002 training complete
Epoch 2003 training complete
Epoch 2004 training complete
Epoch 2005 training complete
Epoch 2006 training complete
Epoch 2007 training complete
Epoch 2008 training complete
Epoch 2009 training complete
Epoch 2010 training complete
Epoch 2011 training complete
Epoch 2012 training complete
Epoch 2013 training complete
Epoch 2014 training complete
Epoch 2015 training complete
Epoch 2016 training complete
Epoch 2017 training complete
Epoch 2018 training complete
Epoch 2019 training complete
Epoch 2020 training complete
Epoch 2021 training complete
Epoch 2022 training complete
Epoch 2023 training complete
Epoch 2024 training complete
Epoch 2025 training complete
Epoch 2026 training complete
Epoch 2027 training complete
Epoch 2028 training complete
Epoch 2029 training complete
Epoch 2030 training complete
Epoch 2031 training complete
Epoch 2032 training complete
Epoch 2033 training complete
Epoch 2034 training complete
Epoch 2035 training complete
Epoch 2036 training complete
Epoch 2037 training complete
Epoch 2038 training complete
Epoch 2039 training complete
Epoch 2040 training complete
Epoch 2041 training complete
Epoch 2042 training complete
Epoch 2043 training complete
Epoch 2044 training complete
Epoch 2045 training complete
Epoch 2046 training complete
Epoch 2047 training complete
Epoch 2048 training complete
Epoch 2049 training complete
Epoch 2050 training complete
Epoch 2051 training complete
Epoch 2052 training complete
Epoch 2053 training complete
Epoch 2054 training complete
Epoch 2055 training complete
Epoch 2056 training complete
Epoch 2057 training complete
Epoch 2058 training complete
Epoch 2059 training complete
Epoch 2060 training complete
Epoch 2061 training complete
Epoch 2062 training complete
Epoch 2063 training complete
Epoch 2064 training complete
Epoch 2065 training complete
Epoch 2066 training complete
Epoch 2067 training complete
Epoch 2068 training complete
Epoch 2069 training complete
Epoch 2070 training complete
Epoch 2071 training complete
Epoch 2072 training complete
Epoch 2073 training complete
Epoch 2074 training complete
Epoch 2075 training complete
Epoch 2076 training complete
Epoch 2077 training complete
Epoch 2078 training complete
Epoch 2079 training complete
Epoch 2080 training complete
Epoch 2081 training complete
Epoch 2082 training complete
Epoch 2083 training complete
Epoch 2084 training complete
Epoch 2085 training complete
Epoch 2086 training complete
Epoch 2087 training complete
Epoch 2088 training complete
Epoch 2089 training complete
Epoch 2090 training complete
Epoch 2091 training complete
Epoch 2092 training complete
Epoch 2093 training complete
Epoch 2094 training complete
Epoch 2095 training complete
Epoch 2096 training complete
Epoch 2097 training complete
Epoch 2098 training complete
Epoch 2099 training complete
Epoch 2100 training complete
Epoch 2101 training complete
Epoch 2102 training complete
Epoch 2103 training complete
Epoch 2104 training complete
Epoch 2105 training complete
Epoch 2106 training complete
Epoch 2107 training complete
Epoch 2108 training complete
Epoch 2109 training complete
Epoch 2110 training complete
Epoch 2111 training complete
Epoch 2112 training complete
Epoch 2113 training complete
Epoch 2114 training complete
Epoch 2115 training complete
Epoch 2116 training complete
Epoch 2117 training complete
Epoch 2118 training complete
Epoch 2119 training complete
Epoch 2120 training complete
Epoch 2121 training complete
Epoch 2122 training complete
Epoch 2123 training complete
Epoch 2124 training complete
Epoch 2125 training complete
Epoch 2126 training complete
Epoch 2127 training complete
Epoch 2128 training complete
Epoch 2129 training complete
Epoch 2130 training complete
Epoch 2131 training complete
Epoch 2132 training complete
Epoch 2133 training complete
Epoch 2134 training complete
Epoch 2135 training complete
Epoch 2136 training complete
Epoch 2137 training complete
Epoch 2138 training complete
Epoch 2139 training complete
Epoch 2140 training complete
Epoch 2141 training complete
Epoch 2142 training complete
Epoch 2143 training complete
Epoch 2144 training complete
Epoch 2145 training complete
Epoch 2146 training complete
Epoch 2147 training complete
Epoch 2148 training complete
Epoch 2149 training complete
Epoch 2150 training complete
Epoch 2151 training complete
Epoch 2152 training complete
Epoch 2153 training complete
Epoch 2154 training complete
Epoch 2155 training complete
Epoch 2156 training complete
Epoch 2157 training complete
Epoch 2158 training complete
Epoch 2159 training complete
Epoch 2160 training complete
Epoch 2161 training complete
Epoch 2162 training complete
Epoch 2163 training complete
Epoch 2164 training complete
Epoch 2165 training complete
Epoch 2166 training complete
Epoch 2167 training complete
Epoch 2168 training complete
Epoch 2169 training complete
Epoch 2170 training complete
Epoch 2171 training complete
Epoch 2172 training complete
Epoch 2173 training complete
Epoch 2174 training complete
Epoch 2175 training complete
Epoch 2176 training complete
Epoch 2177 training complete
Epoch 2178 training complete
Epoch 2179 training complete
Epoch 2180 training complete
Epoch 2181 training complete
Epoch 2182 training complete
Epoch 2183 training complete
Epoch 2184 training complete
Epoch 2185 training complete
Epoch 2186 training complete
Epoch 2187 training complete
Epoch 2188 training complete
Epoch 2189 training complete
Epoch 2190 training complete
Epoch 2191 training complete
Epoch 2192 training complete
Epoch 2193 training complete
Epoch 2194 training complete
Epoch 2195 training complete
Epoch 2196 training complete
Epoch 2197 training complete
Epoch 2198 training complete
Epoch 2199 training complete
Epoch 2200 training complete
Epoch 2201 training complete
Epoch 2202 training complete
Epoch 2203 training complete
Epoch 2204 training complete
Epoch 2205 training complete
Epoch 2206 training complete
Epoch 2207 training complete
Epoch 2208 training complete
Epoch 2209 training complete
Epoch 2210 training complete
Epoch 2211 training complete
Epoch 2212 training complete
Epoch 2213 training complete
Epoch 2214 training complete
Epoch 2215 training complete
Epoch 2216 training complete
Epoch 2217 training complete
Epoch 2218 training complete
Epoch 2219 training complete
Epoch 2220 training complete
Epoch 2221 training complete
Epoch 2222 training complete
Epoch 2223 training complete
Epoch 2224 training complete
Epoch 2225 training complete
Epoch 2226 training complete
Epoch 2227 training complete
Epoch 2228 training complete
Epoch 2229 training complete
Epoch 2230 training complete
Epoch 2231 training complete
Epoch 2232 training complete
Epoch 2233 training complete
Epoch 2234 training complete
Epoch 2235 training complete
Epoch 2236 training complete
Epoch 2237 training complete
Epoch 2238 training complete
Epoch 2239 training complete
Epoch 2240 training complete
Epoch 2241 training complete
Epoch 2242 training complete
Epoch 2243 training complete
Epoch 2244 training complete
Epoch 2245 training complete
Epoch 2246 training complete
Epoch 2247 training complete
Epoch 2248 training complete
Epoch 2249 training complete
Epoch 2250 training complete
Epoch 2251 training complete
Epoch 2252 training complete
Epoch 2253 training complete
Epoch 2254 training complete
Epoch 2255 training complete
Epoch 2256 training complete
Epoch 2257 training complete
Epoch 2258 training complete
Epoch 2259 training complete
Epoch 2260 training complete
Epoch 2261 training complete
Epoch 2262 training complete
Epoch 2263 training complete
Epoch 2264 training complete
Epoch 2265 training complete
Epoch 2266 training complete
Epoch 2267 training complete
Epoch 2268 training complete
Epoch 2269 training complete
Epoch 2270 training complete
Epoch 2271 training complete
Epoch 2272 training complete
Epoch 2273 training complete
Epoch 2274 training complete
Epoch 2275 training complete
Epoch 2276 training complete
Epoch 2277 training complete
Epoch 2278 training complete
Epoch 2279 training complete
Epoch 2280 training complete
Epoch 2281 training complete
Epoch 2282 training complete
Epoch 2283 training complete
Epoch 2284 training complete
Epoch 2285 training complete
Epoch 2286 training complete
Epoch 2287 training complete
Epoch 2288 training complete
Epoch 2289 training complete
Epoch 2290 training complete
Epoch 2291 training complete
Epoch 2292 training complete
Epoch 2293 training complete
Epoch 2294 training complete
Epoch 2295 training complete
Epoch 2296 training complete
Epoch 2297 training complete
Epoch 2298 training complete
Epoch 2299 training complete
Epoch 2300 training complete
Epoch 2301 training complete
Epoch 2302 training complete
Epoch 2303 training complete
Epoch 2304 training complete
Epoch 2305 training complete
Epoch 2306 training complete
Epoch 2307 training complete
Epoch 2308 training complete
Epoch 2309 training complete
Epoch 2310 training complete
Epoch 2311 training complete
Epoch 2312 training complete
Epoch 2313 training complete
Epoch 2314 training complete
Epoch 2315 training complete
Epoch 2316 training complete
Epoch 2317 training complete
Epoch 2318 training complete
Epoch 2319 training complete
Epoch 2320 training complete
Epoch 2321 training complete
Epoch 2322 training complete
Epoch 2323 training complete
Epoch 2324 training complete
Epoch 2325 training complete
Epoch 2326 training complete
Epoch 2327 training complete
Epoch 2328 training complete
Epoch 2329 training complete
Epoch 2330 training complete
Epoch 2331 training complete
Epoch 2332 training complete
Epoch 2333 training complete
Epoch 2334 training complete
Epoch 2335 training complete
Epoch 2336 training complete
Epoch 2337 training complete
Epoch 2338 training complete
Epoch 2339 training complete
Epoch 2340 training complete
Epoch 2341 training complete
Epoch 2342 training complete
Epoch 2343 training complete
Epoch 2344 training complete
Epoch 2345 training complete
Epoch 2346 training complete
Epoch 2347 training complete
Epoch 2348 training complete
Epoch 2349 training complete
Epoch 2350 training complete
Epoch 2351 training complete
Epoch 2352 training complete
Epoch 2353 training complete
Epoch 2354 training complete
Epoch 2355 training complete
Epoch 2356 training complete
Epoch 2357 training complete
Epoch 2358 training complete
Epoch 2359 training complete
Epoch 2360 training complete
Epoch 2361 training complete
Epoch 2362 training complete
Epoch 2363 training complete
Epoch 2364 training complete
Epoch 2365 training complete
Epoch 2366 training complete
Epoch 2367 training complete
Epoch 2368 training complete
Epoch 2369 training complete
Epoch 2370 training complete
Epoch 2371 training complete
Epoch 2372 training complete
Epoch 2373 training complete
Epoch 2374 training complete
Epoch 2375 training complete
Epoch 2376 training complete
Epoch 2377 training complete
Epoch 2378 training complete
Epoch 2379 training complete
Epoch 2380 training complete
Epoch 2381 training complete
Epoch 2382 training complete
Epoch 2383 training complete
Epoch 2384 training complete
Epoch 2385 training complete
Epoch 2386 training complete
Epoch 2387 training complete
Epoch 2388 training complete
Epoch 2389 training complete
Epoch 2390 training complete
Epoch 2391 training complete
Epoch 2392 training complete
Epoch 2393 training complete
Epoch 2394 training complete
Epoch 2395 training complete
Epoch 2396 training complete
Epoch 2397 training complete
Epoch 2398 training complete
Epoch 2399 training complete
Epoch 2400 training complete
Epoch 2401 training complete
Epoch 2402 training complete
Epoch 2403 training complete
Epoch 2404 training complete
Epoch 2405 training complete
Epoch 2406 training complete
Epoch 2407 training complete
Epoch 2408 training complete
Epoch 2409 training complete
Epoch 2410 training complete
Epoch 2411 training complete
Epoch 2412 training complete
Epoch 2413 training complete
Epoch 2414 training complete
Epoch 2415 training complete
Epoch 2416 training complete
Epoch 2417 training complete
Epoch 2418 training complete
Epoch 2419 training complete
Epoch 2420 training complete
Epoch 2421 training complete
Epoch 2422 training complete
Epoch 2423 training complete
Epoch 2424 training complete
Epoch 2425 training complete
Epoch 2426 training complete
Epoch 2427 training complete
Epoch 2428 training complete
Epoch 2429 training complete
Epoch 2430 training complete
Epoch 2431 training complete
Epoch 2432 training complete
Epoch 2433 training complete
Epoch 2434 training complete
Epoch 2435 training complete
Epoch 2436 training complete
Epoch 2437 training complete
Epoch 2438 training complete
Epoch 2439 training complete
Epoch 2440 training complete
Epoch 2441 training complete
Epoch 2442 training complete
Epoch 2443 training complete
Epoch 2444 training complete
Epoch 2445 training complete
Epoch 2446 training complete
Epoch 2447 training complete
Epoch 2448 training complete
Epoch 2449 training complete
Epoch 2450 training complete
Epoch 2451 training complete
Epoch 2452 training complete
Epoch 2453 training complete
Epoch 2454 training complete
Epoch 2455 training complete
Epoch 2456 training complete
Epoch 2457 training complete
Epoch 2458 training complete
Epoch 2459 training complete
Epoch 2460 training complete
Epoch 2461 training complete
Epoch 2462 training complete
Epoch 2463 training complete
Epoch 2464 training complete
Epoch 2465 training complete
Epoch 2466 training complete
Epoch 2467 training complete
Epoch 2468 training complete
Epoch 2469 training complete
Epoch 2470 training complete
Epoch 2471 training complete
Epoch 2472 training complete
Epoch 2473 training complete
Epoch 2474 training complete
Epoch 2475 training complete
Epoch 2476 training complete
Epoch 2477 training complete
Epoch 2478 training complete
Epoch 2479 training complete
Epoch 2480 training complete
Epoch 2481 training complete
Epoch 2482 training complete
Epoch 2483 training complete
Epoch 2484 training complete
Epoch 2485 training complete
Epoch 2486 training complete
Epoch 2487 training complete
Epoch 2488 training complete
Epoch 2489 training complete
Epoch 2490 training complete
Epoch 2491 training complete
Epoch 2492 training complete
Epoch 2493 training complete
Epoch 2494 training complete
Epoch 2495 training complete
Epoch 2496 training complete
Epoch 2497 training complete
Epoch 2498 training complete
Epoch 2499 training complete
Epoch 2500 training complete
Epoch 2501 training complete
Epoch 2502 training complete
Epoch 2503 training complete
Epoch 2504 training complete
Epoch 2505 training complete
Epoch 2506 training complete
Epoch 2507 training complete
Epoch 2508 training complete
Epoch 2509 training complete
Epoch 2510 training complete
Epoch 2511 training complete
Epoch 2512 training complete
Epoch 2513 training complete
Epoch 2514 training complete
Epoch 2515 training complete
Epoch 2516 training complete
Epoch 2517 training complete
Epoch 2518 training complete
Epoch 2519 training complete
Epoch 2520 training complete
Epoch 2521 training complete
Epoch 2522 training complete
Epoch 2523 training complete
Epoch 2524 training complete
Epoch 2525 training complete
Epoch 2526 training complete
Epoch 2527 training complete
Epoch 2528 training complete
Epoch 2529 training complete
Epoch 2530 training complete
Epoch 2531 training complete
Epoch 2532 training complete
Epoch 2533 training complete
Epoch 2534 training complete
Epoch 2535 training complete
Epoch 2536 training complete
Epoch 2537 training complete
Epoch 2538 training complete
Epoch 2539 training complete
Epoch 2540 training complete
Epoch 2541 training complete
Epoch 2542 training complete
Epoch 2543 training complete
Epoch 2544 training complete
Epoch 2545 training complete
Epoch 2546 training complete
Epoch 2547 training complete
Epoch 2548 training complete
Epoch 2549 training complete
Epoch 2550 training complete
Epoch 2551 training complete
Epoch 2552 training complete
Epoch 2553 training complete
Epoch 2554 training complete
Epoch 2555 training complete
Epoch 2556 training complete
Epoch 2557 training complete
Epoch 2558 training complete
Epoch 2559 training complete
Epoch 2560 training complete
Epoch 2561 training complete
Epoch 2562 training complete
Epoch 2563 training complete
Epoch 2564 training complete
Epoch 2565 training complete
Epoch 2566 training complete
Epoch 2567 training complete
Epoch 2568 training complete
Epoch 2569 training complete
Epoch 2570 training complete
Epoch 2571 training complete
Epoch 2572 training complete
Epoch 2573 training complete
Epoch 2574 training complete
Epoch 2575 training complete
Epoch 2576 training complete
Epoch 2577 training complete
Epoch 2578 training complete
Epoch 2579 training complete
Epoch 2580 training complete
Epoch 2581 training complete
Epoch 2582 training complete
Epoch 2583 training complete
Epoch 2584 training complete
Epoch 2585 training complete
Epoch 2586 training complete
Epoch 2587 training complete
Epoch 2588 training complete
Epoch 2589 training complete
Epoch 2590 training complete
Epoch 2591 training complete
Epoch 2592 training complete
Epoch 2593 training complete
Epoch 2594 training complete
Epoch 2595 training complete
Epoch 2596 training complete
Epoch 2597 training complete
Epoch 2598 training complete
Epoch 2599 training complete
Epoch 2600 training complete
Epoch 2601 training complete
Epoch 2602 training complete
Epoch 2603 training complete
Epoch 2604 training complete
Epoch 2605 training complete
Epoch 2606 training complete
Epoch 2607 training complete
Epoch 2608 training complete
Epoch 2609 training complete
Epoch 2610 training complete
Epoch 2611 training complete
Epoch 2612 training complete
Epoch 2613 training complete
Epoch 2614 training complete
Epoch 2615 training complete
Epoch 2616 training complete
Epoch 2617 training complete
Epoch 2618 training complete
Epoch 2619 training complete
Epoch 2620 training complete
Epoch 2621 training complete
Epoch 2622 training complete
Epoch 2623 training complete
Epoch 2624 training complete
Epoch 2625 training complete
Epoch 2626 training complete
Epoch 2627 training complete
Epoch 2628 training complete
Epoch 2629 training complete
Epoch 2630 training complete
Epoch 2631 training complete
Epoch 2632 training complete
Epoch 2633 training complete
Epoch 2634 training complete
Epoch 2635 training complete
Epoch 2636 training complete
Epoch 2637 training complete
Epoch 2638 training complete
Epoch 2639 training complete
Epoch 2640 training complete
Epoch 2641 training complete
Epoch 2642 training complete
Epoch 2643 training complete
Epoch 2644 training complete
Epoch 2645 training complete
Epoch 2646 training complete
Epoch 2647 training complete
Epoch 2648 training complete
Epoch 2649 training complete
Epoch 2650 training complete
Epoch 2651 training complete
Epoch 2652 training complete
Epoch 2653 training complete
Epoch 2654 training complete
Epoch 2655 training complete
Epoch 2656 training complete
Epoch 2657 training complete
Epoch 2658 training complete
Epoch 2659 training complete
Epoch 2660 training complete
Epoch 2661 training complete
Epoch 2662 training complete
Epoch 2663 training complete
Epoch 2664 training complete
Epoch 2665 training complete
Epoch 2666 training complete
Epoch 2667 training complete
Epoch 2668 training complete
Epoch 2669 training complete
Epoch 2670 training complete
Epoch 2671 training complete
Epoch 2672 training complete
Epoch 2673 training complete
Epoch 2674 training complete
Epoch 2675 training complete
Epoch 2676 training complete
Epoch 2677 training complete
Epoch 2678 training complete
Epoch 2679 training complete
Epoch 2680 training complete
Epoch 2681 training complete
Epoch 2682 training complete
Epoch 2683 training complete
Epoch 2684 training complete
Epoch 2685 training complete
Epoch 2686 training complete
Epoch 2687 training complete
Epoch 2688 training complete
Epoch 2689 training complete
Epoch 2690 training complete
Epoch 2691 training complete
Epoch 2692 training complete
Epoch 2693 training complete
Epoch 2694 training complete
Epoch 2695 training complete
Epoch 2696 training complete
Epoch 2697 training complete
Epoch 2698 training complete
Epoch 2699 training complete
Epoch 2700 training complete
Epoch 2701 training complete
Epoch 2702 training complete
Epoch 2703 training complete
Epoch 2704 training complete
Epoch 2705 training complete
Epoch 2706 training complete
Epoch 2707 training complete
Epoch 2708 training complete
Epoch 2709 training complete
Epoch 2710 training complete
Epoch 2711 training complete
Epoch 2712 training complete
Epoch 2713 training complete
Epoch 2714 training complete
Epoch 2715 training complete
Epoch 2716 training complete
Epoch 2717 training complete
Epoch 2718 training complete
Epoch 2719 training complete
Epoch 2720 training complete
Epoch 2721 training complete
Epoch 2722 training complete
Epoch 2723 training complete
Epoch 2724 training complete
Epoch 2725 training complete
Epoch 2726 training complete
Epoch 2727 training complete
Epoch 2728 training complete
Epoch 2729 training complete
Epoch 2730 training complete
Epoch 2731 training complete
Epoch 2732 training complete
Epoch 2733 training complete
Epoch 2734 training complete
Epoch 2735 training complete
Epoch 2736 training complete
Epoch 2737 training complete
Epoch 2738 training complete
Epoch 2739 training complete
Epoch 2740 training complete
Epoch 2741 training complete
Epoch 2742 training complete
Epoch 2743 training complete
Epoch 2744 training complete
Epoch 2745 training complete
Epoch 2746 training complete
Epoch 2747 training complete
Epoch 2748 training complete
Epoch 2749 training complete
Epoch 2750 training complete
Epoch 2751 training complete
Epoch 2752 training complete
Epoch 2753 training complete
Epoch 2754 training complete
Epoch 2755 training complete
Epoch 2756 training complete
Epoch 2757 training complete
Epoch 2758 training complete
Epoch 2759 training complete
Epoch 2760 training complete
Epoch 2761 training complete
Epoch 2762 training complete
Epoch 2763 training complete
Epoch 2764 training complete
Epoch 2765 training complete
Epoch 2766 training complete
Epoch 2767 training complete
Epoch 2768 training complete
Epoch 2769 training complete
Epoch 2770 training complete
Epoch 2771 training complete
Epoch 2772 training complete
Epoch 2773 training complete
Epoch 2774 training complete
Epoch 2775 training complete
Epoch 2776 training complete
Epoch 2777 training complete
Epoch 2778 training complete
Epoch 2779 training complete
Epoch 2780 training complete
Epoch 2781 training complete
Epoch 2782 training complete
Epoch 2783 training complete
Epoch 2784 training complete
Epoch 2785 training complete
Epoch 2786 training complete
Epoch 2787 training complete
Epoch 2788 training complete
Epoch 2789 training complete
Epoch 2790 training complete
Epoch 2791 training complete
Epoch 2792 training complete
Epoch 2793 training complete
Epoch 2794 training complete
Epoch 2795 training complete
Epoch 2796 training complete
Epoch 2797 training complete
Epoch 2798 training complete
Epoch 2799 training complete
Epoch 2800 training complete
Epoch 2801 training complete
Epoch 2802 training complete
Epoch 2803 training complete
Epoch 2804 training complete
Epoch 2805 training complete
Epoch 2806 training complete
Epoch 2807 training complete
Epoch 2808 training complete
Epoch 2809 training complete
Epoch 2810 training complete
Epoch 2811 training complete
Epoch 2812 training complete
Epoch 2813 training complete
Epoch 2814 training complete
Epoch 2815 training complete
Epoch 2816 training complete
Epoch 2817 training complete
Epoch 2818 training complete
Epoch 2819 training complete
Epoch 2820 training complete
Epoch 2821 training complete
Epoch 2822 training complete
Epoch 2823 training complete
Epoch 2824 training complete
Epoch 2825 training complete
Epoch 2826 training complete
Epoch 2827 training complete
Epoch 2828 training complete
Epoch 2829 training complete
Epoch 2830 training complete
Epoch 2831 training complete
Epoch 2832 training complete
Epoch 2833 training complete
Epoch 2834 training complete
Epoch 2835 training complete
Epoch 2836 training complete
Epoch 2837 training complete
Epoch 2838 training complete
Epoch 2839 training complete
Epoch 2840 training complete
Epoch 2841 training complete
Epoch 2842 training complete
Epoch 2843 training complete
Epoch 2844 training complete
Epoch 2845 training complete
Epoch 2846 training complete
Epoch 2847 training complete
Epoch 2848 training complete
Epoch 2849 training complete
Epoch 2850 training complete
Epoch 2851 training complete
Epoch 2852 training complete
Epoch 2853 training complete
Epoch 2854 training complete
Epoch 2855 training complete
Epoch 2856 training complete
Epoch 2857 training complete
Epoch 2858 training complete
Epoch 2859 training complete
Epoch 2860 training complete
Epoch 2861 training complete
Epoch 2862 training complete
Epoch 2863 training complete
Epoch 2864 training complete
Epoch 2865 training complete
Epoch 2866 training complete
Epoch 2867 training complete
Epoch 2868 training complete
Epoch 2869 training complete
Epoch 2870 training complete
Epoch 2871 training complete
Epoch 2872 training complete
Epoch 2873 training complete
Epoch 2874 training complete
Epoch 2875 training complete
Epoch 2876 training complete
Epoch 2877 training complete
Epoch 2878 training complete
Epoch 2879 training complete
Epoch 2880 training complete
Epoch 2881 training complete
Epoch 2882 training complete
Epoch 2883 training complete
Epoch 2884 training complete
Epoch 2885 training complete
Epoch 2886 training complete
Epoch 2887 training complete
Epoch 2888 training complete
Epoch 2889 training complete
Epoch 2890 training complete
Epoch 2891 training complete
Epoch 2892 training complete
Epoch 2893 training complete
Epoch 2894 training complete
Epoch 2895 training complete
Epoch 2896 training complete
Epoch 2897 training complete
Epoch 2898 training complete
Epoch 2899 training complete
Epoch 2900 training complete
Epoch 2901 training complete
Epoch 2902 training complete
Epoch 2903 training complete
Epoch 2904 training complete
Epoch 2905 training complete
Epoch 2906 training complete
Epoch 2907 training complete
Epoch 2908 training complete
Epoch 2909 training complete
Epoch 2910 training complete
Epoch 2911 training complete
Epoch 2912 training complete
Epoch 2913 training complete
Epoch 2914 training complete
Epoch 2915 training complete
Epoch 2916 training complete
Epoch 2917 training complete
Epoch 2918 training complete
Epoch 2919 training complete
Epoch 2920 training complete
Epoch 2921 training complete
Epoch 2922 training complete
Epoch 2923 training complete
Epoch 2924 training complete
Epoch 2925 training complete
Epoch 2926 training complete
Epoch 2927 training complete
Epoch 2928 training complete
Epoch 2929 training complete
Epoch 2930 training complete
Epoch 2931 training complete
Epoch 2932 training complete
Epoch 2933 training complete
Epoch 2934 training complete
Epoch 2935 training complete
Epoch 2936 training complete
Epoch 2937 training complete
Epoch 2938 training complete
Epoch 2939 training complete
Epoch 2940 training complete
Epoch 2941 training complete
Epoch 2942 training complete
Epoch 2943 training complete
Epoch 2944 training complete
Epoch 2945 training complete
Epoch 2946 training complete
Epoch 2947 training complete
Epoch 2948 training complete
Epoch 2949 training complete
Epoch 2950 training complete
Epoch 2951 training complete
Epoch 2952 training complete
Epoch 2953 training complete
Epoch 2954 training complete
Epoch 2955 training complete
Epoch 2956 training complete
Epoch 2957 training complete
Epoch 2958 training complete
Epoch 2959 training complete
Epoch 2960 training complete
Epoch 2961 training complete
Epoch 2962 training complete
Epoch 2963 training complete
Epoch 2964 training complete
Epoch 2965 training complete
Epoch 2966 training complete
Epoch 2967 training complete
Epoch 2968 training complete
Epoch 2969 training complete
Epoch 2970 training complete
Epoch 2971 training complete
Epoch 2972 training complete
Epoch 2973 training complete
Epoch 2974 training complete
Epoch 2975 training complete
Epoch 2976 training complete
Epoch 2977 training complete
Epoch 2978 training complete
Epoch 2979 training complete
Epoch 2980 training complete
Epoch 2981 training complete
Epoch 2982 training complete
Epoch 2983 training complete
Epoch 2984 training complete
Epoch 2985 training complete
Epoch 2986 training complete
Epoch 2987 training complete
Epoch 2988 training complete
Epoch 2989 training complete
Epoch 2990 training complete
Epoch 2991 training complete
Epoch 2992 training complete
Epoch 2993 training complete
Epoch 2994 training complete
Epoch 2995 training complete
Epoch 2996 training complete
Epoch 2997 training complete
Epoch 2998 training complete
Epoch 2999 training complete
Accuracy was 85.16 percent
Training network with data set size 1000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Epoch 30 training complete
Epoch 31 training complete
Epoch 32 training complete
Epoch 33 training complete
Epoch 34 training complete
Epoch 35 training complete
Epoch 36 training complete
Epoch 37 training complete
Epoch 38 training complete
Epoch 39 training complete
Epoch 40 training complete
Epoch 41 training complete
Epoch 42 training complete
Epoch 43 training complete
Epoch 44 training complete
Epoch 45 training complete
Epoch 46 training complete
Epoch 47 training complete
Epoch 48 training complete
Epoch 49 training complete
Epoch 50 training complete
Epoch 51 training complete
Epoch 52 training complete
Epoch 53 training complete
Epoch 54 training complete
Epoch 55 training complete
Epoch 56 training complete
Epoch 57 training complete
Epoch 58 training complete
Epoch 59 training complete
Epoch 60 training complete
Epoch 61 training complete
Epoch 62 training complete
Epoch 63 training complete
Epoch 64 training complete
Epoch 65 training complete
Epoch 66 training complete
Epoch 67 training complete
Epoch 68 training complete
Epoch 69 training complete
Epoch 70 training complete
Epoch 71 training complete
Epoch 72 training complete
Epoch 73 training complete
Epoch 74 training complete
Epoch 75 training complete
Epoch 76 training complete
Epoch 77 training complete
Epoch 78 training complete
Epoch 79 training complete
Epoch 80 training complete
Epoch 81 training complete
Epoch 82 training complete
Epoch 83 training complete
Epoch 84 training complete
Epoch 85 training complete
Epoch 86 training complete
Epoch 87 training complete
Epoch 88 training complete
Epoch 89 training complete
Epoch 90 training complete
Epoch 91 training complete
Epoch 92 training complete
Epoch 93 training complete
Epoch 94 training complete
Epoch 95 training complete
Epoch 96 training complete
Epoch 97 training complete
Epoch 98 training complete
Epoch 99 training complete
Epoch 100 training complete
Epoch 101 training complete
Epoch 102 training complete
Epoch 103 training complete
Epoch 104 training complete
Epoch 105 training complete
Epoch 106 training complete
Epoch 107 training complete
Epoch 108 training complete
Epoch 109 training complete
Epoch 110 training complete
Epoch 111 training complete
Epoch 112 training complete
Epoch 113 training complete
Epoch 114 training complete
Epoch 115 training complete
Epoch 116 training complete
Epoch 117 training complete
Epoch 118 training complete
Epoch 119 training complete
Epoch 120 training complete
Epoch 121 training complete
Epoch 122 training complete
Epoch 123 training complete
Epoch 124 training complete
Epoch 125 training complete
Epoch 126 training complete
Epoch 127 training complete
Epoch 128 training complete
Epoch 129 training complete
Epoch 130 training complete
Epoch 131 training complete
Epoch 132 training complete
Epoch 133 training complete
Epoch 134 training complete
Epoch 135 training complete
Epoch 136 training complete
Epoch 137 training complete
Epoch 138 training complete
Epoch 139 training complete
Epoch 140 training complete
Epoch 141 training complete
Epoch 142 training complete
Epoch 143 training complete
Epoch 144 training complete
Epoch 145 training complete
Epoch 146 training complete
Epoch 147 training complete
Epoch 148 training complete
Epoch 149 training complete
Epoch 150 training complete
Epoch 151 training complete
Epoch 152 training complete
Epoch 153 training complete
Epoch 154 training complete
Epoch 155 training complete
Epoch 156 training complete
Epoch 157 training complete
Epoch 158 training complete
Epoch 159 training complete
Epoch 160 training complete
Epoch 161 training complete
Epoch 162 training complete
Epoch 163 training complete
Epoch 164 training complete
Epoch 165 training complete
Epoch 166 training complete
Epoch 167 training complete
Epoch 168 training complete
Epoch 169 training complete
Epoch 170 training complete
Epoch 171 training complete
Epoch 172 training complete
Epoch 173 training complete
Epoch 174 training complete
Epoch 175 training complete
Epoch 176 training complete
Epoch 177 training complete
Epoch 178 training complete
Epoch 179 training complete
Epoch 180 training complete
Epoch 181 training complete
Epoch 182 training complete
Epoch 183 training complete
Epoch 184 training complete
Epoch 185 training complete
Epoch 186 training complete
Epoch 187 training complete
Epoch 188 training complete
Epoch 189 training complete
Epoch 190 training complete
Epoch 191 training complete
Epoch 192 training complete
Epoch 193 training complete
Epoch 194 training complete
Epoch 195 training complete
Epoch 196 training complete
Epoch 197 training complete
Epoch 198 training complete
Epoch 199 training complete
Epoch 200 training complete
Epoch 201 training complete
Epoch 202 training complete
Epoch 203 training complete
Epoch 204 training complete
Epoch 205 training complete
Epoch 206 training complete
Epoch 207 training complete
Epoch 208 training complete
Epoch 209 training complete
Epoch 210 training complete
Epoch 211 training complete
Epoch 212 training complete
Epoch 213 training complete
Epoch 214 training complete
Epoch 215 training complete
Epoch 216 training complete
Epoch 217 training complete
Epoch 218 training complete
Epoch 219 training complete
Epoch 220 training complete
Epoch 221 training complete
Epoch 222 training complete
Epoch 223 training complete
Epoch 224 training complete
Epoch 225 training complete
Epoch 226 training complete
Epoch 227 training complete
Epoch 228 training complete
Epoch 229 training complete
Epoch 230 training complete
Epoch 231 training complete
Epoch 232 training complete
Epoch 233 training complete
Epoch 234 training complete
Epoch 235 training complete
Epoch 236 training complete
Epoch 237 training complete
Epoch 238 training complete
Epoch 239 training complete
Epoch 240 training complete
Epoch 241 training complete
Epoch 242 training complete
Epoch 243 training complete
Epoch 244 training complete
Epoch 245 training complete
Epoch 246 training complete
Epoch 247 training complete
Epoch 248 training complete
Epoch 249 training complete
Epoch 250 training complete
Epoch 251 training complete
Epoch 252 training complete
Epoch 253 training complete
Epoch 254 training complete
Epoch 255 training complete
Epoch 256 training complete
Epoch 257 training complete
Epoch 258 training complete
Epoch 259 training complete
Epoch 260 training complete
Epoch 261 training complete
Epoch 262 training complete
Epoch 263 training complete
Epoch 264 training complete
Epoch 265 training complete
Epoch 266 training complete
Epoch 267 training complete
Epoch 268 training complete
Epoch 269 training complete
Epoch 270 training complete
Epoch 271 training complete
Epoch 272 training complete
Epoch 273 training complete
Epoch 274 training complete
Epoch 275 training complete
Epoch 276 training complete
Epoch 277 training complete
Epoch 278 training complete
Epoch 279 training complete
Epoch 280 training complete
Epoch 281 training complete
Epoch 282 training complete
Epoch 283 training complete
Epoch 284 training complete
Epoch 285 training complete
Epoch 286 training complete
Epoch 287 training complete
Epoch 288 training complete
Epoch 289 training complete
Epoch 290 training complete
Epoch 291 training complete
Epoch 292 training complete
Epoch 293 training complete
Epoch 294 training complete
Epoch 295 training complete
Epoch 296 training complete
Epoch 297 training complete
Epoch 298 training complete
Epoch 299 training complete
Epoch 300 training complete
Epoch 301 training complete
Epoch 302 training complete
Epoch 303 training complete
Epoch 304 training complete
Epoch 305 training complete
Epoch 306 training complete
Epoch 307 training complete
Epoch 308 training complete
Epoch 309 training complete
Epoch 310 training complete
Epoch 311 training complete
Epoch 312 training complete
Epoch 313 training complete
Epoch 314 training complete
Epoch 315 training complete
Epoch 316 training complete
Epoch 317 training complete
Epoch 318 training complete
Epoch 319 training complete
Epoch 320 training complete
Epoch 321 training complete
Epoch 322 training complete
Epoch 323 training complete
Epoch 324 training complete
Epoch 325 training complete
Epoch 326 training complete
Epoch 327 training complete
Epoch 328 training complete
Epoch 329 training complete
Epoch 330 training complete
Epoch 331 training complete
Epoch 332 training complete
Epoch 333 training complete
Epoch 334 training complete
Epoch 335 training complete
Epoch 336 training complete
Epoch 337 training complete
Epoch 338 training complete
Epoch 339 training complete
Epoch 340 training complete
Epoch 341 training complete
Epoch 342 training complete
Epoch 343 training complete
Epoch 344 training complete
Epoch 345 training complete
Epoch 346 training complete
Epoch 347 training complete
Epoch 348 training complete
Epoch 349 training complete
Epoch 350 training complete
Epoch 351 training complete
Epoch 352 training complete
Epoch 353 training complete
Epoch 354 training complete
Epoch 355 training complete
Epoch 356 training complete
Epoch 357 training complete
Epoch 358 training complete
Epoch 359 training complete
Epoch 360 training complete
Epoch 361 training complete
Epoch 362 training complete
Epoch 363 training complete
Epoch 364 training complete
Epoch 365 training complete
Epoch 366 training complete
Epoch 367 training complete
Epoch 368 training complete
Epoch 369 training complete
Epoch 370 training complete
Epoch 371 training complete
Epoch 372 training complete
Epoch 373 training complete
Epoch 374 training complete
Epoch 375 training complete
Epoch 376 training complete
Epoch 377 training complete
Epoch 378 training complete
Epoch 379 training complete
Epoch 380 training complete
Epoch 381 training complete
Epoch 382 training complete
Epoch 383 training complete
Epoch 384 training complete
Epoch 385 training complete
Epoch 386 training complete
Epoch 387 training complete
Epoch 388 training complete
Epoch 389 training complete
Epoch 390 training complete
Epoch 391 training complete
Epoch 392 training complete
Epoch 393 training complete
Epoch 394 training complete
Epoch 395 training complete
Epoch 396 training complete
Epoch 397 training complete
Epoch 398 training complete
Epoch 399 training complete
Epoch 400 training complete
Epoch 401 training complete
Epoch 402 training complete
Epoch 403 training complete
Epoch 404 training complete
Epoch 405 training complete
Epoch 406 training complete
Epoch 407 training complete
Epoch 408 training complete
Epoch 409 training complete
Epoch 410 training complete
Epoch 411 training complete
Epoch 412 training complete
Epoch 413 training complete
Epoch 414 training complete
Epoch 415 training complete
Epoch 416 training complete
Epoch 417 training complete
Epoch 418 training complete
Epoch 419 training complete
Epoch 420 training complete
Epoch 421 training complete
Epoch 422 training complete
Epoch 423 training complete
Epoch 424 training complete
Epoch 425 training complete
Epoch 426 training complete
Epoch 427 training complete
Epoch 428 training complete
Epoch 429 training complete
Epoch 430 training complete
Epoch 431 training complete
Epoch 432 training complete
Epoch 433 training complete
Epoch 434 training complete
Epoch 435 training complete
Epoch 436 training complete
Epoch 437 training complete
Epoch 438 training complete
Epoch 439 training complete
Epoch 440 training complete
Epoch 441 training complete
Epoch 442 training complete
Epoch 443 training complete
Epoch 444 training complete
Epoch 445 training complete
Epoch 446 training complete
Epoch 447 training complete
Epoch 448 training complete
Epoch 449 training complete
Epoch 450 training complete
Epoch 451 training complete
Epoch 452 training complete
Epoch 453 training complete
Epoch 454 training complete
Epoch 455 training complete
Epoch 456 training complete
Epoch 457 training complete
Epoch 458 training complete
Epoch 459 training complete
Epoch 460 training complete
Epoch 461 training complete
Epoch 462 training complete
Epoch 463 training complete
Epoch 464 training complete
Epoch 465 training complete
Epoch 466 training complete
Epoch 467 training complete
Epoch 468 training complete
Epoch 469 training complete
Epoch 470 training complete
Epoch 471 training complete
Epoch 472 training complete
Epoch 473 training complete
Epoch 474 training complete
Epoch 475 training complete
Epoch 476 training complete
Epoch 477 training complete
Epoch 478 training complete
Epoch 479 training complete
Epoch 480 training complete
Epoch 481 training complete
Epoch 482 training complete
Epoch 483 training complete
Epoch 484 training complete
Epoch 485 training complete
Epoch 486 training complete
Epoch 487 training complete
Epoch 488 training complete
Epoch 489 training complete
Epoch 490 training complete
Epoch 491 training complete
Epoch 492 training complete
Epoch 493 training complete
Epoch 494 training complete
Epoch 495 training complete
Epoch 496 training complete
Epoch 497 training complete
Epoch 498 training complete
Epoch 499 training complete
Epoch 500 training complete
Epoch 501 training complete
Epoch 502 training complete
Epoch 503 training complete
Epoch 504 training complete
Epoch 505 training complete
Epoch 506 training complete
Epoch 507 training complete
Epoch 508 training complete
Epoch 509 training complete
Epoch 510 training complete
Epoch 511 training complete
Epoch 512 training complete
Epoch 513 training complete
Epoch 514 training complete
Epoch 515 training complete
Epoch 516 training complete
Epoch 517 training complete
Epoch 518 training complete
Epoch 519 training complete
Epoch 520 training complete
Epoch 521 training complete
Epoch 522 training complete
Epoch 523 training complete
Epoch 524 training complete
Epoch 525 training complete
Epoch 526 training complete
Epoch 527 training complete
Epoch 528 training complete
Epoch 529 training complete
Epoch 530 training complete
Epoch 531 training complete
Epoch 532 training complete
Epoch 533 training complete
Epoch 534 training complete
Epoch 535 training complete
Epoch 536 training complete
Epoch 537 training complete
Epoch 538 training complete
Epoch 539 training complete
Epoch 540 training complete
Epoch 541 training complete
Epoch 542 training complete
Epoch 543 training complete
Epoch 544 training complete
Epoch 545 training complete
Epoch 546 training complete
Epoch 547 training complete
Epoch 548 training complete
Epoch 549 training complete
Epoch 550 training complete
Epoch 551 training complete
Epoch 552 training complete
Epoch 553 training complete
Epoch 554 training complete
Epoch 555 training complete
Epoch 556 training complete
Epoch 557 training complete
Epoch 558 training complete
Epoch 559 training complete
Epoch 560 training complete
Epoch 561 training complete
Epoch 562 training complete
Epoch 563 training complete
Epoch 564 training complete
Epoch 565 training complete
Epoch 566 training complete
Epoch 567 training complete
Epoch 568 training complete
Epoch 569 training complete
Epoch 570 training complete
Epoch 571 training complete
Epoch 572 training complete
Epoch 573 training complete
Epoch 574 training complete
Epoch 575 training complete
Epoch 576 training complete
Epoch 577 training complete
Epoch 578 training complete
Epoch 579 training complete
Epoch 580 training complete
Epoch 581 training complete
Epoch 582 training complete
Epoch 583 training complete
Epoch 584 training complete
Epoch 585 training complete
Epoch 586 training complete
Epoch 587 training complete
Epoch 588 training complete
Epoch 589 training complete
Epoch 590 training complete
Epoch 591 training complete
Epoch 592 training complete
Epoch 593 training complete
Epoch 594 training complete
Epoch 595 training complete
Epoch 596 training complete
Epoch 597 training complete
Epoch 598 training complete
Epoch 599 training complete
Epoch 600 training complete
Epoch 601 training complete
Epoch 602 training complete
Epoch 603 training complete
Epoch 604 training complete
Epoch 605 training complete
Epoch 606 training complete
Epoch 607 training complete
Epoch 608 training complete
Epoch 609 training complete
Epoch 610 training complete
Epoch 611 training complete
Epoch 612 training complete
Epoch 613 training complete
Epoch 614 training complete
Epoch 615 training complete
Epoch 616 training complete
Epoch 617 training complete
Epoch 618 training complete
Epoch 619 training complete
Epoch 620 training complete
Epoch 621 training complete
Epoch 622 training complete
Epoch 623 training complete
Epoch 624 training complete
Epoch 625 training complete
Epoch 626 training complete
Epoch 627 training complete
Epoch 628 training complete
Epoch 629 training complete
Epoch 630 training complete
Epoch 631 training complete
Epoch 632 training complete
Epoch 633 training complete
Epoch 634 training complete
Epoch 635 training complete
Epoch 636 training complete
Epoch 637 training complete
Epoch 638 training complete
Epoch 639 training complete
Epoch 640 training complete
Epoch 641 training complete
Epoch 642 training complete
Epoch 643 training complete
Epoch 644 training complete
Epoch 645 training complete
Epoch 646 training complete
Epoch 647 training complete
Epoch 648 training complete
Epoch 649 training complete
Epoch 650 training complete
Epoch 651 training complete
Epoch 652 training complete
Epoch 653 training complete
Epoch 654 training complete
Epoch 655 training complete
Epoch 656 training complete
Epoch 657 training complete
Epoch 658 training complete
Epoch 659 training complete
Epoch 660 training complete
Epoch 661 training complete
Epoch 662 training complete
Epoch 663 training complete
Epoch 664 training complete
Epoch 665 training complete
Epoch 666 training complete
Epoch 667 training complete
Epoch 668 training complete
Epoch 669 training complete
Epoch 670 training complete
Epoch 671 training complete
Epoch 672 training complete
Epoch 673 training complete
Epoch 674 training complete
Epoch 675 training complete
Epoch 676 training complete
Epoch 677 training complete
Epoch 678 training complete
Epoch 679 training complete
Epoch 680 training complete
Epoch 681 training complete
Epoch 682 training complete
Epoch 683 training complete
Epoch 684 training complete
Epoch 685 training complete
Epoch 686 training complete
Epoch 687 training complete
Epoch 688 training complete
Epoch 689 training complete
Epoch 690 training complete
Epoch 691 training complete
Epoch 692 training complete
Epoch 693 training complete
Epoch 694 training complete
Epoch 695 training complete
Epoch 696 training complete
Epoch 697 training complete
Epoch 698 training complete
Epoch 699 training complete
Epoch 700 training complete
Epoch 701 training complete
Epoch 702 training complete
Epoch 703 training complete
Epoch 704 training complete
Epoch 705 training complete
Epoch 706 training complete
Epoch 707 training complete
Epoch 708 training complete
Epoch 709 training complete
Epoch 710 training complete
Epoch 711 training complete
Epoch 712 training complete
Epoch 713 training complete
Epoch 714 training complete
Epoch 715 training complete
Epoch 716 training complete
Epoch 717 training complete
Epoch 718 training complete
Epoch 719 training complete
Epoch 720 training complete
Epoch 721 training complete
Epoch 722 training complete
Epoch 723 training complete
Epoch 724 training complete
Epoch 725 training complete
Epoch 726 training complete
Epoch 727 training complete
Epoch 728 training complete
Epoch 729 training complete
Epoch 730 training complete
Epoch 731 training complete
Epoch 732 training complete
Epoch 733 training complete
Epoch 734 training complete
Epoch 735 training complete
Epoch 736 training complete
Epoch 737 training complete
Epoch 738 training complete
Epoch 739 training complete
Epoch 740 training complete
Epoch 741 training complete
Epoch 742 training complete
Epoch 743 training complete
Epoch 744 training complete
Epoch 745 training complete
Epoch 746 training complete
Epoch 747 training complete
Epoch 748 training complete
Epoch 749 training complete
Epoch 750 training complete
Epoch 751 training complete
Epoch 752 training complete
Epoch 753 training complete
Epoch 754 training complete
Epoch 755 training complete
Epoch 756 training complete
Epoch 757 training complete
Epoch 758 training complete
Epoch 759 training complete
Epoch 760 training complete
Epoch 761 training complete
Epoch 762 training complete
Epoch 763 training complete
Epoch 764 training complete
Epoch 765 training complete
Epoch 766 training complete
Epoch 767 training complete
Epoch 768 training complete
Epoch 769 training complete
Epoch 770 training complete
Epoch 771 training complete
Epoch 772 training complete
Epoch 773 training complete
Epoch 774 training complete
Epoch 775 training complete
Epoch 776 training complete
Epoch 777 training complete
Epoch 778 training complete
Epoch 779 training complete
Epoch 780 training complete
Epoch 781 training complete
Epoch 782 training complete
Epoch 783 training complete
Epoch 784 training complete
Epoch 785 training complete
Epoch 786 training complete
Epoch 787 training complete
Epoch 788 training complete
Epoch 789 training complete
Epoch 790 training complete
Epoch 791 training complete
Epoch 792 training complete
Epoch 793 training complete
Epoch 794 training complete
Epoch 795 training complete
Epoch 796 training complete
Epoch 797 training complete
Epoch 798 training complete
Epoch 799 training complete
Epoch 800 training complete
Epoch 801 training complete
Epoch 802 training complete
Epoch 803 training complete
Epoch 804 training complete
Epoch 805 training complete
Epoch 806 training complete
Epoch 807 training complete
Epoch 808 training complete
Epoch 809 training complete
Epoch 810 training complete
Epoch 811 training complete
Epoch 812 training complete
Epoch 813 training complete
Epoch 814 training complete
Epoch 815 training complete
Epoch 816 training complete
Epoch 817 training complete
Epoch 818 training complete
Epoch 819 training complete
Epoch 820 training complete
Epoch 821 training complete
Epoch 822 training complete
Epoch 823 training complete
Epoch 824 training complete
Epoch 825 training complete
Epoch 826 training complete
Epoch 827 training complete
Epoch 828 training complete
Epoch 829 training complete
Epoch 830 training complete
Epoch 831 training complete
Epoch 832 training complete
Epoch 833 training complete
Epoch 834 training complete
Epoch 835 training complete
Epoch 836 training complete
Epoch 837 training complete
Epoch 838 training complete
Epoch 839 training complete
Epoch 840 training complete
Epoch 841 training complete
Epoch 842 training complete
Epoch 843 training complete
Epoch 844 training complete
Epoch 845 training complete
Epoch 846 training complete
Epoch 847 training complete
Epoch 848 training complete
Epoch 849 training complete
Epoch 850 training complete
Epoch 851 training complete
Epoch 852 training complete
Epoch 853 training complete
Epoch 854 training complete
Epoch 855 training complete
Epoch 856 training complete
Epoch 857 training complete
Epoch 858 training complete
Epoch 859 training complete
Epoch 860 training complete
Epoch 861 training complete
Epoch 862 training complete
Epoch 863 training complete
Epoch 864 training complete
Epoch 865 training complete
Epoch 866 training complete
Epoch 867 training complete
Epoch 868 training complete
Epoch 869 training complete
Epoch 870 training complete
Epoch 871 training complete
Epoch 872 training complete
Epoch 873 training complete
Epoch 874 training complete
Epoch 875 training complete
Epoch 876 training complete
Epoch 877 training complete
Epoch 878 training complete
Epoch 879 training complete
Epoch 880 training complete
Epoch 881 training complete
Epoch 882 training complete
Epoch 883 training complete
Epoch 884 training complete
Epoch 885 training complete
Epoch 886 training complete
Epoch 887 training complete
Epoch 888 training complete
Epoch 889 training complete
Epoch 890 training complete
Epoch 891 training complete
Epoch 892 training complete
Epoch 893 training complete
Epoch 894 training complete
Epoch 895 training complete
Epoch 896 training complete
Epoch 897 training complete
Epoch 898 training complete
Epoch 899 training complete
Epoch 900 training complete
Epoch 901 training complete
Epoch 902 training complete
Epoch 903 training complete
Epoch 904 training complete
Epoch 905 training complete
Epoch 906 training complete
Epoch 907 training complete
Epoch 908 training complete
Epoch 909 training complete
Epoch 910 training complete
Epoch 911 training complete
Epoch 912 training complete
Epoch 913 training complete
Epoch 914 training complete
Epoch 915 training complete
Epoch 916 training complete
Epoch 917 training complete
Epoch 918 training complete
Epoch 919 training complete
Epoch 920 training complete
Epoch 921 training complete
Epoch 922 training complete
Epoch 923 training complete
Epoch 924 training complete
Epoch 925 training complete
Epoch 926 training complete
Epoch 927 training complete
Epoch 928 training complete
Epoch 929 training complete
Epoch 930 training complete
Epoch 931 training complete
Epoch 932 training complete
Epoch 933 training complete
Epoch 934 training complete
Epoch 935 training complete
Epoch 936 training complete
Epoch 937 training complete
Epoch 938 training complete
Epoch 939 training complete
Epoch 940 training complete
Epoch 941 training complete
Epoch 942 training complete
Epoch 943 training complete
Epoch 944 training complete
Epoch 945 training complete
Epoch 946 training complete
Epoch 947 training complete
Epoch 948 training complete
Epoch 949 training complete
Epoch 950 training complete
Epoch 951 training complete
Epoch 952 training complete
Epoch 953 training complete
Epoch 954 training complete
Epoch 955 training complete
Epoch 956 training complete
Epoch 957 training complete
Epoch 958 training complete
Epoch 959 training complete
Epoch 960 training complete
Epoch 961 training complete
Epoch 962 training complete
Epoch 963 training complete
Epoch 964 training complete
Epoch 965 training complete
Epoch 966 training complete
Epoch 967 training complete
Epoch 968 training complete
Epoch 969 training complete
Epoch 970 training complete
Epoch 971 training complete
Epoch 972 training complete
Epoch 973 training complete
Epoch 974 training complete
Epoch 975 training complete
Epoch 976 training complete
Epoch 977 training complete
Epoch 978 training complete
Epoch 979 training complete
Epoch 980 training complete
Epoch 981 training complete
Epoch 982 training complete
Epoch 983 training complete
Epoch 984 training complete
Epoch 985 training complete
Epoch 986 training complete
Epoch 987 training complete
Epoch 988 training complete
Epoch 989 training complete
Epoch 990 training complete
Epoch 991 training complete
Epoch 992 training complete
Epoch 993 training complete
Epoch 994 training complete
Epoch 995 training complete
Epoch 996 training complete
Epoch 997 training complete
Epoch 998 training complete
Epoch 999 training complete
Epoch 1000 training complete
Epoch 1001 training complete
Epoch 1002 training complete
Epoch 1003 training complete
Epoch 1004 training complete
Epoch 1005 training complete
Epoch 1006 training complete
Epoch 1007 training complete
Epoch 1008 training complete
Epoch 1009 training complete
Epoch 1010 training complete
Epoch 1011 training complete
Epoch 1012 training complete
Epoch 1013 training complete
Epoch 1014 training complete
Epoch 1015 training complete
Epoch 1016 training complete
Epoch 1017 training complete
Epoch 1018 training complete
Epoch 1019 training complete
Epoch 1020 training complete
Epoch 1021 training complete
Epoch 1022 training complete
Epoch 1023 training complete
Epoch 1024 training complete
Epoch 1025 training complete
Epoch 1026 training complete
Epoch 1027 training complete
Epoch 1028 training complete
Epoch 1029 training complete
Epoch 1030 training complete
Epoch 1031 training complete
Epoch 1032 training complete
Epoch 1033 training complete
Epoch 1034 training complete
Epoch 1035 training complete
Epoch 1036 training complete
Epoch 1037 training complete
Epoch 1038 training complete
Epoch 1039 training complete
Epoch 1040 training complete
Epoch 1041 training complete
Epoch 1042 training complete
Epoch 1043 training complete
Epoch 1044 training complete
Epoch 1045 training complete
Epoch 1046 training complete
Epoch 1047 training complete
Epoch 1048 training complete
Epoch 1049 training complete
Epoch 1050 training complete
Epoch 1051 training complete
Epoch 1052 training complete
Epoch 1053 training complete
Epoch 1054 training complete
Epoch 1055 training complete
Epoch 1056 training complete
Epoch 1057 training complete
Epoch 1058 training complete
Epoch 1059 training complete
Epoch 1060 training complete
Epoch 1061 training complete
Epoch 1062 training complete
Epoch 1063 training complete
Epoch 1064 training complete
Epoch 1065 training complete
Epoch 1066 training complete
Epoch 1067 training complete
Epoch 1068 training complete
Epoch 1069 training complete
Epoch 1070 training complete
Epoch 1071 training complete
Epoch 1072 training complete
Epoch 1073 training complete
Epoch 1074 training complete
Epoch 1075 training complete
Epoch 1076 training complete
Epoch 1077 training complete
Epoch 1078 training complete
Epoch 1079 training complete
Epoch 1080 training complete
Epoch 1081 training complete
Epoch 1082 training complete
Epoch 1083 training complete
Epoch 1084 training complete
Epoch 1085 training complete
Epoch 1086 training complete
Epoch 1087 training complete
Epoch 1088 training complete
Epoch 1089 training complete
Epoch 1090 training complete
Epoch 1091 training complete
Epoch 1092 training complete
Epoch 1093 training complete
Epoch 1094 training complete
Epoch 1095 training complete
Epoch 1096 training complete
Epoch 1097 training complete
Epoch 1098 training complete
Epoch 1099 training complete
Epoch 1100 training complete
Epoch 1101 training complete
Epoch 1102 training complete
Epoch 1103 training complete
Epoch 1104 training complete
Epoch 1105 training complete
Epoch 1106 training complete
Epoch 1107 training complete
Epoch 1108 training complete
Epoch 1109 training complete
Epoch 1110 training complete
Epoch 1111 training complete
Epoch 1112 training complete
Epoch 1113 training complete
Epoch 1114 training complete
Epoch 1115 training complete
Epoch 1116 training complete
Epoch 1117 training complete
Epoch 1118 training complete
Epoch 1119 training complete
Epoch 1120 training complete
Epoch 1121 training complete
Epoch 1122 training complete
Epoch 1123 training complete
Epoch 1124 training complete
Epoch 1125 training complete
Epoch 1126 training complete
Epoch 1127 training complete
Epoch 1128 training complete
Epoch 1129 training complete
Epoch 1130 training complete
Epoch 1131 training complete
Epoch 1132 training complete
Epoch 1133 training complete
Epoch 1134 training complete
Epoch 1135 training complete
Epoch 1136 training complete
Epoch 1137 training complete
Epoch 1138 training complete
Epoch 1139 training complete
Epoch 1140 training complete
Epoch 1141 training complete
Epoch 1142 training complete
Epoch 1143 training complete
Epoch 1144 training complete
Epoch 1145 training complete
Epoch 1146 training complete
Epoch 1147 training complete
Epoch 1148 training complete
Epoch 1149 training complete
Epoch 1150 training complete
Epoch 1151 training complete
Epoch 1152 training complete
Epoch 1153 training complete
Epoch 1154 training complete
Epoch 1155 training complete
Epoch 1156 training complete
Epoch 1157 training complete
Epoch 1158 training complete
Epoch 1159 training complete
Epoch 1160 training complete
Epoch 1161 training complete
Epoch 1162 training complete
Epoch 1163 training complete
Epoch 1164 training complete
Epoch 1165 training complete
Epoch 1166 training complete
Epoch 1167 training complete
Epoch 1168 training complete
Epoch 1169 training complete
Epoch 1170 training complete
Epoch 1171 training complete
Epoch 1172 training complete
Epoch 1173 training complete
Epoch 1174 training complete
Epoch 1175 training complete
Epoch 1176 training complete
Epoch 1177 training complete
Epoch 1178 training complete
Epoch 1179 training complete
Epoch 1180 training complete
Epoch 1181 training complete
Epoch 1182 training complete
Epoch 1183 training complete
Epoch 1184 training complete
Epoch 1185 training complete
Epoch 1186 training complete
Epoch 1187 training complete
Epoch 1188 training complete
Epoch 1189 training complete
Epoch 1190 training complete
Epoch 1191 training complete
Epoch 1192 training complete
Epoch 1193 training complete
Epoch 1194 training complete
Epoch 1195 training complete
Epoch 1196 training complete
Epoch 1197 training complete
Epoch 1198 training complete
Epoch 1199 training complete
Epoch 1200 training complete
Epoch 1201 training complete
Epoch 1202 training complete
Epoch 1203 training complete
Epoch 1204 training complete
Epoch 1205 training complete
Epoch 1206 training complete
Epoch 1207 training complete
Epoch 1208 training complete
Epoch 1209 training complete
Epoch 1210 training complete
Epoch 1211 training complete
Epoch 1212 training complete
Epoch 1213 training complete
Epoch 1214 training complete
Epoch 1215 training complete
Epoch 1216 training complete
Epoch 1217 training complete
Epoch 1218 training complete
Epoch 1219 training complete
Epoch 1220 training complete
Epoch 1221 training complete
Epoch 1222 training complete
Epoch 1223 training complete
Epoch 1224 training complete
Epoch 1225 training complete
Epoch 1226 training complete
Epoch 1227 training complete
Epoch 1228 training complete
Epoch 1229 training complete
Epoch 1230 training complete
Epoch 1231 training complete
Epoch 1232 training complete
Epoch 1233 training complete
Epoch 1234 training complete
Epoch 1235 training complete
Epoch 1236 training complete
Epoch 1237 training complete
Epoch 1238 training complete
Epoch 1239 training complete
Epoch 1240 training complete
Epoch 1241 training complete
Epoch 1242 training complete
Epoch 1243 training complete
Epoch 1244 training complete
Epoch 1245 training complete
Epoch 1246 training complete
Epoch 1247 training complete
Epoch 1248 training complete
Epoch 1249 training complete
Epoch 1250 training complete
Epoch 1251 training complete
Epoch 1252 training complete
Epoch 1253 training complete
Epoch 1254 training complete
Epoch 1255 training complete
Epoch 1256 training complete
Epoch 1257 training complete
Epoch 1258 training complete
Epoch 1259 training complete
Epoch 1260 training complete
Epoch 1261 training complete
Epoch 1262 training complete
Epoch 1263 training complete
Epoch 1264 training complete
Epoch 1265 training complete
Epoch 1266 training complete
Epoch 1267 training complete
Epoch 1268 training complete
Epoch 1269 training complete
Epoch 1270 training complete
Epoch 1271 training complete
Epoch 1272 training complete
Epoch 1273 training complete
Epoch 1274 training complete
Epoch 1275 training complete
Epoch 1276 training complete
Epoch 1277 training complete
Epoch 1278 training complete
Epoch 1279 training complete
Epoch 1280 training complete
Epoch 1281 training complete
Epoch 1282 training complete
Epoch 1283 training complete
Epoch 1284 training complete
Epoch 1285 training complete
Epoch 1286 training complete
Epoch 1287 training complete
Epoch 1288 training complete
Epoch 1289 training complete
Epoch 1290 training complete
Epoch 1291 training complete
Epoch 1292 training complete
Epoch 1293 training complete
Epoch 1294 training complete
Epoch 1295 training complete
Epoch 1296 training complete
Epoch 1297 training complete
Epoch 1298 training complete
Epoch 1299 training complete
Epoch 1300 training complete
Epoch 1301 training complete
Epoch 1302 training complete
Epoch 1303 training complete
Epoch 1304 training complete
Epoch 1305 training complete
Epoch 1306 training complete
Epoch 1307 training complete
Epoch 1308 training complete
Epoch 1309 training complete
Epoch 1310 training complete
Epoch 1311 training complete
Epoch 1312 training complete
Epoch 1313 training complete
Epoch 1314 training complete
Epoch 1315 training complete
Epoch 1316 training complete
Epoch 1317 training complete
Epoch 1318 training complete
Epoch 1319 training complete
Epoch 1320 training complete
Epoch 1321 training complete
Epoch 1322 training complete
Epoch 1323 training complete
Epoch 1324 training complete
Epoch 1325 training complete
Epoch 1326 training complete
Epoch 1327 training complete
Epoch 1328 training complete
Epoch 1329 training complete
Epoch 1330 training complete
Epoch 1331 training complete
Epoch 1332 training complete
Epoch 1333 training complete
Epoch 1334 training complete
Epoch 1335 training complete
Epoch 1336 training complete
Epoch 1337 training complete
Epoch 1338 training complete
Epoch 1339 training complete
Epoch 1340 training complete
Epoch 1341 training complete
Epoch 1342 training complete
Epoch 1343 training complete
Epoch 1344 training complete
Epoch 1345 training complete
Epoch 1346 training complete
Epoch 1347 training complete
Epoch 1348 training complete
Epoch 1349 training complete
Epoch 1350 training complete
Epoch 1351 training complete
Epoch 1352 training complete
Epoch 1353 training complete
Epoch 1354 training complete
Epoch 1355 training complete
Epoch 1356 training complete
Epoch 1357 training complete
Epoch 1358 training complete
Epoch 1359 training complete
Epoch 1360 training complete
Epoch 1361 training complete
Epoch 1362 training complete
Epoch 1363 training complete
Epoch 1364 training complete
Epoch 1365 training complete
Epoch 1366 training complete
Epoch 1367 training complete
Epoch 1368 training complete
Epoch 1369 training complete
Epoch 1370 training complete
Epoch 1371 training complete
Epoch 1372 training complete
Epoch 1373 training complete
Epoch 1374 training complete
Epoch 1375 training complete
Epoch 1376 training complete
Epoch 1377 training complete
Epoch 1378 training complete
Epoch 1379 training complete
Epoch 1380 training complete
Epoch 1381 training complete
Epoch 1382 training complete
Epoch 1383 training complete
Epoch 1384 training complete
Epoch 1385 training complete
Epoch 1386 training complete
Epoch 1387 training complete
Epoch 1388 training complete
Epoch 1389 training complete
Epoch 1390 training complete
Epoch 1391 training complete
Epoch 1392 training complete
Epoch 1393 training complete
Epoch 1394 training complete
Epoch 1395 training complete
Epoch 1396 training complete
Epoch 1397 training complete
Epoch 1398 training complete
Epoch 1399 training complete
Epoch 1400 training complete
Epoch 1401 training complete
Epoch 1402 training complete
Epoch 1403 training complete
Epoch 1404 training complete
Epoch 1405 training complete
Epoch 1406 training complete
Epoch 1407 training complete
Epoch 1408 training complete
Epoch 1409 training complete
Epoch 1410 training complete
Epoch 1411 training complete
Epoch 1412 training complete
Epoch 1413 training complete
Epoch 1414 training complete
Epoch 1415 training complete
Epoch 1416 training complete
Epoch 1417 training complete
Epoch 1418 training complete
Epoch 1419 training complete
Epoch 1420 training complete
Epoch 1421 training complete
Epoch 1422 training complete
Epoch 1423 training complete
Epoch 1424 training complete
Epoch 1425 training complete
Epoch 1426 training complete
Epoch 1427 training complete
Epoch 1428 training complete
Epoch 1429 training complete
Epoch 1430 training complete
Epoch 1431 training complete
Epoch 1432 training complete
Epoch 1433 training complete
Epoch 1434 training complete
Epoch 1435 training complete
Epoch 1436 training complete
Epoch 1437 training complete
Epoch 1438 training complete
Epoch 1439 training complete
Epoch 1440 training complete
Epoch 1441 training complete
Epoch 1442 training complete
Epoch 1443 training complete
Epoch 1444 training complete
Epoch 1445 training complete
Epoch 1446 training complete
Epoch 1447 training complete
Epoch 1448 training complete
Epoch 1449 training complete
Epoch 1450 training complete
Epoch 1451 training complete
Epoch 1452 training complete
Epoch 1453 training complete
Epoch 1454 training complete
Epoch 1455 training complete
Epoch 1456 training complete
Epoch 1457 training complete
Epoch 1458 training complete
Epoch 1459 training complete
Epoch 1460 training complete
Epoch 1461 training complete
Epoch 1462 training complete
Epoch 1463 training complete
Epoch 1464 training complete
Epoch 1465 training complete
Epoch 1466 training complete
Epoch 1467 training complete
Epoch 1468 training complete
Epoch 1469 training complete
Epoch 1470 training complete
Epoch 1471 training complete
Epoch 1472 training complete
Epoch 1473 training complete
Epoch 1474 training complete
Epoch 1475 training complete
Epoch 1476 training complete
Epoch 1477 training complete
Epoch 1478 training complete
Epoch 1479 training complete
Epoch 1480 training complete
Epoch 1481 training complete
Epoch 1482 training complete
Epoch 1483 training complete
Epoch 1484 training complete
Epoch 1485 training complete
Epoch 1486 training complete
Epoch 1487 training complete
Epoch 1488 training complete
Epoch 1489 training complete
Epoch 1490 training complete
Epoch 1491 training complete
Epoch 1492 training complete
Epoch 1493 training complete
Epoch 1494 training complete
Epoch 1495 training complete
Epoch 1496 training complete
Epoch 1497 training complete
Epoch 1498 training complete
Epoch 1499 training complete
Accuracy was 89.05 percent
Training network with data set size 2000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Epoch 30 training complete
Epoch 31 training complete
Epoch 32 training complete
Epoch 33 training complete
Epoch 34 training complete
Epoch 35 training complete
Epoch 36 training complete
Epoch 37 training complete
Epoch 38 training complete
Epoch 39 training complete
Epoch 40 training complete
Epoch 41 training complete
Epoch 42 training complete
Epoch 43 training complete
Epoch 44 training complete
Epoch 45 training complete
Epoch 46 training complete
Epoch 47 training complete
Epoch 48 training complete
Epoch 49 training complete
Epoch 50 training complete
Epoch 51 training complete
Epoch 52 training complete
Epoch 53 training complete
Epoch 54 training complete
Epoch 55 training complete
Epoch 56 training complete
Epoch 57 training complete
Epoch 58 training complete
Epoch 59 training complete
Epoch 60 training complete
Epoch 61 training complete
Epoch 62 training complete
Epoch 63 training complete
Epoch 64 training complete
Epoch 65 training complete
Epoch 66 training complete
Epoch 67 training complete
Epoch 68 training complete
Epoch 69 training complete
Epoch 70 training complete
Epoch 71 training complete
Epoch 72 training complete
Epoch 73 training complete
Epoch 74 training complete
Epoch 75 training complete
Epoch 76 training complete
Epoch 77 training complete
Epoch 78 training complete
Epoch 79 training complete
Epoch 80 training complete
Epoch 81 training complete
Epoch 82 training complete
Epoch 83 training complete
Epoch 84 training complete
Epoch 85 training complete
Epoch 86 training complete
Epoch 87 training complete
Epoch 88 training complete
Epoch 89 training complete
Epoch 90 training complete
Epoch 91 training complete
Epoch 92 training complete
Epoch 93 training complete
Epoch 94 training complete
Epoch 95 training complete
Epoch 96 training complete
Epoch 97 training complete
Epoch 98 training complete
Epoch 99 training complete
Epoch 100 training complete
Epoch 101 training complete
Epoch 102 training complete
Epoch 103 training complete
Epoch 104 training complete
Epoch 105 training complete
Epoch 106 training complete
Epoch 107 training complete
Epoch 108 training complete
Epoch 109 training complete
Epoch 110 training complete
Epoch 111 training complete
Epoch 112 training complete
Epoch 113 training complete
Epoch 114 training complete
Epoch 115 training complete
Epoch 116 training complete
Epoch 117 training complete
Epoch 118 training complete
Epoch 119 training complete
Epoch 120 training complete
Epoch 121 training complete
Epoch 122 training complete
Epoch 123 training complete
Epoch 124 training complete
Epoch 125 training complete
Epoch 126 training complete
Epoch 127 training complete
Epoch 128 training complete
Epoch 129 training complete
Epoch 130 training complete
Epoch 131 training complete
Epoch 132 training complete
Epoch 133 training complete
Epoch 134 training complete
Epoch 135 training complete
Epoch 136 training complete
Epoch 137 training complete
Epoch 138 training complete
Epoch 139 training complete
Epoch 140 training complete
Epoch 141 training complete
Epoch 142 training complete
Epoch 143 training complete
Epoch 144 training complete
Epoch 145 training complete
Epoch 146 training complete
Epoch 147 training complete
Epoch 148 training complete
Epoch 149 training complete
Epoch 150 training complete
Epoch 151 training complete
Epoch 152 training complete
Epoch 153 training complete
Epoch 154 training complete
Epoch 155 training complete
Epoch 156 training complete
Epoch 157 training complete
Epoch 158 training complete
Epoch 159 training complete
Epoch 160 training complete
Epoch 161 training complete
Epoch 162 training complete
Epoch 163 training complete
Epoch 164 training complete
Epoch 165 training complete
Epoch 166 training complete
Epoch 167 training complete
Epoch 168 training complete
Epoch 169 training complete
Epoch 170 training complete
Epoch 171 training complete
Epoch 172 training complete
Epoch 173 training complete
Epoch 174 training complete
Epoch 175 training complete
Epoch 176 training complete
Epoch 177 training complete
Epoch 178 training complete
Epoch 179 training complete
Epoch 180 training complete
Epoch 181 training complete
Epoch 182 training complete
Epoch 183 training complete
Epoch 184 training complete
Epoch 185 training complete
Epoch 186 training complete
Epoch 187 training complete
Epoch 188 training complete
Epoch 189 training complete
Epoch 190 training complete
Epoch 191 training complete
Epoch 192 training complete
Epoch 193 training complete
Epoch 194 training complete
Epoch 195 training complete
Epoch 196 training complete
Epoch 197 training complete
Epoch 198 training complete
Epoch 199 training complete
Epoch 200 training complete
Epoch 201 training complete
Epoch 202 training complete
Epoch 203 training complete
Epoch 204 training complete
Epoch 205 training complete
Epoch 206 training complete
Epoch 207 training complete
Epoch 208 training complete
Epoch 209 training complete
Epoch 210 training complete
Epoch 211 training complete
Epoch 212 training complete
Epoch 213 training complete
Epoch 214 training complete
Epoch 215 training complete
Epoch 216 training complete
Epoch 217 training complete
Epoch 218 training complete
Epoch 219 training complete
Epoch 220 training complete
Epoch 221 training complete
Epoch 222 training complete
Epoch 223 training complete
Epoch 224 training complete
Epoch 225 training complete
Epoch 226 training complete
Epoch 227 training complete
Epoch 228 training complete
Epoch 229 training complete
Epoch 230 training complete
Epoch 231 training complete
Epoch 232 training complete
Epoch 233 training complete
Epoch 234 training complete
Epoch 235 training complete
Epoch 236 training complete
Epoch 237 training complete
Epoch 238 training complete
Epoch 239 training complete
Epoch 240 training complete
Epoch 241 training complete
Epoch 242 training complete
Epoch 243 training complete
Epoch 244 training complete
Epoch 245 training complete
Epoch 246 training complete
Epoch 247 training complete
Epoch 248 training complete
Epoch 249 training complete
Epoch 250 training complete
Epoch 251 training complete
Epoch 252 training complete
Epoch 253 training complete
Epoch 254 training complete
Epoch 255 training complete
Epoch 256 training complete
Epoch 257 training complete
Epoch 258 training complete
Epoch 259 training complete
Epoch 260 training complete
Epoch 261 training complete
Epoch 262 training complete
Epoch 263 training complete
Epoch 264 training complete
Epoch 265 training complete
Epoch 266 training complete
Epoch 267 training complete
Epoch 268 training complete
Epoch 269 training complete
Epoch 270 training complete
Epoch 271 training complete
Epoch 272 training complete
Epoch 273 training complete
Epoch 274 training complete
Epoch 275 training complete
Epoch 276 training complete
Epoch 277 training complete
Epoch 278 training complete
Epoch 279 training complete
Epoch 280 training complete
Epoch 281 training complete
Epoch 282 training complete
Epoch 283 training complete
Epoch 284 training complete
Epoch 285 training complete
Epoch 286 training complete
Epoch 287 training complete
Epoch 288 training complete
Epoch 289 training complete
Epoch 290 training complete
Epoch 291 training complete
Epoch 292 training complete
Epoch 293 training complete
Epoch 294 training complete
Epoch 295 training complete
Epoch 296 training complete
Epoch 297 training complete
Epoch 298 training complete
Epoch 299 training complete
Epoch 300 training complete
Epoch 301 training complete
Epoch 302 training complete
Epoch 303 training complete
Epoch 304 training complete
Epoch 305 training complete
Epoch 306 training complete
Epoch 307 training complete
Epoch 308 training complete
Epoch 309 training complete
Epoch 310 training complete
Epoch 311 training complete
Epoch 312 training complete
Epoch 313 training complete
Epoch 314 training complete
Epoch 315 training complete
Epoch 316 training complete
Epoch 317 training complete
Epoch 318 training complete
Epoch 319 training complete
Epoch 320 training complete
Epoch 321 training complete
Epoch 322 training complete
Epoch 323 training complete
Epoch 324 training complete
Epoch 325 training complete
Epoch 326 training complete
Epoch 327 training complete
Epoch 328 training complete
Epoch 329 training complete
Epoch 330 training complete
Epoch 331 training complete
Epoch 332 training complete
Epoch 333 training complete
Epoch 334 training complete
Epoch 335 training complete
Epoch 336 training complete
Epoch 337 training complete
Epoch 338 training complete
Epoch 339 training complete
Epoch 340 training complete
Epoch 341 training complete
Epoch 342 training complete
Epoch 343 training complete
Epoch 344 training complete
Epoch 345 training complete
Epoch 346 training complete
Epoch 347 training complete
Epoch 348 training complete
Epoch 349 training complete
Epoch 350 training complete
Epoch 351 training complete
Epoch 352 training complete
Epoch 353 training complete
Epoch 354 training complete
Epoch 355 training complete
Epoch 356 training complete
Epoch 357 training complete
Epoch 358 training complete
Epoch 359 training complete
Epoch 360 training complete
Epoch 361 training complete
Epoch 362 training complete
Epoch 363 training complete
Epoch 364 training complete
Epoch 365 training complete
Epoch 366 training complete
Epoch 367 training complete
Epoch 368 training complete
Epoch 369 training complete
Epoch 370 training complete
Epoch 371 training complete
Epoch 372 training complete
Epoch 373 training complete
Epoch 374 training complete
Epoch 375 training complete
Epoch 376 training complete
Epoch 377 training complete
Epoch 378 training complete
Epoch 379 training complete
Epoch 380 training complete
Epoch 381 training complete
Epoch 382 training complete
Epoch 383 training complete
Epoch 384 training complete
Epoch 385 training complete
Epoch 386 training complete
Epoch 387 training complete
Epoch 388 training complete
Epoch 389 training complete
Epoch 390 training complete
Epoch 391 training complete
Epoch 392 training complete
Epoch 393 training complete
Epoch 394 training complete
Epoch 395 training complete
Epoch 396 training complete
Epoch 397 training complete
Epoch 398 training complete
Epoch 399 training complete
Epoch 400 training complete
Epoch 401 training complete
Epoch 402 training complete
Epoch 403 training complete
Epoch 404 training complete
Epoch 405 training complete
Epoch 406 training complete
Epoch 407 training complete
Epoch 408 training complete
Epoch 409 training complete
Epoch 410 training complete
Epoch 411 training complete
Epoch 412 training complete
Epoch 413 training complete
Epoch 414 training complete
Epoch 415 training complete
Epoch 416 training complete
Epoch 417 training complete
Epoch 418 training complete
Epoch 419 training complete
Epoch 420 training complete
Epoch 421 training complete
Epoch 422 training complete
Epoch 423 training complete
Epoch 424 training complete
Epoch 425 training complete
Epoch 426 training complete
Epoch 427 training complete
Epoch 428 training complete
Epoch 429 training complete
Epoch 430 training complete
Epoch 431 training complete
Epoch 432 training complete
Epoch 433 training complete
Epoch 434 training complete
Epoch 435 training complete
Epoch 436 training complete
Epoch 437 training complete
Epoch 438 training complete
Epoch 439 training complete
Epoch 440 training complete
Epoch 441 training complete
Epoch 442 training complete
Epoch 443 training complete
Epoch 444 training complete
Epoch 445 training complete
Epoch 446 training complete
Epoch 447 training complete
Epoch 448 training complete
Epoch 449 training complete
Epoch 450 training complete
Epoch 451 training complete
Epoch 452 training complete
Epoch 453 training complete
Epoch 454 training complete
Epoch 455 training complete
Epoch 456 training complete
Epoch 457 training complete
Epoch 458 training complete
Epoch 459 training complete
Epoch 460 training complete
Epoch 461 training complete
Epoch 462 training complete
Epoch 463 training complete
Epoch 464 training complete
Epoch 465 training complete
Epoch 466 training complete
Epoch 467 training complete
Epoch 468 training complete
Epoch 469 training complete
Epoch 470 training complete
Epoch 471 training complete
Epoch 472 training complete
Epoch 473 training complete
Epoch 474 training complete
Epoch 475 training complete
Epoch 476 training complete
Epoch 477 training complete
Epoch 478 training complete
Epoch 479 training complete
Epoch 480 training complete
Epoch 481 training complete
Epoch 482 training complete
Epoch 483 training complete
Epoch 484 training complete
Epoch 485 training complete
Epoch 486 training complete
Epoch 487 training complete
Epoch 488 training complete
Epoch 489 training complete
Epoch 490 training complete
Epoch 491 training complete
Epoch 492 training complete
Epoch 493 training complete
Epoch 494 training complete
Epoch 495 training complete
Epoch 496 training complete
Epoch 497 training complete
Epoch 498 training complete
Epoch 499 training complete
Epoch 500 training complete
Epoch 501 training complete
Epoch 502 training complete
Epoch 503 training complete
Epoch 504 training complete
Epoch 505 training complete
Epoch 506 training complete
Epoch 507 training complete
Epoch 508 training complete
Epoch 509 training complete
Epoch 510 training complete
Epoch 511 training complete
Epoch 512 training complete
Epoch 513 training complete
Epoch 514 training complete
Epoch 515 training complete
Epoch 516 training complete
Epoch 517 training complete
Epoch 518 training complete
Epoch 519 training complete
Epoch 520 training complete
Epoch 521 training complete
Epoch 522 training complete
Epoch 523 training complete
Epoch 524 training complete
Epoch 525 training complete
Epoch 526 training complete
Epoch 527 training complete
Epoch 528 training complete
Epoch 529 training complete
Epoch 530 training complete
Epoch 531 training complete
Epoch 532 training complete
Epoch 533 training complete
Epoch 534 training complete
Epoch 535 training complete
Epoch 536 training complete
Epoch 537 training complete
Epoch 538 training complete
Epoch 539 training complete
Epoch 540 training complete
Epoch 541 training complete
Epoch 542 training complete
Epoch 543 training complete
Epoch 544 training complete
Epoch 545 training complete
Epoch 546 training complete
Epoch 547 training complete
Epoch 548 training complete
Epoch 549 training complete
Epoch 550 training complete
Epoch 551 training complete
Epoch 552 training complete
Epoch 553 training complete
Epoch 554 training complete
Epoch 555 training complete
Epoch 556 training complete
Epoch 557 training complete
Epoch 558 training complete
Epoch 559 training complete
Epoch 560 training complete
Epoch 561 training complete
Epoch 562 training complete
Epoch 563 training complete
Epoch 564 training complete
Epoch 565 training complete
Epoch 566 training complete
Epoch 567 training complete
Epoch 568 training complete
Epoch 569 training complete
Epoch 570 training complete
Epoch 571 training complete
Epoch 572 training complete
Epoch 573 training complete
Epoch 574 training complete
Epoch 575 training complete
Epoch 576 training complete
Epoch 577 training complete
Epoch 578 training complete
Epoch 579 training complete
Epoch 580 training complete
Epoch 581 training complete
Epoch 582 training complete
Epoch 583 training complete
Epoch 584 training complete
Epoch 585 training complete
Epoch 586 training complete
Epoch 587 training complete
Epoch 588 training complete
Epoch 589 training complete
Epoch 590 training complete
Epoch 591 training complete
Epoch 592 training complete
Epoch 593 training complete
Epoch 594 training complete
Epoch 595 training complete
Epoch 596 training complete
Epoch 597 training complete
Epoch 598 training complete
Epoch 599 training complete
Epoch 600 training complete
Epoch 601 training complete
Epoch 602 training complete
Epoch 603 training complete
Epoch 604 training complete
Epoch 605 training complete
Epoch 606 training complete
Epoch 607 training complete
Epoch 608 training complete
Epoch 609 training complete
Epoch 610 training complete
Epoch 611 training complete
Epoch 612 training complete
Epoch 613 training complete
Epoch 614 training complete
Epoch 615 training complete
Epoch 616 training complete
Epoch 617 training complete
Epoch 618 training complete
Epoch 619 training complete
Epoch 620 training complete
Epoch 621 training complete
Epoch 622 training complete
Epoch 623 training complete
Epoch 624 training complete
Epoch 625 training complete
Epoch 626 training complete
Epoch 627 training complete
Epoch 628 training complete
Epoch 629 training complete
Epoch 630 training complete
Epoch 631 training complete
Epoch 632 training complete
Epoch 633 training complete
Epoch 634 training complete
Epoch 635 training complete
Epoch 636 training complete
Epoch 637 training complete
Epoch 638 training complete
Epoch 639 training complete
Epoch 640 training complete
Epoch 641 training complete
Epoch 642 training complete
Epoch 643 training complete
Epoch 644 training complete
Epoch 645 training complete
Epoch 646 training complete
Epoch 647 training complete
Epoch 648 training complete
Epoch 649 training complete
Epoch 650 training complete
Epoch 651 training complete
Epoch 652 training complete
Epoch 653 training complete
Epoch 654 training complete
Epoch 655 training complete
Epoch 656 training complete
Epoch 657 training complete
Epoch 658 training complete
Epoch 659 training complete
Epoch 660 training complete
Epoch 661 training complete
Epoch 662 training complete
Epoch 663 training complete
Epoch 664 training complete
Epoch 665 training complete
Epoch 666 training complete
Epoch 667 training complete
Epoch 668 training complete
Epoch 669 training complete
Epoch 670 training complete
Epoch 671 training complete
Epoch 672 training complete
Epoch 673 training complete
Epoch 674 training complete
Epoch 675 training complete
Epoch 676 training complete
Epoch 677 training complete
Epoch 678 training complete
Epoch 679 training complete
Epoch 680 training complete
Epoch 681 training complete
Epoch 682 training complete
Epoch 683 training complete
Epoch 684 training complete
Epoch 685 training complete
Epoch 686 training complete
Epoch 687 training complete
Epoch 688 training complete
Epoch 689 training complete
Epoch 690 training complete
Epoch 691 training complete
Epoch 692 training complete
Epoch 693 training complete
Epoch 694 training complete
Epoch 695 training complete
Epoch 696 training complete
Epoch 697 training complete
Epoch 698 training complete
Epoch 699 training complete
Epoch 700 training complete
Epoch 701 training complete
Epoch 702 training complete
Epoch 703 training complete
Epoch 704 training complete
Epoch 705 training complete
Epoch 706 training complete
Epoch 707 training complete
Epoch 708 training complete
Epoch 709 training complete
Epoch 710 training complete
Epoch 711 training complete
Epoch 712 training complete
Epoch 713 training complete
Epoch 714 training complete
Epoch 715 training complete
Epoch 716 training complete
Epoch 717 training complete
Epoch 718 training complete
Epoch 719 training complete
Epoch 720 training complete
Epoch 721 training complete
Epoch 722 training complete
Epoch 723 training complete
Epoch 724 training complete
Epoch 725 training complete
Epoch 726 training complete
Epoch 727 training complete
Epoch 728 training complete
Epoch 729 training complete
Epoch 730 training complete
Epoch 731 training complete
Epoch 732 training complete
Epoch 733 training complete
Epoch 734 training complete
Epoch 735 training complete
Epoch 736 training complete
Epoch 737 training complete
Epoch 738 training complete
Epoch 739 training complete
Epoch 740 training complete
Epoch 741 training complete
Epoch 742 training complete
Epoch 743 training complete
Epoch 744 training complete
Epoch 745 training complete
Epoch 746 training complete
Epoch 747 training complete
Epoch 748 training complete
Epoch 749 training complete
Accuracy was 91.05 percent
Training network with data set size 5000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Epoch 30 training complete
Epoch 31 training complete
Epoch 32 training complete
Epoch 33 training complete
Epoch 34 training complete
Epoch 35 training complete
Epoch 36 training complete
Epoch 37 training complete
Epoch 38 training complete
Epoch 39 training complete
Epoch 40 training complete
Epoch 41 training complete
Epoch 42 training complete
Epoch 43 training complete
Epoch 44 training complete
Epoch 45 training complete
Epoch 46 training complete
Epoch 47 training complete
Epoch 48 training complete
Epoch 49 training complete
Epoch 50 training complete
Epoch 51 training complete
Epoch 52 training complete
Epoch 53 training complete
Epoch 54 training complete
Epoch 55 training complete
Epoch 56 training complete
Epoch 57 training complete
Epoch 58 training complete
Epoch 59 training complete
Epoch 60 training complete
Epoch 61 training complete
Epoch 62 training complete
Epoch 63 training complete
Epoch 64 training complete
Epoch 65 training complete
Epoch 66 training complete
Epoch 67 training complete
Epoch 68 training complete
Epoch 69 training complete
Epoch 70 training complete
Epoch 71 training complete
Epoch 72 training complete
Epoch 73 training complete
Epoch 74 training complete
Epoch 75 training complete
Epoch 76 training complete
Epoch 77 training complete
Epoch 78 training complete
Epoch 79 training complete
Epoch 80 training complete
Epoch 81 training complete
Epoch 82 training complete
Epoch 83 training complete
Epoch 84 training complete
Epoch 85 training complete
Epoch 86 training complete
Epoch 87 training complete
Epoch 88 training complete
Epoch 89 training complete
Epoch 90 training complete
Epoch 91 training complete
Epoch 92 training complete
Epoch 93 training complete
Epoch 94 training complete
Epoch 95 training complete
Epoch 96 training complete
Epoch 97 training complete
Epoch 98 training complete
Epoch 99 training complete
Epoch 100 training complete
Epoch 101 training complete
Epoch 102 training complete
Epoch 103 training complete
Epoch 104 training complete
Epoch 105 training complete
Epoch 106 training complete
Epoch 107 training complete
Epoch 108 training complete
Epoch 109 training complete
Epoch 110 training complete
Epoch 111 training complete
Epoch 112 training complete
Epoch 113 training complete
Epoch 114 training complete
Epoch 115 training complete
Epoch 116 training complete
Epoch 117 training complete
Epoch 118 training complete
Epoch 119 training complete
Epoch 120 training complete
Epoch 121 training complete
Epoch 122 training complete
Epoch 123 training complete
Epoch 124 training complete
Epoch 125 training complete
Epoch 126 training complete
Epoch 127 training complete
Epoch 128 training complete
Epoch 129 training complete
Epoch 130 training complete
Epoch 131 training complete
Epoch 132 training complete
Epoch 133 training complete
Epoch 134 training complete
Epoch 135 training complete
Epoch 136 training complete
Epoch 137 training complete
Epoch 138 training complete
Epoch 139 training complete
Epoch 140 training complete
Epoch 141 training complete
Epoch 142 training complete
Epoch 143 training complete
Epoch 144 training complete
Epoch 145 training complete
Epoch 146 training complete
Epoch 147 training complete
Epoch 148 training complete
Epoch 149 training complete
Epoch 150 training complete
Epoch 151 training complete
Epoch 152 training complete
Epoch 153 training complete
Epoch 154 training complete
Epoch 155 training complete
Epoch 156 training complete
Epoch 157 training complete
Epoch 158 training complete
Epoch 159 training complete
Epoch 160 training complete
Epoch 161 training complete
Epoch 162 training complete
Epoch 163 training complete
Epoch 164 training complete
Epoch 165 training complete
Epoch 166 training complete
Epoch 167 training complete
Epoch 168 training complete
Epoch 169 training complete
Epoch 170 training complete
Epoch 171 training complete
Epoch 172 training complete
Epoch 173 training complete
Epoch 174 training complete
Epoch 175 training complete
Epoch 176 training complete
Epoch 177 training complete
Epoch 178 training complete
Epoch 179 training complete
Epoch 180 training complete
Epoch 181 training complete
Epoch 182 training complete
Epoch 183 training complete
Epoch 184 training complete
Epoch 185 training complete
Epoch 186 training complete
Epoch 187 training complete
Epoch 188 training complete
Epoch 189 training complete
Epoch 190 training complete
Epoch 191 training complete
Epoch 192 training complete
Epoch 193 training complete
Epoch 194 training complete
Epoch 195 training complete
Epoch 196 training complete
Epoch 197 training complete
Epoch 198 training complete
Epoch 199 training complete
Epoch 200 training complete
Epoch 201 training complete
Epoch 202 training complete
Epoch 203 training complete
Epoch 204 training complete
Epoch 205 training complete
Epoch 206 training complete
Epoch 207 training complete
Epoch 208 training complete
Epoch 209 training complete
Epoch 210 training complete
Epoch 211 training complete
Epoch 212 training complete
Epoch 213 training complete
Epoch 214 training complete
Epoch 215 training complete
Epoch 216 training complete
Epoch 217 training complete
Epoch 218 training complete
Epoch 219 training complete
Epoch 220 training complete
Epoch 221 training complete
Epoch 222 training complete
Epoch 223 training complete
Epoch 224 training complete
Epoch 225 training complete
Epoch 226 training complete
Epoch 227 training complete
Epoch 228 training complete
Epoch 229 training complete
Epoch 230 training complete
Epoch 231 training complete
Epoch 232 training complete
Epoch 233 training complete
Epoch 234 training complete
Epoch 235 training complete
Epoch 236 training complete
Epoch 237 training complete
Epoch 238 training complete
Epoch 239 training complete
Epoch 240 training complete
Epoch 241 training complete
Epoch 242 training complete
Epoch 243 training complete
Epoch 244 training complete
Epoch 245 training complete
Epoch 246 training complete
Epoch 247 training complete
Epoch 248 training complete
Epoch 249 training complete
Epoch 250 training complete
Epoch 251 training complete
Epoch 252 training complete
Epoch 253 training complete
Epoch 254 training complete
Epoch 255 training complete
Epoch 256 training complete
Epoch 257 training complete
Epoch 258 training complete
Epoch 259 training complete
Epoch 260 training complete
Epoch 261 training complete
Epoch 262 training complete
Epoch 263 training complete
Epoch 264 training complete
Epoch 265 training complete
Epoch 266 training complete
Epoch 267 training complete
Epoch 268 training complete
Epoch 269 training complete
Epoch 270 training complete
Epoch 271 training complete
Epoch 272 training complete
Epoch 273 training complete
Epoch 274 training complete
Epoch 275 training complete
Epoch 276 training complete
Epoch 277 training complete
Epoch 278 training complete
Epoch 279 training complete
Epoch 280 training complete
Epoch 281 training complete
Epoch 282 training complete
Epoch 283 training complete
Epoch 284 training complete
Epoch 285 training complete
Epoch 286 training complete
Epoch 287 training complete
Epoch 288 training complete
Epoch 289 training complete
Epoch 290 training complete
Epoch 291 training complete
Epoch 292 training complete
Epoch 293 training complete
Epoch 294 training complete
Epoch 295 training complete
Epoch 296 training complete
Epoch 297 training complete
Epoch 298 training complete
Epoch 299 training complete
Accuracy was 93.25 percent
Training network with data set size 10000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Epoch 30 training complete
Epoch 31 training complete
Epoch 32 training complete
Epoch 33 training complete
Epoch 34 training complete
Epoch 35 training complete
Epoch 36 training complete
Epoch 37 training complete
Epoch 38 training complete
Epoch 39 training complete
Epoch 40 training complete
Epoch 41 training complete
Epoch 42 training complete
Epoch 43 training complete
Epoch 44 training complete
Epoch 45 training complete
Epoch 46 training complete
Epoch 47 training complete
Epoch 48 training complete
Epoch 49 training complete
Epoch 50 training complete
Epoch 51 training complete
Epoch 52 training complete
Epoch 53 training complete
Epoch 54 training complete
Epoch 55 training complete
Epoch 56 training complete
Epoch 57 training complete
Epoch 58 training complete
Epoch 59 training complete
Epoch 60 training complete
Epoch 61 training complete
Epoch 62 training complete
Epoch 63 training complete
Epoch 64 training complete
Epoch 65 training complete
Epoch 66 training complete
Epoch 67 training complete
Epoch 68 training complete
Epoch 69 training complete
Epoch 70 training complete
Epoch 71 training complete
Epoch 72 training complete
Epoch 73 training complete
Epoch 74 training complete
Epoch 75 training complete
Epoch 76 training complete
Epoch 77 training complete
Epoch 78 training complete
Epoch 79 training complete
Epoch 80 training complete
Epoch 81 training complete
Epoch 82 training complete
Epoch 83 training complete
Epoch 84 training complete
Epoch 85 training complete
Epoch 86 training complete
Epoch 87 training complete
Epoch 88 training complete
Epoch 89 training complete
Epoch 90 training complete
Epoch 91 training complete
Epoch 92 training complete
Epoch 93 training complete
Epoch 94 training complete
Epoch 95 training complete
Epoch 96 training complete
Epoch 97 training complete
Epoch 98 training complete
Epoch 99 training complete
Epoch 100 training complete
Epoch 101 training complete
Epoch 102 training complete
Epoch 103 training complete
Epoch 104 training complete
Epoch 105 training complete
Epoch 106 training complete
Epoch 107 training complete
Epoch 108 training complete
Epoch 109 training complete
Epoch 110 training complete
Epoch 111 training complete
Epoch 112 training complete
Epoch 113 training complete
Epoch 114 training complete
Epoch 115 training complete
Epoch 116 training complete
Epoch 117 training complete
Epoch 118 training complete
Epoch 119 training complete
Epoch 120 training complete
Epoch 121 training complete
Epoch 122 training complete
Epoch 123 training complete
Epoch 124 training complete
Epoch 125 training complete
Epoch 126 training complete
Epoch 127 training complete
Epoch 128 training complete
Epoch 129 training complete
Epoch 130 training complete
Epoch 131 training complete
Epoch 132 training complete
Epoch 133 training complete
Epoch 134 training complete
Epoch 135 training complete
Epoch 136 training complete
Epoch 137 training complete
Epoch 138 training complete
Epoch 139 training complete
Epoch 140 training complete
Epoch 141 training complete
Epoch 142 training complete
Epoch 143 training complete
Epoch 144 training complete
Epoch 145 training complete
Epoch 146 training complete
Epoch 147 training complete
Epoch 148 training complete
Epoch 149 training complete
Accuracy was 94.65 percent
Training network with data set size 20000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Epoch 30 training complete
Epoch 31 training complete
Epoch 32 training complete
Epoch 33 training complete
Epoch 34 training complete
Epoch 35 training complete
Epoch 36 training complete
Epoch 37 training complete
Epoch 38 training complete
Epoch 39 training complete
Epoch 40 training complete
Epoch 41 training complete
Epoch 42 training complete
Epoch 43 training complete
Epoch 44 training complete
Epoch 45 training complete
Epoch 46 training complete
Epoch 47 training complete
Epoch 48 training complete
Epoch 49 training complete
Epoch 50 training complete
Epoch 51 training complete
Epoch 52 training complete
Epoch 53 training complete
Epoch 54 training complete
Epoch 55 training complete
Epoch 56 training complete
Epoch 57 training complete
Epoch 58 training complete
Epoch 59 training complete
Epoch 60 training complete
Epoch 61 training complete
Epoch 62 training complete
Epoch 63 training complete
Epoch 64 training complete
Epoch 65 training complete
Epoch 66 training complete
Epoch 67 training complete
Epoch 68 training complete
Epoch 69 training complete
Epoch 70 training complete
Epoch 71 training complete
Epoch 72 training complete
Epoch 73 training complete
Epoch 74 training complete
Accuracy was 95.52 percent
Training network with data set size 50000
Epoch 0 training complete
Epoch 1 training complete
Epoch 2 training complete
Epoch 3 training complete
Epoch 4 training complete
Epoch 5 training complete
Epoch 6 training complete
Epoch 7 training complete
Epoch 8 training complete
Epoch 9 training complete
Epoch 10 training complete
Epoch 11 training complete
Epoch 12 training complete
Epoch 13 training complete
Epoch 14 training complete
Epoch 15 training complete
Epoch 16 training complete
Epoch 17 training complete
Epoch 18 training complete
Epoch 19 training complete
Epoch 20 training complete
Epoch 21 training complete
Epoch 22 training complete
Epoch 23 training complete
Epoch 24 training complete
Epoch 25 training complete
Epoch 26 training complete
Epoch 27 training complete
Epoch 28 training complete
Epoch 29 training complete
Accuracy was 96.25 percent
Training SVM with data set size 100
Accuracy was 66.77 percent
Training SVM with data set size 200
Accuracy was 77.6 percent
Training SVM with data set size 500
Accuracy was 87.64 percent
Training SVM with data set size 1000
Accuracy was 91.38 percent
Training SVM with data set size 2000
Accuracy was 93.42 percent
Training SVM with data set size 5000
Accuracy was 95.65 percent
Training SVM with data set size 10000
Accuracy was 96.6 percent
Training SVM with data set size 20000
Accuracy was 97.25 percent
Training SVM with data set size 50000
Accuracy was 98.02 percent
make_plots()
As you can see, the classification accuracies improve considerably as we use more training data. Presumably this improvement would continue still further if more data was available. Of course, looking at the graph above it does appear that we're getting near saturation. Suppose, however, that we redo the graph with the training set size plotted logarithmically. It seems clear that the logarithmic graph is still going up toward the end. This suggests that if we used vastly more training data - say, millions or even billions of handwriting samples, instead of just 50,000 - then we'd likely get considerably better performance, even from this very small network.
Obtaining more training data is a great idea. Unfortunately, it can be expensive, and so is not always possible in practice. However, there's another idea which can work nearly as well, and that's to artificially expand the training data. Suppose, for example, that we take an MNIST training image of a five, and rotate it by a small amount, let's say 15 degrees: It's still recognizably the same digit. And yet at the pixel level it's quite different to any image currently in the MNIST training data. It's conceivable that adding this image to the training data might help our network learn more about how to classify digits. What's more, obviously we're not limited to adding just this one image. We can expand our training data by making many small rotations of all the MNIST training images, and then using the expanded training data to improve our network's performance.
This idea is very powerful and has been widely used. Let's look at some of the results from a paper**[8]** which applied several variations of the idea to MNIST. One of the neural network architectures they considered was along similar lines to what we've been using, a feedforward network with $800$ hidden neurons and using the cross-entropy cost function. Running the network with the standard MNIST training data they achieved a classification accuracy of $98.4$ percent on their test set. But then they expanded the training data, using not just rotations, as I described above, but also translating and skewing the images. By training on the expanded data set they increased their network's accuracy to $98.9$ percent. They also experimented with what they called "elastic distortions", a special type of image distortion intended to emulate the random oscillations found in hand muscles. By using the elastic distortions to expand the data they achieved an even higher accuracy, $99.3$ percent. Effectively, they were broadening the experience of their network by exposing it to the sort of variations that are found in real handwriting.
Variations on this idea can be used to improve performance on many learning tasks, not just handwriting recognition. The general principle is to expand the training data by applying operations that reflect real-world variation. It's not difficult to think of ways of doing this. Suppose, for example, that you're building a neural network to do speech recognition. We humans can recognize speech even in the presence of distortions such as background noise. And so you can expand your data by adding background noise. We can also recognize speech if it's sped up or slowed down. So that's another way we can expand the training data. These techniques are not always used - for instance, instead of expanding the training data by adding noise, it may well be more efficient to clean up the input to the network by first applying a noise reduction filter. Still, it's worth keeping the idea of expanding the training data in mind, and looking for opportunities to apply it.
An aside on big data and what it means to compare classification accuracies: Let's look again at how our neural network's accuracy varies with training set size in the logarithmic graph above. Suppose that instead of using a neural network we use some other machine learning technique to classify digits. For instance, let's try using the support vector machines (SVM). Don't worry if you're not familiar with SVMs, we don't need to understand their details right now. Instead, we'll use the SVM supplied by the scikit-learn library. Here's how SVM performance varies as a function of training set size. I've plotted the neural net results as well, to make comparison easy in the final graph above.
Probably the first thing that strikes you about this graph is that our neural network outperforms the SVM for every training set size. That's nice, although you shouldn't read too much into it, since I just used the out-of-the-box settings from scikit-learn's SVM, while we've done a fair bit of work improving our neural network. A more subtle but more interesting fact about the graph is that if we train our SVM using 50,000 images then it actually has better performance (94.48 percent accuracy) than our neural network does when trained using 5,000 images (93.24 percent accuracy). In other words, more training data can sometimes compensate for differences in the machine learning algorithm used.
Something even more interesting can occur. Suppose we're trying to solve a problem using two machine learning algorithms, algorithm A and algorithm B. It sometimes happens that algorithm A will outperform algorithm B with one set of training data, while algorithm B will outperform algorithm A with a different set of training data. We don't see that above - it would require the two graphs to cross - but it does happen**[9]**. The correct response to the question "Is algorithm A better than algorithm B?" is really: "What training data set are you using?"
All this is a caution to keep in mind, both when doing development, and when reading research papers. Many papers focus on finding new tricks to wring out improved performance on standard benchmark data sets. "Our whiz-bang technique gave us an improvement of X percent on standard benchmark Y" is a canonical form of research claim. Such claims are often genuinely interesting, but they must be understood as applying only in the context of the specific training data set used. Imagine an alternate history in which the people who originally created the benchmark data set had a larger research grant. They might have used the extra money to collect more training data. It's entirely possible that the "improvement" due to the whiz-bang technique would disappear on a larger data set. In other words, the purported improvement might be just an accident of history. The message to take away, especially in practical applications, is that what we want is both better algorithms and better training data. It's fine to look for better algorithms, but make sure you're not focusing on better algorithms to the exclusion of easy wins getting more or better training data.
Summing up: We've now completed our dive into overfitting and
regularization. Of course, we'll return again to the issue. As I've
mentioned several times, overfitting is a major problem in neural
networks, especially as computers get more powerful, and we have the
ability to train larger networks. As a result there's a pressing need to
develop powerful regularization techniques to reduce overfitting, and
this is an extremely active area of current work.
References:
8. Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis, by Patrice Simard, Dave Steinkraus, and John Platt (2003).
9. Striking examples may be found in Scaling to very very large corpora for natural language disambiguation, by Michele Banko and Eric Brill (2001).
Weight Initialization¶
When we create our neural networks, we have to make choices for the initial weights and biases. Traditionally, weights and biases are initialized as independent Gaussian random variables with mean $0$ and standard deviation $1$. While this method has worked, it is ad hoc and can slow learning, particularly when neurons saturate, i.e., their activations are very close to $0$ or $1$. It turns out that we can do quite a bit better than initializing with normalized Gaussians.
Using an example of a neural network with $\text{1,000}$ input neurons, initializing weights with normalized Gaussians leads to a wide (very broad) distribution for the weighted sum of inputs, causing the neuron to saturate. Saturation makes weight changes have a minimal impact on neuron activations, which leads to slow learning during gradient descent.
To address this, we can initialize the weights as Gaussian random variables that have a mean of $0$ and a standard deviation of $1/\sqrt{n_{\text{in}}}$, where $n_{\text{in}}$ is the number of input weights. This reduces the likelihood of saturation, leading to faster learning. The biases remain initialized as Gaussians with a mean of $0$ and a standard deviation of $1$. This method results in a more tightly distributed (sharply peaked) Gaussian for the weighted sum, making the neuron less likely to saturate and avoiding a learning slowdown.
Proper weight initialization is crucial for preventing saturation and improving learning speed in neural networks.
# @title
"""weight_initialization
~~~~~~~~~~~~~~~~~~~~~~~~
This program shows how weight initialization affects training. In
particular, we'll plot out how the classification accuracies improve
using either large starting weights, whose standard deviation is 1, or
the default starting weights, whose standard deviation is 1 over the
square root of the number of input neurons.
"""
# Standard library
import json
import random
import sys
# My library
sys.path.append('../src/')
import mnist_loader
# import network2
# Third-party libraries
import matplotlib.pyplot as plt
import numpy as np
def main(filename, n, eta):
run_network(filename, n, eta)
make_plot(filename)
def run_network(filename, n, eta):
"""Train the network using both the default and the large starting
weights. Store the results in the file with name ``filename``,
where they can later be used by ``make_plots``.
"""
# Make results more easily reproducible
random.seed(12345678)
np.random.seed(12345678)
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
validation_data = list(validation_data)
test_data = list(test_data)
net = Network2mat([784, n, 10], cost=CrossEntropyCost)
print("Train the network using the default starting weights.")
default_vc, default_va, default_tc, default_ta \
= net.SGD(training_data, 30, 10, eta, lmbda=5.0,
evaluation_data=validation_data,
monitor_evaluation_accuracy=True)
print("Train the network using the large starting weights.")
net.large_weight_initializer()
large_vc, large_va, large_tc, large_ta \
= net.SGD(training_data, 30, 10, eta, lmbda=5.0,
evaluation_data=validation_data,
monitor_evaluation_accuracy=True)
f = open(filename, "w")
json.dump({"default_weight_initialization":
[default_vc, default_va, default_tc, default_ta],
"large_weight_initialization":
[large_vc, large_va, large_tc, large_ta]},
f)
f.close()
def make_plot(filename):
"""Load the results from the file ``filename``, and generate the
corresponding plot.
"""
f = open(filename, "r")
results = json.load(f)
f.close()
default_vc, default_va, default_tc, default_ta = results[
"default_weight_initialization"]
large_vc, large_va, large_tc, large_ta = results[
"large_weight_initialization"]
# Convert raw classification numbers to percentages, for plotting
default_va = [x/100.0 for x in default_va]
large_va = [x/100.0 for x in large_va]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(0, 30, 1), large_va, color='#2A6EA6',
label="Old approach to weight initialization")
ax.plot(np.arange(0, 30, 1), default_va, color='#FFA933',
label="New approach to weight initialization")
ax.set_xlim([0, 30])
ax.set_xlabel('Epoch')
ax.set_ylim([85, 100])
ax.set_title('Classification accuracy')
plt.legend(loc="lower right")
plt.show()
if __name__ == "__main__":
main("weight_initialization_30.json", 30, 0.1)
main("weight_initialization_100.json", 100, 0.1)
Train the network using the default starting weights. Epoch 0 training complete Accuracy on evaluation data: 9267 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9391 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9437 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9514 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9538 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9528 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9550 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9558 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9561 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9578 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9595 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9606 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9608 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9607 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9610 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9622 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9611 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9622 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9639 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9623 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9621 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9638 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9637 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9634 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9640 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9644 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9644 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9637 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9638 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9649 / 10000 Train the network using the large starting weights. Epoch 0 training complete Accuracy on evaluation data: 8740 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9039 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9172 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9255 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9325 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9392 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9399 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9422 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9440 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9471 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9490 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9520 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9533 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9526 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9555 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9542 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9569 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9591 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9584 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9568 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9586 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9601 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9574 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9598 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9613 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9587 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9604 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9619 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9630 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9630 / 10000
Train the network using the default starting weights. Epoch 0 training complete Accuracy on evaluation data: 9305 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9479 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9538 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9631 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9662 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9672 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9694 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9705 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9713 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9724 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9737 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9743 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9746 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9748 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9767 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9763 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9763 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9757 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9767 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9771 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9774 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9774 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9774 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9776 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9781 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9775 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9779 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9763 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9778 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9784 / 10000 Train the network using the large starting weights. Epoch 0 training complete Accuracy on evaluation data: 9001 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9167 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9319 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9347 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9423 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9469 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9520 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9536 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9556 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9589 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9596 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9623 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9624 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9649 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9666 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9675 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9673 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9689 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9695 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9688 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9687 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9716 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9702 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9706 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9719 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9728 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9732 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9734 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9743 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9734 / 10000
I stated above that we'll continue to initialize the biases as before, as Gaussian random variables with a mean of $0$ and a standard deviation of $1$. This is okay, because it doesn't make it too much more likely that our neurons will saturate. In fact, it doesn't much matter how we initialize the biases, provided we avoid the problem with saturation. Some people go so far as to initialize all the biases to $0$, and rely on gradient descent to learn appropriate biases. But since it's unlikely to make much difference, we'll continue with the same initialization procedure as before.
Let's compare the results for both our old and new approaches to weight initialization, using the MNIST digit classification task
make_plot("/content/weight_initialization_30.json")
make_plot("/content/weight_initialization_100.json")
In both cases in the plots above, we end up with a classification accuracy somewhat over $96\%$. The final classification accuracy is almost exactly the same in the two cases. But the new initialization technique brings us there much, much faster. At the end of the first epoch of training the old approach to weight initialization has a classification accuracy under $87\%$, while the new approach is already almost $93\%$. Our new approach to weight initialization starts us off in a much better regime, which lets us get good results much more quickly.
The same phenomenon is also seen if we plot results with $100$ hidden neurons.In this case, the two curves don't quite meet. However, my experiments suggest that with just a few more epochs of training (not shown) the accuracies become almost exactly the same. So on the basis of these experiments it looks as though the improved weight initialization only speeds up learning, it doesn't change the final performance of our networks. However, in Chapter 4 we'll see examples of neural networks where the long-run behaviour is significantly better with the $1/\sqrt{n_{\rm in}}$ weight initialization. Thus it's not only the speed of learning which is improved, it's sometimes also the final performance.
The $1/\sqrt{n_{\rm in}}$ approach to weight initialization helps
improve the way our neural nets learn. Other techniques for weight
initialization have also been proposed, many building on this basic
idea. I won't review the other approaches here, since $1/\sqrt{n_{\rm in}}$ works well enough for our purposes. If you're interested in looking further, I recommend looking at the discussion on pages 14 and 15 of a 2012 paper by Yoshua Bengio**[10]**, as well as the references therein.
References:
10. Practical Recommendations for Gradient-Based Training of Deep
Architectures, by Yoshua Bengio
(2012).
%%time
# Load data
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
test_data = list(test_data)
# Initialize and train network
net = Network2mat([784, 30, 10], cost=CrossEntropyCost, reg='l1')
net.SGD(training_data, 30, 10, 0.5, evaluation_data=test_data, monitor_evaluation_accuracy=True)
Epoch 0 training complete Accuracy on evaluation data: 9433 / 10000 Epoch 1 training complete Accuracy on evaluation data: 9478 / 10000 Epoch 2 training complete Accuracy on evaluation data: 9468 / 10000 Epoch 3 training complete Accuracy on evaluation data: 9506 / 10000 Epoch 4 training complete Accuracy on evaluation data: 9495 / 10000 Epoch 5 training complete Accuracy on evaluation data: 9526 / 10000 Epoch 6 training complete Accuracy on evaluation data: 9523 / 10000 Epoch 7 training complete Accuracy on evaluation data: 9530 / 10000 Epoch 8 training complete Accuracy on evaluation data: 9572 / 10000 Epoch 9 training complete Accuracy on evaluation data: 9531 / 10000 Epoch 10 training complete Accuracy on evaluation data: 9597 / 10000 Epoch 11 training complete Accuracy on evaluation data: 9565 / 10000 Epoch 12 training complete Accuracy on evaluation data: 9568 / 10000 Epoch 13 training complete Accuracy on evaluation data: 9576 / 10000 Epoch 14 training complete Accuracy on evaluation data: 9553 / 10000 Epoch 15 training complete Accuracy on evaluation data: 9570 / 10000 Epoch 16 training complete Accuracy on evaluation data: 9548 / 10000 Epoch 17 training complete Accuracy on evaluation data: 9542 / 10000 Epoch 18 training complete Accuracy on evaluation data: 9535 / 10000 Epoch 19 training complete Accuracy on evaluation data: 9575 / 10000 Epoch 20 training complete Accuracy on evaluation data: 9560 / 10000 Epoch 21 training complete Accuracy on evaluation data: 9600 / 10000 Epoch 22 training complete Accuracy on evaluation data: 9546 / 10000 Epoch 23 training complete Accuracy on evaluation data: 9586 / 10000 Epoch 24 training complete Accuracy on evaluation data: 9545 / 10000 Epoch 25 training complete Accuracy on evaluation data: 9540 / 10000 Epoch 26 training complete Accuracy on evaluation data: 9574 / 10000 Epoch 27 training complete Accuracy on evaluation data: 9563 / 10000 Epoch 28 training complete Accuracy on evaluation data: 9585 / 10000 Epoch 29 training complete Accuracy on evaluation data: 9576 / 10000 CPU times: user 1min 52s, sys: 28.7 s, total: 2min 21s Wall time: 2min 2s
([], [9433, 9478, 9468, 9506, 9495, 9526, 9523, 9530, 9572, 9531, 9597, 9565, 9568, 9576, 9553, 9570, 9548, 9542, 9535, 9575, 9560, 9600, 9546, 9586, 9545, 9540, 9574, 9563, 9585, 9576], [], [])
Fully Matrix-Based Backprop (n_hidden = 30) with L1 regularization: 95.76% Accuracy¶
How to choose a NN's hyperparameters?¶
The section discusses strategies for choosing neural network hyper-parameters like learning rate (η), regularization parameter (λ), and others, which can be challenging without prior experience. Initially, hyper-parameter selection may seem random, leading to poor results such as training a network that fails to learn and behaves like random noise. To address this, the author suggests:
Simplify the Problem: Begin with a simpler task, like classifying fewer classes (e.g., distinguishing only 0s and 1s in the MNIST dataset). This reduces the dataset size and speeds up training, allowing faster experimentation.
Simplify the Network: Start with a simpler network architecture, such as using fewer hidden layers or neurons, and gradually build complexity.
Increase Monitoring Frequency: Instead of waiting until the end of each epoch to monitor performance, evaluate after smaller chunks of training data to get faster feedback, enabling quicker experimentation with different hyper-parameters.
Iterate Methodically: Adjust each hyper-parameter systematically. For example, after improving the learning rate, focus on regularization, architecture, and other parameters step-by-step.
Early Stage Quick Feedback: Prioritize quick experimentation in the early stages, even if it means simplifying the architecture or problem. The goal is to get any meaningful learning before fine-tuning for better performance.
The section concludes that finding good hyper-parameters takes time and patience, and getting started with meaningful learning is the hardest part. Once a signal is established, further tweaks and improvements can be made more efficiently.
Guide to Choosing Neural Network Hyper-parameters¶
Introduction¶
- Selecting appropriate hyper-parameters for neural networks can be challenging
- Poor choices can lead to random noise generation instead of learning
Broad Strategy¶
- Start by achieving any non-trivial learning (better than chance)
- Simplify the problem:
- Reduce dataset size (e.g., use only $0$s and $1$s for MNIST)
- Use a simpler network architecture
- Increase monitoring frequency:
- Check performance more often (e.g., every $\text{1,000}%$ training images)
- Use a smaller validation set for quicker estimates
Experimental Approach¶
- Start with a simplified setup
- Adjust one hyper-parameter at a time
- Monitor performance using held-out validation data
- Gradually increase complexity and dataset size
Key Hyper-parameters to Focus On¶
- Learning rate ($\eta$)
- Regularization parameter ($\lambda$)
- Mini-batch size ($m$)
Tips¶
- Ensure quick feedback from experiments in the early stages
- Simplifying the problem and architecture can lead to faster progress
- Be patient and persistent, as finding the right hyper-parameters can take time
- Gradually decrease monitoring frequency as you fine-tune hyper-parameters
Conclusion¶
Finding the right hyper-parameters is an iterative process that requires experimentation and patience. Starting with a simplified problem and gradually increasing complexity can help in achieving meaningful learning more quickly.
"""multiple_eta
~~~~~~~~~~~~~~~
This program shows how different values for the learning rate affect
training. In particular, we'll plot out how the cost changes using
three different values for eta.
"""
# Standard library
import json
import random
import sys
# My library
sys.path.append('../src/')
import mnist_loader
# import network2
# Third-party libraries
import matplotlib.pyplot as plt
import numpy as np
# Constants
LEARNING_RATES = [0.025, 0.25, 2.5]
COLORS = ['#2A6EA6', '#FFCD33', '#FF7033']
NUM_EPOCHS = 30
def main():
run_networks()
make_plot()
def run_networks():
"""Train networks using three different values for the learning rate,
and store the cost curves in the file ``multiple_eta.json``, where
they can later be used by ``make_plot``.
"""
# Make results more easily reproducible
random.seed(12345678)
np.random.seed(12345678)
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# Convert data to lists
training_data = list(training_data)
validation_data = list(validation_data)
test_data = list(test_data)
results = []
for eta in LEARNING_RATES:
print("\nTrain a network using eta = "+str(eta))
net = Network2mat([784, 30, 10])
results.append(
net.SGD(training_data, NUM_EPOCHS, 10, eta, lmbda=5.0,
evaluation_data=validation_data,
monitor_training_cost=True))
f = open("multiple_eta.json", "w")
json.dump(results, f)
f.close()
def make_plot():
f = open("multiple_eta.json", "r")
results = json.load(f)
f.close()
fig = plt.figure()
ax = fig.add_subplot(111)
for eta, result, color in zip(LEARNING_RATES, results, COLORS):
_, _, training_cost, _ = result
ax.plot(np.arange(NUM_EPOCHS), training_cost, "o-",
label="$\eta$ = "+str(eta),
color=color)
ax.set_xlim([0, NUM_EPOCHS])
ax.set_xlabel('Epoch')
ax.set_ylabel('Cost')
plt.legend(loc='upper right')
plt.show()
if __name__ == "__main__":
main()
Train a network using eta = 0.025 Epoch 0 training complete Cost on training data: 0.8770331897602134 Epoch 1 training complete Cost on training data: 0.6800202379930531 Epoch 2 training complete Cost on training data: 0.6013079806061424 Epoch 3 training complete Cost on training data: 0.5527053739105007 Epoch 4 training complete Cost on training data: 0.5179543849384399 Epoch 5 training complete Cost on training data: 0.4955397040294193 Epoch 6 training complete Cost on training data: 0.4745554137439946 Epoch 7 training complete Cost on training data: 0.4587896115016323 Epoch 8 training complete Cost on training data: 0.4444038098998699 Epoch 9 training complete Cost on training data: 0.4317001615800511 Epoch 10 training complete Cost on training data: 0.42276045930292666 Epoch 11 training complete Cost on training data: 0.41366345768044344 Epoch 12 training complete Cost on training data: 0.4052121487359579 Epoch 13 training complete Cost on training data: 0.4011762531301635 Epoch 14 training complete Cost on training data: 0.39208573758375054 Epoch 15 training complete Cost on training data: 0.38782297744898403 Epoch 16 training complete Cost on training data: 0.38282400824016694 Epoch 17 training complete Cost on training data: 0.3761222504114732 Epoch 18 training complete Cost on training data: 0.373326247673892 Epoch 19 training complete Cost on training data: 0.3707198539121999 Epoch 20 training complete Cost on training data: 0.3676077879858481 Epoch 21 training complete Cost on training data: 0.3627197104918224 Epoch 22 training complete Cost on training data: 0.359770388374952 Epoch 23 training complete Cost on training data: 0.36024706957392433 Epoch 24 training complete Cost on training data: 0.3546841872005115 Epoch 25 training complete Cost on training data: 0.3505525396970845 Epoch 26 training complete Cost on training data: 0.34908251185091005 Epoch 27 training complete Cost on training data: 0.34976387165142 Epoch 28 training complete Cost on training data: 0.34525207515323214 Epoch 29 training complete Cost on training data: 0.3434612543680221 Train a network using eta = 0.25 Epoch 0 training complete Cost on training data: 0.4837516024444846 Epoch 1 training complete Cost on training data: 0.4425375562096384 Epoch 2 training complete Cost on training data: 0.38821105445071585 Epoch 3 training complete Cost on training data: 0.3848554310323614 Epoch 4 training complete Cost on training data: 0.3689079931901275 Epoch 5 training complete Cost on training data: 0.35680467532721527 Epoch 6 training complete Cost on training data: 0.3531395937702067 Epoch 7 training complete Cost on training data: 0.3621633254668532 Epoch 8 training complete Cost on training data: 0.3422049808557279 Epoch 9 training complete Cost on training data: 0.3510130610748645 Epoch 10 training complete Cost on training data: 0.34592115896265 Epoch 11 training complete Cost on training data: 0.3516460058684411 Epoch 12 training complete Cost on training data: 0.3425555289441641 Epoch 13 training complete Cost on training data: 0.33214138873660676 Epoch 14 training complete Cost on training data: 0.3303001208079793 Epoch 15 training complete Cost on training data: 0.33926913160117556 Epoch 16 training complete Cost on training data: 0.3470145604521435 Epoch 17 training complete Cost on training data: 0.33410043985957644 Epoch 18 training complete Cost on training data: 0.32379859633231783 Epoch 19 training complete Cost on training data: 0.33143473734499795 Epoch 20 training complete Cost on training data: 0.33939467389087663 Epoch 21 training complete Cost on training data: 0.3315227602386052 Epoch 22 training complete Cost on training data: 0.33941168857525206 Epoch 23 training complete Cost on training data: 0.3244202623356884 Epoch 24 training complete Cost on training data: 0.32137496383030506 Epoch 25 training complete Cost on training data: 0.3444015102464981 Epoch 26 training complete Cost on training data: 0.3189434147710474 Epoch 27 training complete Cost on training data: 0.3265885067082064 Epoch 28 training complete Cost on training data: 0.3243196459654086 Epoch 29 training complete Cost on training data: 0.33682509182487597 Train a network using eta = 2.5 Epoch 0 training complete Cost on training data: 0.8704860427795891 Epoch 1 training complete Cost on training data: 0.8378201807565109 Epoch 2 training complete Cost on training data: 0.8357597543081385 Epoch 3 training complete Cost on training data: 0.8030169683974442 Epoch 4 training complete Cost on training data: 0.7609997844869193 Epoch 5 training complete Cost on training data: 0.7810435180893391 Epoch 6 training complete Cost on training data: 0.7843999962934751 Epoch 7 training complete Cost on training data: 0.8073463329326707 Epoch 8 training complete Cost on training data: 0.7596941141589468 Epoch 9 training complete Cost on training data: 0.7729554594197052 Epoch 10 training complete Cost on training data: 0.8264344798208973 Epoch 11 training complete Cost on training data: 0.8280576013224166 Epoch 12 training complete Cost on training data: 0.7363904309525556 Epoch 13 training complete Cost on training data: 0.7776189718823248 Epoch 14 training complete Cost on training data: 0.8829167668135711 Epoch 15 training complete Cost on training data: 0.8101941700673816 Epoch 16 training complete Cost on training data: 0.7489392673140054 Epoch 17 training complete Cost on training data: 0.8679774972931549 Epoch 18 training complete Cost on training data: 0.7424915984894183 Epoch 19 training complete Cost on training data: 0.9238272263101148 Epoch 20 training complete Cost on training data: 0.8416209003383086 Epoch 21 training complete Cost on training data: 0.7787935992188466 Epoch 22 training complete Cost on training data: 0.803045572771393 Epoch 23 training complete Cost on training data: 0.7687473380737608 Epoch 24 training complete Cost on training data: 0.848359845940096 Epoch 25 training complete Cost on training data: 0.861285966451833 Epoch 26 training complete Cost on training data: 0.8173613562148566 Epoch 27 training complete Cost on training data: 0.7514922662388354 Epoch 28 training complete Cost on training data: 0.8522702949192857 Epoch 29 training complete Cost on training data: 0.8207342717199184
Learning rate: Suppose we run three MNIST networks with three different learning rates, $\eta = 0.025$, $\eta = 0.25$ and $\eta = 2.5$, respectively. We'll set the other hyper-parameters as for the experiments in earlier sections, running over 30 epochs, with a mini-batch size of 10, and with $\lambda = 5.0$. We'll also return to using the full $50,000$ training images.
make_plot()
With $\eta = 0.025$ the cost decreases smoothly until the final epoch. With $\eta = 0.25$ the cost initially decreases, but after about $20$ epochs it is near saturation, and thereafter most of the changes are merely small and apparently random oscillations. Finally, with $\eta = 2.5$ the cost makes large oscillations right from the start. To understand the reason for the oscillations, recall that stochastic gradient descent is supposed to step us gradually down into a valley of the cost function,

However, if $\eta$ is too large then the steps will be so large that they may actually overshoot the minimum, causing the algorithm to climb up out of the valley instead. That's likely**[11]** what's causing the cost to oscillate when $\eta = 2.5$. When we choose $\eta = 0.25$ the initial steps do take us toward a minimum of the cost function, and it's only once we get near that minimum that we start to suffer from the overshooting problem. And when we choose $\eta = 0.025$ we don't suffer from this problem at all during the first $30$ epochs. Of course, choosing $\eta$ so small creates another problem, namely, that it slows down stochastic gradient descent. An even better approach would be to start with $\eta = 0.25$, train for $20$ epochs, and then switch to $\eta = 0.025$. We'll discuss such variable learning rate schedules later. For now, though, let's stick to figuring out how to find a single good value for the learning rate, $\eta$.
With this picture in mind, we can set $\eta$ as follows. First, we estimate the threshold value for $\eta$ at which the cost on the training data immediately begins decreasing, instead of oscillating or increasing. This estimate doesn't need to be too accurate. You can estimate the order of magnitude by starting with $\eta = 0.01$. If the cost decreases during the first few epochs, then you should successively try $\eta = 0.1, 1.0, \ldots$ until you find a value for $\eta$ where the cost oscillates or increases during the first few epochs. Alternately, if the cost oscillates or increases during the first few epochs when $\eta = 0.01$, then try $\eta = 0.001, 0.0001, \ldots$ until you find a value for $\eta$ where the cost decreases during the first few epochs. Following this procedure will give us an order of magnitude estimate for the threshold value of $\eta$. You may optionally refine your estimate, to pick out the largest value of $\eta$ at which the cost decreases during the first few epochs, say $\eta = 0.5$ or $\eta = 0.2$ (there's no need for this to be super-accurate). This gives us an estimate for the threshold value of $\eta$.
Obviously, the actual value of $\eta$ that you use should be no larger than the threshold value. In fact, if the value of $\eta$ is to remain usable over many epochs then you likely want to use a value for $\eta$ that is smaller, say, a factor of two below the threshold. Such a choice will typically allow you to train for many epochs, without causing too much of a slowdown in learning.
In the case of the MNIST data, following this strategy leads to an estimate of $0.1$ for the order of magnitude of the threshold value of $\eta$. After some more refinement, we obtain a threshold value $\eta = 0.5$. Following the prescription above, this suggests using $\eta = 0.25$ as our value for the learning rate. In fact, I found that using $\eta = 0.5$ worked well enough over $30$ epochs that for the most part I didn't worry about using a lower value of $\eta$.
This all seems quite straightforward. However, using the training cost to pick $\eta$ appears to contradict what I said earlier in this section, namely, that we'd pick hyper-parameters by evaluating performance using our held-out validation data. In fact, we'll use validation accuracy to pick the regularization hyper-parameter, the mini-batch size, and network parameters such as the number of layers and hidden neurons, and so on. Why do things differently for the learning rate? Frankly, this choice is my personal aesthetic preference, and is perhaps somewhat idiosyncratic. The reasoning is that the other hyper-parameters are intended to improve the final classification accuracy on the test set, and so it makes sense to select them on the basis of validation accuracy. However, the learning rate is only incidentally meant to impact the final classification accuracy. Its primary purpose is really to control the step size in gradient descent, and monitoring the training cost is the best way to detect if the step size is too big. With that said, this is a personal aesthetic preference. Early on during learning the training cost usually only decreases if the validation accuracy improves, and so in practice it's unlikely to make much difference which criterion you use.
Use early stopping to determine the number of training epochs: As we discussed earlier in the chapter, early stopping means that at the end of each epoch we should compute the classification accuracy on the validation data. When that stops improving, terminate. This makes setting the number of epochs very simple. In particular, it means that we don't need to worry about explicitly figuring out how the number of epochs depends on the other hyper-parameters. Instead, that's taken care of automatically. Furthermore, early stopping also automatically prevents us from overfitting. This is, of course, a good thing, although in the early stages of experimentation it can be helpful to turn off early stopping, so you can see any signs of overfitting, and use it to inform your approach to regularization.
To implement early stopping we need to say more precisely what it means that the classification accuracy has stopped improving. As we've seen, the accuracy can jump around quite a bit, even when the overall trend is to improve. If we stop the first time the accuracy decreases then we'll almost certainly stop when there are more improvements to be had. A better rule is to terminate if the best classification accuracy doesn't improve for quite some time. Suppose, for example, that we're doing MNIST. Then we might elect to terminate if the classification accuracy hasn't improved during the last ten epochs. This ensures that we don't stop too soon, in response to bad luck in training, but also that we're not waiting around forever for an improvement that never comes.
This no-improvement-in-ten rule is good for initial exploration of MNIST. However, networks can sometimes plateau near a particular classification accuracy for quite some time, only to then begin improving again. If you're trying to get really good performance, the no-improvement-in-ten rule may be too aggressive about stopping. In that case, I suggest using the no-improvement-in-ten rule for initial experimentation, and gradually adopting more lenient rules, as you better understand the way your network trains: no-improvement-in-twenty, no-improvement-in-fifty, and so on. Of course, this introduces a new hyper-parameter to optimize! In practice, however, it's usually easy to set this hyper-parameter to get pretty good results. Similarly, for problems other than MNIST, the no-improvement-in-ten rule may be much too aggressive or not nearly aggressive enough, depending on the details of the problem. However, with a little experimentation it's usually easy to find a pretty good strategy for early stopping.
We haven't used early stopping in our MNIST experiments to date. The
reason is that we've been doing a lot of comparisons between different
approaches to learning. For such comparisons it's helpful to use the
same number of epochs in each case. However, it's well worth modifying
Network2mat to implement early stopping.
Learning rate schedule: We've been holding the learning rate $\eta$ constant. However, it's often advantageous to vary the learning rate. Early on during the learning process it's likely that the weights are badly wrong. And so it's best to use a large learning rate that causes the weights to change quickly. Later, we can reduce the learning rate as we make more fine-tuned adjustments to our weights.
How should we set our learning rate schedule? Many approaches are possible. One natural approach is to use the same basic idea as early stopping. The idea is to hold the learning rate constant until the validation accuracy starts to get worse. Then decrease the learning rate by some amount, say a factor of two or ten. We repeat this many times, until, say, the learning rate is a factor of 1,024 (or 1,000) times lower than the initial value. Then we terminate.
A variable learning schedule can improve performance, but it also opens up a world of possible choices for the learning schedule. Those choices can be a headache - you can spend forever trying to optimize your learning schedule. For first experiments my suggestion is to use a single, constant value for the learning rate. That'll get you a good first approximation. Later, if you want to obtain the best performance from your network, it's worth experimenting with a learning schedule, along the lines I've described**[12]**.
The regularization parameter, $\lambda$: I suggest starting initially with no regularization ($\lambda = 0.0$), and determining a value for $\eta$, as above. Using that choice of $\eta$, we can then use the validation data to select a good value for $\lambda$. Start by trialing $\lambda = 1.0$ [13], and then increase or decrease by factors of $10$, as needed to improve performance on the validation data. Once you've found a good order of magnitude, you can fine tune your value of $\lambda$. That done, you should return and re-optimize $\eta$ again.
How I selected hyper-parameters earlier in this book: If you use the recommendations in this section you'll find that you get values for $\eta$ and $\lambda$ which don't always exactly match the values I've used earlier in the book. The reason is that the book has narrative constraints that have sometimes made it impractical to optimize the hyper-parameters. Think of all the comparisons we've made of different approaches to learning, e.g., comparing the quadratic and cross-entropy cost functions, comparing the old and new methods of weight initialization, running with and without regularization, and so on. To make such comparisons meaningful, I've usually tried to keep hyper-parameters constant across the approaches being compared (or to scale them in an appropriate way). Of course, there's no reason for the same hyper-parameters to be optimal for all the different approaches to learning, so the hyper-parameters I've used are something of a compromise.
As an alternative to this compromise, I could have tried to optimize the heck out of the hyper-parameters for every single approach to learning. In principle that'd be a better, fairer approach, since then we'd see the best from every approach to learning. However, we've made dozens of comparisons along these lines, and in practice I found it too computationally expensive. That's why I've adopted the compromise of using pretty good (but not necessarily optimal) choices for the hyper-parameters.
Mini-batch size: How should we set the mini-batch size? To answer this question, let's first suppose that we're doing online learning, i.e., that we're using a mini-batch size of $1$.
The obvious worry about online learning is that using mini-batches which contain just a single training example will cause significant errors in our estimate of the gradient. In fact, though, the errors turn out to not be such a problem. The reason is that the individual gradient estimates don't need to be super-accurate. All we need is an estimate accurate enough that our cost function tends to keep decreasing. It's as though you are trying to get to the North Magnetic Pole, but have a wonky compass that's 10-20 degrees off each time you look at it. Provided you stop to check the compass frequently, and the compass gets the direction right on average, you'll end up at the North Magnetic Pole just fine.
Based on this argument, it sounds as though we should use online learning. In fact, the situation turns out to be more complicated than that. In a problem in the last chapter I pointed out that it's possible to use matrix techniques to compute the gradient update for all examples in a mini-batch simultaneously, rather than looping over them. Depending on the details of your hardware and linear algebra library this can make it quite a bit faster to compute the gradient estimate for a mini-batch of (for example) size $100$, rather than computing the mini-batch gradient estimate by looping over the $100$ training examples separately. It might take (say) only $50$ times as long, rather than $100$ times as long.
Now, at first it seems as though this doesn't help us that much. With our mini-batch of size $100$ the learning rule for the weights looks like:
\begin{eqnarray} w \rightarrow w' = w-\eta \frac{1}{100} \sum_x \nabla C_x, \tag{15} \end{eqnarray}
where the sum is over training examples in the mini-batch. This is versus
\begin{eqnarray} w \rightarrow w' = w-\eta \nabla C_x \tag{16} \end{eqnarray}
for online learning. Even if it only takes $50$ times as long to do the mini-batch update, it still seems likely to be better to do online learning, because we'd be updating so much more frequently. Suppose, however, that in the mini-batch case we increase the learning rate by a factor $100$, so the update rule becomes
\begin{eqnarray} w \rightarrow w' = w-\eta \sum_x \nabla C_x. \tag{17} \end{eqnarray}
That's a lot like doing $100$ separate instances of online learning with a learning rate of $\eta$. But it only takes $50$ times as long as doing a single instance of online learning. Of course, it's not truly the same as $100$ instances of online learning, since in the mini-batch the $\nabla C_x$'s are all evaluated for the same set of weights, as opposed to the cumulative learning that occurs in the online case. Still, it seems distinctly possible that using the larger mini-batch would speed things up.
With these factors in mind, choosing the best mini-batch size is a compromise. Too small, and you don't get to take full advantage of the benefits of good matrix libraries optimized for fast hardware. Too large and you're simply not updating your weights often enough. What you need is to choose a compromise value which maximizes the speed of learning. Fortunately, the choice of mini-batch size at which the speed is maximized is relatively independent of the other hyper-parameters (apart from the overall architecture), so you don't need to have optimized those hyper-parameters in order to find a good mini-batch size. The way to go is therefore to use some acceptable (but not necessarily optimal) values for the other hyper-parameters, and then trial a number of different mini-batch sizes, scaling $\eta$ as above. Plot the validation accuracy versus time (as in, real elapsed time, not epoch!), and choose whichever mini-batch size gives you the most rapid improvement in performance. With the mini-batch size chosen you can then proceed to optimize the other hyper-parameters.
Of course, as you've no doubt realized, I haven't done this optimization in our work. Indeed, our implementation doesn't use the faster approach to mini-batch updates at all. I've simply used a mini-batch size of $10$ without comment or explanation in nearly all examples. Because of this, we could have sped up learning by reducing the mini-batch size. I haven't done this, in part because I wanted to illustrate the use of mini-batches beyond size $1$, and in part because my preliminary experiments suggested the speedup would be rather modest. In practical implementations, however, we would most certainly implement the faster approach to mini-batch updates, and then make an effort to optimize the mini-batch size, in order to maximize our overall speed.
Automated techniques: I've been describing these heuristics as though you're optimizing your hyper-parameters by hand. Hand-optimization is a good way to build up a feel for how neural networks behave. However, and unsurprisingly, a great deal of work has been done on automating the process. A common technique is grid search, which systematically searches through a grid in hyper-parameter space. A review of both the achievements and the limitations of grid search (with suggestions for easily-implemented alternatives) may be found in a 2012 paper**[14]** by James Bergstra and Yoshua Bengio. Many more sophisticated approaches have also been proposed. I won't review all that work here, but do want to mention a particularly promising 2012 paper which used a Bayesian approach to automatically optimize hyper-parameters**[15]**. The code from the paper is publicly available, and has been used with some success by other researchers.
Summing up: Following the rules-of-thumb I've described won't give you the absolute best possible results from your neural network. But it will likely give you a good start and a basis for further improvements. In particular, I've discussed the hyper-parameters largely independently. In practice, there are relationships between the hyper-parameters. You may experiment with $\eta$, feel that you've got it just right, then start to optimize for $\lambda$, only to find that it's messing up your optimization for $\eta$. In practice, it helps to bounce backward and forward, gradually closing in good values. Above all, keep in mind that the heuristics I've described are rules of thumb, not rules cast in stone. You should be on the lookout for signs that things aren't working, and be willing to experiment. In particular, this means carefully monitoring your network's behaviour, especially the validation accuracy.
The difficulty of choosing hyper-parameters is exacerbated by the fact that the lore about how to choose hyper-parameters is widely spread, across many research papers and software programs, and often is only available inside the heads of individual practitioners. There are many, many papers setting out (sometimes contradictory) recommendations for how to proceed. However, there are a few particularly useful papers that synthesize and distill out much of this lore. Yoshua Bengio has a 2012 paper**[16]** that gives some practical recommendations for using backpropagation and gradient descent to train neural networks, including deep neural nets. Bengio discusses many issues in much more detail than I have, including how to do more systematic hyper-parameter searches. Another good paper is a 1998 paper**[17]** by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller. Both these papers appear in an extremely useful 2012 book that collects many tricks commonly used in neural nets**[18]**. The book is expensive, but many of the articles have been placed online by their respective authors with, one presumes, the blessing of the publisher, and may be located using a search engine.
One thing that becomes clear as you read these articles and, especially, as you engage in your own experiments, is that hyper-parameter optimization is not a problem that is ever completely solved. There's always another trick you can try to improve performance. There is a saying common among writers that books are never finished, only abandoned. The same is also true of neural network optimization: the space of hyper-parameters is so large that one never really finishes optimizing, one only abandons the network to posterity. So your goal should be to develop a workflow that enables you to quickly do a pretty good job on the optimization, while leaving you the flexibility to try more detailed optimizations, if that's important.
The challenge of setting hyper-parameters has led some people to
complain that neural networks require a lot of work when compared with
other machine learning techniques. I've heard many variations on the
following complaint: "Yes, a well-tuned neural network may get the best
performance on the problem. On the other hand, I can try a random forest
[or SVM or$\ldots$ insert your own favorite technique] and it just
works. I don't have time to figure out just the right neural network."
Of course, from a practical point of view it's good to have
easy-to-apply techniques. This is particularly true when you're just
getting started on a problem, and it may not be obvious whether machine
learning can help solve the problem at all. On the other hand, if
getting optimal performance is important, then you may need to try
approaches that require more specialist knowledge. While it would be
nice if machine learning were always easy, there is no a priori reason
it should be trivially simple.
References:
11. This picture is helpful, but it's intended as an intuition-building
illustration of what may go on, not as a complete, exhaustive
explanation. Briefly, a more complete explanation is as follows:
gradient descent uses a first-order approximation to the cost function
as a guide to how to decrease the cost. For large $\eta$, higher-order
terms in the cost function become more important, and may dominate the
behaviour, causing gradient descent to break down. This is especially
likely as we approach minima and quasi-minima of the cost function,
since near such points the gradient becomes small, making it easier for
higher-order terms to dominate behaviour.
12. A readable recent paper which demonstrates the benefits of variable learning rates in attacking MNIST is Deep, Big, Simple Neural Nets Excel on
Handwritten Digit Recognition, by Dan
Claudiu Cireșan, Ueli Meier, Luca Maria Gambardella, and Jürgen
Schmidhuber (2010).
13. I don't have a good principled justification for using this as a starting value. If anyone knows of a good principled discussion of where to start with
$\lambda$, I'd appreciate hearing it (mn@michaelnielsen.org)
14. Random search for hyper-parameter optimization, by James Bergstra and Yoshua Bengio (2012).
15. Practical Bayesian optimization of machine learning algorithms,
by Jasper Snoek, Hugo Larochelle, and Ryan Adams.
16. Practical recommendations for gradient-based training of deep
architectures, by Yoshua Bengio (2012).
17. Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller (1998).
18. Neural Networks: Tricks of the Trade, edited by Grégoire Montavon, Geneviève Orr, and Klaus-Robert Müller.
# @title
"""network2mat2.py
~~~~~~~~~~~~~~
An improved version of network2mat.py, that adds early stopping.
"""
#### Main Network class
class Network2mat2(object):
def __init__(self, sizes, cost=CrossEntropyCost, reg='l2'):
self.num_layers = len(sizes)
self.sizes = sizes
self.default_weight_initializer()
self.cost = cost
self.reg = reg
def default_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)/np.sqrt(x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def large_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def feedforward(self, a):
"""Return the output of the network if ``a`` is input."""
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a)+b)
return a
def SGD(self, training_data, epochs, mini_batch_size, eta,
lmbda=0.0, evaluation_data=None,
monitor_evaluation_cost=False,
monitor_evaluation_accuracy=False,
monitor_training_cost=False,
monitor_training_accuracy=False,
early_stopping_n=10):
"""
Train the neural network using mini-batch stochastic gradient descent with
early stopping. Early stopping is triggered if the performance on the
evaluation data does not improve for 'early_stopping_n' consecutive epochs.
Parameters:
- early_stopping_n: The number of epochs to wait for improvement before stopping
"""
if evaluation_data:
n_data = len(list(evaluation_data))
n = len(list(training_data))
evaluation_cost, evaluation_accuracy = [], []
training_cost, training_accuracy = [], []
best_evaluation_accuracy = 0
best_evaluation_cost = float('inf')
epochs_without_improvement = 0
for j in range(epochs):
# Shuffle and create mini-batches
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
# Update weights and biases using each mini-batch
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta, lmbda, n)
print(f"Epoch {j} training complete")
# Monitor cost/accuracy if required
if monitor_training_cost:
cost = self.total_cost(training_data, lmbda)
training_cost.append(cost)
print(f"Cost on training data: {cost}")
if monitor_training_accuracy:
accuracy = self.accuracy(training_data, convert=True)
training_accuracy.append(accuracy)
print(f"Accuracy on training data: {accuracy} / {n}")
if monitor_evaluation_cost:
cost = self.total_cost(evaluation_data, lmbda, convert=True)
evaluation_cost.append(cost)
print(f"Cost on evaluation data: {cost}")
if monitor_evaluation_accuracy:
accuracy = self.accuracy(evaluation_data)
evaluation_accuracy.append(accuracy)
print(f"Accuracy on evaluation data: {accuracy} / {n_data}")
# Early stopping logic based on evaluation accuracy or cost
if monitor_evaluation_accuracy:
if accuracy > best_evaluation_accuracy:
best_evaluation_accuracy = accuracy
epochs_without_improvement = 0 # Reset counter if we see improvement
else:
epochs_without_improvement += 1
elif monitor_evaluation_cost:
if cost < best_evaluation_cost:
best_evaluation_cost = cost
epochs_without_improvement = 0 # Reset counter if we see improvement
else:
epochs_without_improvement += 1
# Check for early stopping condition
if epochs_without_improvement >= early_stopping_n:
print(f"Early stopping after {j+1} epochs due to no improvement for {early_stopping_n} epochs.")
break # Exit the training loop
return evaluation_cost, evaluation_accuracy, training_cost, training_accuracy
def update_mini_batch(self, mini_batch, eta, lmbda, n):
"""Update the network's weights and biases by applying gradient descent
using backpropagation to a single mini-batch."""
# Convert the mini-batch into matrix form
X = np.column_stack([x for x, y in mini_batch])
Y = np.column_stack([y for x, y in mini_batch])
# Perform forward and backward passes
nabla_b, nabla_w = self.backprop_matrix(X, Y)
# Update weights and biases using gradient descent and L1 or L2 regularization
if self.reg == 'l2':
self.weights = [(1 - eta * (lmbda/n)) * w - (eta/len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
elif self.reg == 'l1':
self.weights = [w - (eta * (lmbda/n)) * np.sign(w) - (eta / len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b - (eta / len(mini_batch)) * nb
for b, nb in zip(self.biases, nabla_b)]
def backprop_matrix(self, X, Y):
"""Matrix-based backpropagation for a mini-batch."""
# Initialize gradients
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# Step 1: Forward pass
activation = X
activations = [X] # Store all activations layer by layer
zs = [] # Store all z vectors layer by layer
# Feedforward step through all layers
for b, w in zip(self.biases, self.weights):
z = np.dot(w, activation) + b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# Step 2: Backward pass
# Compute delta at the output layer
delta = self.cost.delta(zs[-1], activations[-1], Y)
# Gradients for the output layer
nabla_b[-1] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-1] = np.dot(delta, activations[-2].T)
# Backpropagate through previous layers
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].T, delta) * sp
nabla_b[-l] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-l] = np.dot(delta, activations[-l-1].T)
return (nabla_b, nabla_w)
def accuracy(self, data, convert=False):
if convert:
results = [(np.argmax(self.feedforward(x)), np.argmax(y))
for (x, y) in data]
else:
results = [(np.argmax(self.feedforward(x)), y)
for (x, y) in data]
return sum(int(x == y) for (x, y) in results)
def total_cost(self, data, lmbda, convert=False):
cost = 0.0
for x, y in data:
a = self.feedforward(x)
if convert: y = vectorized_result(y)
cost += self.cost.fn(a, y)/len(data)
if self.reg == 'l2':
cost += 0.5*(lmbda/len(data))*sum(np.linalg.norm(w)**2 for w in self.weights)
elif self.reg == 'l1':
cost += (lmbda/len(data))*sum(np.linalg.norm(w, ord=1) for w in self.weights)
return cost
def save(self, filename):
"""Save the neural network to the file ``filename``."""
data = {"sizes": self.sizes,
"weights": [w.tolist() for w in self.weights],
"biases": [b.tolist() for b in self.biases],
"cost": str(self.cost.__name__)}
f = open(filename, "w")
json.dump(data, f)
f.close()
# @title
"""network2mat3.py
~~~~~~~~~~~~~~
An improved version of network2mat2.py, that adds
New Early Stopping Rule: Relative Improvement Below Threshold.
"""
#### Main Network class
class Network2mat3(object):
def __init__(self, sizes, cost=CrossEntropyCost, reg='l2'):
self.num_layers = len(sizes)
self.sizes = sizes
self.default_weight_initializer()
self.cost = cost
self.reg = reg
def default_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)/np.sqrt(x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def large_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
def feedforward(self, a):
"""Return the output of the network if ``a`` is input."""
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a)+b)
return a
def SGD(self, training_data, epochs, mini_batch_size, eta,
lmbda=0.0, evaluation_data=None,
monitor_evaluation_cost=False,
monitor_evaluation_accuracy=False,
monitor_training_cost=False,
monitor_training_accuracy=False,
early_stopping_n=10, relative_improvement_threshold=0.01):
"""
Train the neural network using mini-batch stochastic gradient descent with
early stopping. There are two stopping criteria:
- No-improvement-in-n: Stop if there is no improvement in performance for `n` epochs.
- Relative improvement threshold: Stop if the improvement is smaller than the threshold.
Parameters:
- early_stopping_n: The number of epochs to wait for improvement before stopping.
- relative_improvement_threshold: The minimum relative improvement required between epochs.
"""
if evaluation_data:
n_data = len(list(evaluation_data))
n = len(list(training_data))
evaluation_cost, evaluation_accuracy = [], []
training_cost, training_accuracy = [], []
best_evaluation_accuracy = 0
best_evaluation_cost = float('inf')
epochs_without_improvement = 0
previous_accuracy = 0
previous_cost = float('inf')
for j in range(epochs):
# Shuffle and create mini-batches
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
# Update weights and biases using each mini-batch
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta, lmbda, n)
print(f"Epoch {j} training complete")
# Monitor cost/accuracy if required
if monitor_training_cost:
cost = self.total_cost(training_data, lmbda)
training_cost.append(cost)
print(f"Cost on training data: {cost}")
if monitor_training_accuracy:
accuracy = self.accuracy(training_data, convert=True)
training_accuracy.append(accuracy)
print(f"Accuracy on training data: {accuracy} / {n}")
if monitor_evaluation_cost:
cost = self.total_cost(evaluation_data, lmbda, convert=True)
evaluation_cost.append(cost)
print(f"Cost on evaluation data: {cost}")
if monitor_evaluation_accuracy:
accuracy = self.accuracy(evaluation_data)
evaluation_accuracy.append(accuracy)
print(f"Accuracy on evaluation data: {accuracy} / {n_data}")
# Early stopping logic based on no-improvement-in-n or relative improvement
if monitor_evaluation_accuracy:
relative_improvement = abs((accuracy - previous_accuracy) / (previous_accuracy + 1e-8)) # avoid division by zero
if accuracy > best_evaluation_accuracy:
best_evaluation_accuracy = accuracy
epochs_without_improvement = 0 # Reset counter if we see improvement
else:
epochs_without_improvement += 1
# Relative improvement check
if relative_improvement < relative_improvement_threshold:
print(f"Early stopping after {j+1} epochs due to relative improvement threshold on eval. accuracy: \n{relative_improvement:.6f} < {relative_improvement_threshold}")
break # Stop if relative improvement is small
previous_accuracy = accuracy # Update the previous accuracy for next iteration
elif monitor_evaluation_cost:
relative_improvement = abs((cost - previous_cost) / (previous_cost + 1e-8)) # avoid division by zero
if cost < best_evaluation_cost:
best_evaluation_cost = cost
epochs_without_improvement = 0 # Reset counter if we see improvement
else:
epochs_without_improvement += 1
# Relative improvement check
if relative_improvement < relative_improvement_threshold:
print(f"Early stopping after {j+1} epochs due to relative improvement threshold on eval. cost: \n{relative_improvement:.6f} < {relative_improvement_threshold}")
break # Stop if relative improvement is small
previous_cost = cost # Update the previous cost for next iteration
# No-improvement-in-n epochs check
if epochs_without_improvement >= early_stopping_n:
print(f"Early stopping after {j+1} epochs due to no improvement for {early_stopping_n} epochs.")
break # Exit the training loop
return evaluation_cost, evaluation_accuracy, training_cost, training_accuracy
def update_mini_batch(self, mini_batch, eta, lmbda, n):
"""Update the network's weights and biases by applying gradient descent
using backpropagation to a single mini-batch."""
# Convert the mini-batch into matrix form
X = np.column_stack([x for x, y in mini_batch])
Y = np.column_stack([y for x, y in mini_batch])
# Perform forward and backward passes
nabla_b, nabla_w = self.backprop_matrix(X, Y)
# Update weights and biases using gradient descent and L1 or L2 regularization
if self.reg == 'l2':
self.weights = [(1 - eta * (lmbda/n)) * w - (eta/len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
elif self.reg == 'l1':
self.weights = [w - (eta * (lmbda/n)) * np.sign(w) - (eta / len(mini_batch)) * nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b - (eta / len(mini_batch)) * nb
for b, nb in zip(self.biases, nabla_b)]
def backprop_matrix(self, X, Y):
"""Matrix-based backpropagation for a mini-batch."""
# Initialize gradients
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# Step 1: Forward pass
activation = X
activations = [X] # Store all activations layer by layer
zs = [] # Store all z vectors layer by layer
# Feedforward step through all layers
for b, w in zip(self.biases, self.weights):
z = np.dot(w, activation) + b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# Step 2: Backward pass
# Compute delta at the output layer
delta = self.cost.delta(zs[-1], activations[-1], Y)
# Gradients for the output layer
nabla_b[-1] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-1] = np.dot(delta, activations[-2].T)
# Backpropagate through previous layers
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].T, delta) * sp
nabla_b[-l] = np.sum(delta, axis=1, keepdims=True)
nabla_w[-l] = np.dot(delta, activations[-l-1].T)
return (nabla_b, nabla_w)
def accuracy(self, data, convert=False):
if convert:
results = [(np.argmax(self.feedforward(x)), np.argmax(y))
for (x, y) in data]
else:
results = [(np.argmax(self.feedforward(x)), y)
for (x, y) in data]
return sum(int(x == y) for (x, y) in results)
def total_cost(self, data, lmbda, convert=False):
cost = 0.0
for x, y in data:
a = self.feedforward(x)
if convert: y = vectorized_result(y)
cost += self.cost.fn(a, y)/len(data)
if self.reg == 'l2':
cost += 0.5*(lmbda/len(data))*sum(np.linalg.norm(w)**2 for w in self.weights)
elif self.reg == 'l1':
cost += (lmbda/len(data))*sum(np.linalg.norm(w, ord=1) for w in self.weights)
return cost
def save(self, filename):
"""Save the neural network to the file ``filename``."""
data = {"sizes": self.sizes,
"weights": [w.tolist() for w in self.weights],
"biases": [b.tolist() for b in self.biases],
"cost": str(self.cost.__name__)}
f = open(filename, "w")
json.dump(data, f)
f.close()
%%time
# Initialize and train network
net = Network2mat2([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
eval_cost_n10, eval_acc_n10, train_cost_n10, train_acc_n10 = net.SGD(
training_data, 30, 10, 0.5, 5, evaluation_data=test_data,
monitor_evaluation_cost=True, monitor_evaluation_accuracy=True,
early_stopping_n=10)
Epoch 0 training complete Cost on evaluation data: 4.370084705653962 Accuracy on evaluation data: 9170 / 10000 Epoch 1 training complete Cost on evaluation data: 2.952264492793333 Accuracy on evaluation data: 9315 / 10000 Epoch 2 training complete Cost on evaluation data: 2.11608194188085 Accuracy on evaluation data: 9407 / 10000 Epoch 3 training complete Cost on evaluation data: 1.6206092381096153 Accuracy on evaluation data: 9483 / 10000 Epoch 4 training complete Cost on evaluation data: 1.338428694958743 Accuracy on evaluation data: 9517 / 10000 Epoch 5 training complete Cost on evaluation data: 1.1792030229196118 Accuracy on evaluation data: 9502 / 10000 Epoch 6 training complete Cost on evaluation data: 1.1349722093919958 Accuracy on evaluation data: 9434 / 10000 Epoch 7 training complete Cost on evaluation data: 1.0295785208869956 Accuracy on evaluation data: 9550 / 10000 Epoch 8 training complete Cost on evaluation data: 1.0377775762636152 Accuracy on evaluation data: 9487 / 10000 Epoch 9 training complete Cost on evaluation data: 1.0068097471168036 Accuracy on evaluation data: 9520 / 10000 Epoch 10 training complete Cost on evaluation data: 0.9794982764219005 Accuracy on evaluation data: 9544 / 10000 Epoch 11 training complete Cost on evaluation data: 0.9885904138495364 Accuracy on evaluation data: 9522 / 10000 Epoch 12 training complete Cost on evaluation data: 0.9722102017908278 Accuracy on evaluation data: 9545 / 10000 Epoch 13 training complete Cost on evaluation data: 0.9621591912962708 Accuracy on evaluation data: 9563 / 10000 Epoch 14 training complete Cost on evaluation data: 0.9476244973855212 Accuracy on evaluation data: 9579 / 10000 Epoch 15 training complete Cost on evaluation data: 0.9530991555732815 Accuracy on evaluation data: 9586 / 10000 Epoch 16 training complete Cost on evaluation data: 0.9874105395241157 Accuracy on evaluation data: 9529 / 10000 Epoch 17 training complete Cost on evaluation data: 0.9635348223965305 Accuracy on evaluation data: 9574 / 10000 Epoch 18 training complete Cost on evaluation data: 0.9587894234915423 Accuracy on evaluation data: 9566 / 10000 Epoch 19 training complete Cost on evaluation data: 0.9871476367587257 Accuracy on evaluation data: 9540 / 10000 Epoch 20 training complete Cost on evaluation data: 0.9651627872692474 Accuracy on evaluation data: 9565 / 10000 Epoch 21 training complete Cost on evaluation data: 0.9679960108134145 Accuracy on evaluation data: 9581 / 10000 Epoch 22 training complete Cost on evaluation data: 0.9948548867476981 Accuracy on evaluation data: 9527 / 10000 Epoch 23 training complete Cost on evaluation data: 0.9526303429514341 Accuracy on evaluation data: 9567 / 10000 Epoch 24 training complete Cost on evaluation data: 0.9680736098211036 Accuracy on evaluation data: 9561 / 10000 Epoch 25 training complete Cost on evaluation data: 0.9766240326746376 Accuracy on evaluation data: 9553 / 10000 Early stopping after 26 epochs due to no improvement for 10 epochs. CPU times: user 1min 30s, sys: 37.3 s, total: 2min 7s Wall time: 1min 34s
%%time
# Initialize and train network --> Relative Improvement Threshold (1%)
net = Network2mat3([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
eval_cost_res1p, eval_acc_res1p, train_cost_res1p, train_acc_res1p = net.SGD(
training_data, 30, 10, 0.5, 5, evaluation_data=test_data,
monitor_evaluation_cost=True, monitor_evaluation_accuracy=True,
early_stopping_n=10, relative_improvement_threshold=0.01)
Epoch 0 training complete Cost on evaluation data: 4.440950566645229 Accuracy on evaluation data: 9146 / 10000 Epoch 1 training complete Cost on evaluation data: 2.986621201620257 Accuracy on evaluation data: 9310 / 10000 Epoch 2 training complete Cost on evaluation data: 2.1155207226509374 Accuracy on evaluation data: 9447 / 10000 Epoch 3 training complete Cost on evaluation data: 1.6304008007274098 Accuracy on evaluation data: 9466 / 10000 Early stopping after 4 epochs due to relative improvement threshold on eval. accuracy: 0.002011 < 0.01 CPU times: user 15.6 s, sys: 6.39 s, total: 22 s Wall time: 17.6 s
%%time
# Initialize and train network --> Relative Improvement Threshold (0.05%)
net = Network2mat3([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
eval_cost_res2, eval_acc_res2, train_cost_res2, train_acc_res2 = net.SGD(
training_data, 30, 10, 0.5, 5, evaluation_data=test_data,
monitor_evaluation_cost=True, monitor_evaluation_accuracy=True,
early_stopping_n=10, relative_improvement_threshold=0.0005)
Epoch 0 training complete Cost on evaluation data: 4.308369597153946 Accuracy on evaluation data: 9208 / 10000 Epoch 1 training complete Cost on evaluation data: 2.899905351508916 Accuracy on evaluation data: 9365 / 10000 Epoch 2 training complete Cost on evaluation data: 2.099951867450372 Accuracy on evaluation data: 9418 / 10000 Epoch 3 training complete Cost on evaluation data: 1.6281577096451232 Accuracy on evaluation data: 9452 / 10000 Epoch 4 training complete Cost on evaluation data: 1.376248076408555 Accuracy on evaluation data: 9434 / 10000 Epoch 5 training complete Cost on evaluation data: 1.1803890136870558 Accuracy on evaluation data: 9543 / 10000 Epoch 6 training complete Cost on evaluation data: 1.1531647646034178 Accuracy on evaluation data: 9447 / 10000 Epoch 7 training complete Cost on evaluation data: 1.0244347291990943 Accuracy on evaluation data: 9581 / 10000 Epoch 8 training complete Cost on evaluation data: 1.0269805140377313 Accuracy on evaluation data: 9542 / 10000 Epoch 9 training complete Cost on evaluation data: 0.9781595710679946 Accuracy on evaluation data: 9565 / 10000 Epoch 10 training complete Cost on evaluation data: 0.9888852968668128 Accuracy on evaluation data: 9568 / 10000 Early stopping after 11 epochs due to relative improvement threshold on eval. accuracy: 0.000314 < 0.0005 CPU times: user 39.8 s, sys: 16.9 s, total: 56.7 s Wall time: 42.3 s
%%time
# Initialize and train network --> Relative Improvement Threshold (0.007%)
net = Network2mat3([784, 30, 10], cost=CrossEntropyCost)
net.large_weight_initializer()
eval_cost_res3, eval_acc_res3, train_cost_res3, train_acc_res3 = net.SGD(
training_data, 30, 10, 0.5, 5, evaluation_data=test_data,
monitor_evaluation_cost=True, monitor_evaluation_accuracy=True,
early_stopping_n=10, relative_improvement_threshold=0.00007)
Epoch 0 training complete Cost on evaluation data: 4.391974338541706 Accuracy on evaluation data: 9122 / 10000 Epoch 1 training complete Cost on evaluation data: 2.9557418621005933 Accuracy on evaluation data: 9314 / 10000 Epoch 2 training complete Cost on evaluation data: 2.150090473942308 Accuracy on evaluation data: 9366 / 10000 Epoch 3 training complete Cost on evaluation data: 1.6292553781691939 Accuracy on evaluation data: 9466 / 10000 Epoch 4 training complete Cost on evaluation data: 1.3431368103123131 Accuracy on evaluation data: 9520 / 10000 Epoch 5 training complete Cost on evaluation data: 1.2545291666155989 Accuracy on evaluation data: 9420 / 10000 Epoch 6 training complete Cost on evaluation data: 1.087030835721143 Accuracy on evaluation data: 9549 / 10000 Epoch 7 training complete Cost on evaluation data: 1.0558654702260977 Accuracy on evaluation data: 9513 / 10000 Epoch 8 training complete Cost on evaluation data: 0.9914709204307675 Accuracy on evaluation data: 9580 / 10000 Epoch 9 training complete Cost on evaluation data: 0.984261582010804 Accuracy on evaluation data: 9577 / 10000 Epoch 10 training complete Cost on evaluation data: 1.0152498009758495 Accuracy on evaluation data: 9519 / 10000 Epoch 11 training complete Cost on evaluation data: 1.0011863209370127 Accuracy on evaluation data: 9491 / 10000 Epoch 12 training complete Cost on evaluation data: 0.9529485729762095 Accuracy on evaluation data: 9597 / 10000 Epoch 13 training complete Cost on evaluation data: 1.0226212711870284 Accuracy on evaluation data: 9471 / 10000 Epoch 14 training complete Cost on evaluation data: 0.9652110157070748 Accuracy on evaluation data: 9560 / 10000 Epoch 15 training complete Cost on evaluation data: 0.9512892198687124 Accuracy on evaluation data: 9582 / 10000 Epoch 16 training complete Cost on evaluation data: 0.9724898688241087 Accuracy on evaluation data: 9570 / 10000 Epoch 17 training complete Cost on evaluation data: 0.952412282689242 Accuracy on evaluation data: 9577 / 10000 Epoch 18 training complete Cost on evaluation data: 0.9508221671184987 Accuracy on evaluation data: 9585 / 10000 Epoch 19 training complete Cost on evaluation data: 0.9813257400747502 Accuracy on evaluation data: 9550 / 10000 Epoch 20 training complete Cost on evaluation data: 0.9750242439804422 Accuracy on evaluation data: 9561 / 10000 Epoch 21 training complete Cost on evaluation data: 0.9766279040201181 Accuracy on evaluation data: 9537 / 10000 Epoch 22 training complete Cost on evaluation data: 0.9717542415689987 Accuracy on evaluation data: 9559 / 10000 Early stopping after 23 epochs due to no improvement for 10 epochs. CPU times: user 1min 23s, sys: 34.4 s, total: 1min 57s Wall time: 1min 34s
epochs_n10 = list(range(1, len(eval_acc_n10) + 1))
epochs_res1p = list(range(1, len(eval_acc_res1p) + 1))
epochs_res2 = list(range(1, len(eval_acc_res2) + 1))
epochs_res3 = list(range(1, len(eval_acc_res3) + 1))
# Plotting the accuracies
plt.figure(figsize=(10, 6))
plt.plot(epochs_n10, eval_acc_n10, label="No Improvement in 10 Epochs", marker='o')
plt.plot(epochs_res1p, eval_acc_res1p, label="Relative Improvement Threshold (1%)", marker='s')
plt.plot(epochs_res2, eval_acc_res2, label="Relative Improvement Threshold (0.05%)", marker='s')
plt.plot(epochs_res3, eval_acc_res3, label="Relative Improvement Threshold (0.007%)", marker='s')
# Labels and title
plt.xlabel("Epochs")
plt.ylabel("Validation Accuracy")
plt.title("Validation Accuracies: No Improvement in 10 vs. Relative Improvement Threshold (0.007%, 0.05%, 1%)")
plt.legend()
# Show the plot
plt.grid(True)
plt.show()
Other techniques to improve NNs¶
Each technique developed in so far is valuable to know in its own right, but that's not the only reason I've explained them. The larger point is to familiarize you with some of the problems which can occur in neural networks, and with a style of analysis which can help overcome those problems. In a sense, we've been learning how to think about neural nets. Over the remainder of this chapter I briefly sketch a handful of other techniques. These sketches are less in-depth than the earlier discussions, but should convey some feeling for the diversity of techniques available for use in neural networks.
Variations On SGD¶
Stochastic gradient descent (SGD) by backpropagation has served us well in attacking the MNIST digit classification problem. However, there are many other approaches to optimizing the cost function, and sometimes those other approaches offer performance superior to mini-batch stochastic gradient descent. In this section I sketch two such approaches, the Hessian and momentum techniques.
Hessian technique: To begin our discussion it helps to put neural networks aside for a bit. Instead, we're just going to consider the abstract problem of minimizing a cost function $C$ which is a function of many variables, $w = w_1, w_2, \ldots$, so $C = C(w)$. By Taylor's theorem, the cost function can be approximated near a point $w$ by
\begin{eqnarray} C(w+\Delta w) & = & C(w) + \sum_j \frac{\partial C}{\partial w_j} \Delta w_j \nonumber \\ & & + \frac{1}{2} \sum\_{jk} \Delta w_j \frac{\partial^2 C}{\partial w_j \partial w_k} \Delta w_k + \ldots \tag{18} \end{eqnarray}
We can rewrite this more compactly as
\begin{eqnarray} C(w+\Delta w) = C(w) + \nabla C \cdot \Delta w + \frac{1}{2} \Delta w^T H \Delta w + \ldots, \tag{19} \end{eqnarray}
where $\nabla C$ is the usual gradient vector, and $H$ is a matrix known as the Hessian matrix, whose $jk$th entry is $\partial^2 C / \partial w_j \partial w_k$. Suppose we approximate $C$ by discarding the higher-order terms represented by $\ldots$ above, \begin{eqnarray} C(w+\Delta w) \approx C(w) + \nabla C \cdot \Delta w + \frac{1}{2} \Delta w^T H \Delta w. \tag{20} \end{eqnarray}
Using calculus we can show that the expression on the right-hand side can be minimized**[19]** by choosing
\begin{eqnarray} \Delta w = -H^{-1} \nabla C. \tag{21} \end{eqnarray}
Provided Equation (20) is a good approximate expression for the cost function, then we'd expect that moving from the point $w$ to $w+\Delta w = w-H^{-1} \nabla C$ should significantly decrease the cost function. That suggests a possible algorithm for minimizing the cost:
- Choose a starting point, $w$.
- Update $w$ to a new point $w' = w-H^{-1} \nabla C$, where the Hessian $H$ and $\nabla C$ are computed at $w$.
- Update $w'$ to a new point $w{'}{'} = w'-H'^{-1} \nabla' C$, where the Hessian $H'$ and $\nabla' C$ are computed at $w'$.
- $\ldots$
In practice, Equation (20) is only an approximation, and it's better to take smaller steps. We do this by repeatedly changing $w$ by an amount $\Delta w = -\eta H^{-1} \nabla C$, where $\eta$ is known as the learning rate.
This approach to minimizing a cost function is known as the Hessian technique or Hessian optimization. There are theoretical and empirical results showing that Hessian methods converge on a minimum in fewer steps than standard gradient descent. In particular, by incorporating information about second-order changes in the cost function it's possible for the Hessian approach to avoid many pathologies that can occur in gradient descent. Furthermore, there are versions of the backpropagation algorithm which can be used to compute the Hessian.
If Hessian optimization is so great, why aren't we using it in our neural networks? Unfortunately, while it has many desirable properties, it has one very undesirable property: it's very difficult to apply in practice. Part of the problem is the sheer size of the Hessian matrix. Suppose you have a neural network with $10^7$ weights and biases. Then the corresponding Hessian matrix will contain $10^7 \times 10^7 = 10^{14}$ entries. That's a lot of entries! And that makes computing $H^{-1} \nabla C$ extremely difficult in practice. However, that doesn't mean that it's not useful to understand. In fact, there are many variations on gradient descent which are inspired by Hessian optimization, but which avoid the problem with overly-large matrices. Let's take a look at one such technique, momentum-based gradient descent.
Momentum-based gradient descent: Intuitively, the advantage Hessian optimization has is that it incorporates not just information about the gradient, but also information about how the gradient is changing. Momentum-based gradient descent is based on a similar intuition, but avoids large matrices of second derivatives. To understand the momentum technique, think back to our original picture of gradient descent, in which we considered a ball rolling down into a valley. At the time, we observed that gradient descent is, despite its name, only loosely similar to a ball falling to the bottom of a valley. The momentum technique modifies gradient descent in two ways that make it more similar to the physical picture. First, it introduces a notion of "velocity" for the parameters we're trying to optimize. The gradient acts to change the velocity, not (directly) the "position", in much the same way as physical forces change the velocity, and only indirectly affect position. Second, the momentum method introduces a kind of friction term, which tends to gradually reduce the velocity.
Let's give a more precise mathematical description. We introduce velocity variables $v = v_1, v_2, \ldots$, one for each corresponding $w_j$ variable**[20]**. Then we replace the gradient descent update rule $w \rightarrow w'= w-\eta \nabla C$ by
\begin{eqnarray} v & \rightarrow & v' = \mu v - \eta \nabla C \tag{22} \\ w & \rightarrow & w' = w+v'. \tag{23} \end{eqnarray}
In these equations, $\mu$ is a hyper-parameter which controls the amount of damping or friction in the system. To understand the meaning of the equations it's helpful to first consider the case where $\mu = 1$, which corresponds to no friction. When that's the case, inspection of the equations shows that the "force" $\nabla C$ is now modifying the velocity, $v$, and the velocity is controlling the rate of change of $w$. Intuitively, we build up the velocity by repeatedly adding gradient terms to it. That means that if the gradient is in (roughly) the same direction through several rounds of learning, we can build up quite a bit of steam moving in that direction. Think, for example, of what happens if we're moving straight down a slope:

With each step the velocity gets larger down the slope, so we move more and more quickly to the bottom of the valley. This can enable the momentum technique to work much faster than standard gradient descent. Of course, a problem is that once we reach the bottom of the valley we will overshoot. Or, if the gradient should change rapidly, then we could find ourselves moving in the wrong direction. That's the reason for the $\mu$ hyper-parameter in Equation (22). I said earlier that $\mu$ controls the amount of friction in the system; to be a little more precise, you should think of $1-\mu$ as the amount of friction in the system. When $\mu = 1$, as we've seen, there is no friction, and the velocity is completely driven by the gradient $\nabla C$. By contrast, when $\mu = 0$ there's a lot of friction, the velocity can't build up, and Equations (22) and (23) reduce to the usual equation for gradient descent, $w \rightarrow w'=w-\eta \nabla C$. In practice, using a value of $\mu$ intermediate between $0$ and $1$ can give us much of the benefit of being able to build up speed, but without causing overshooting. We can choose such a value for $\mu$ using the held-out validation data, in much the same way as we select $\eta$ and $\lambda$.
I've avoided naming the hyper-parameter $\mu$ up to now. The reason is that the standard name for $\mu$ is badly chosen: it's called the momentum co-efficient. This is potentially confusing, since $\mu$ is not at all the same as the notion of momentum from physics. Rather, it is much more closely related to friction. However, the term momentum co-efficient is widely used, so we will continue to use it.
A nice thing about the momentum technique is that it takes almost no work to modify an implementation of gradient descent to incorporate momentum. We can still use backpropagation to compute the gradients, just as before, and use ideas such as sampling stochastically chosen mini-batches. In this way, we can get some of the advantages of the Hessian technique, using information about how the gradient is changing. But it's done without the disadvantages, and with only minor modifications to our code. In practice, the momentum technique is commonly used, and often speeds up learning.
Other approaches to minimizing the cost function: Many other approaches to minimizing the cost function have been developed, and there isn't universal agreement on which is the best approach. As you go deeper into neural networks it's worth digging into the other techniques, understanding how they work, their strengths and weaknesses, and how to apply them in practice. A paper I mentioned earlier**[21]** introduces and compares several of these techniques, including
- conjugate gradient descent and
- the BFGS method (see also the closely related limited-memory BFGS method, known as L-BFGS).
- Another technique which has recently shown promising results**[22]** is Nesterov's accelerated gradient technique, which improves on the momentum technique.
However, for many problems, plain stochastic gradient descent works well, especially if momentum is used, and so we'll stick to stochastic gradient descent through the remainder of the course.
References:
19. Strictly speaking, for this to be a minimum, and not merely an
extremum, we need to assume that the Hessian matrix is positive
definite. Intuitively, this means that the function $C$ looks like a
valley locally, not a mountain or a saddle.
20. In a neural net the $w_j$ variables would, of course, include all weights and biases.
21. Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller (1998).
22. See, for example, On the importance of initialization and momentum in deep learning, by Ilya
Sutskever, James Martens, George Dahl, and Geoffrey Hinton (2012).
Other models of artificial neuron¶
Up to now we've built our neural networks using sigmoid neurons. In principle, a network built from sigmoid neurons can compute any function. In practice, however, networks built using other model neurons sometimes outperform sigmoid networks. Depending on the application, networks based on such alternate models may learn faster, generalize better to test data, or perhaps do both. Let me mention a couple of alternate model neurons, to give you the flavor of some variations in common use.
Perhaps the simplest variation is the tanh (pronounced "tanch") neuron, which replaces the sigmoid function by the hyperbolic tangent function. The output of a tanh neuron with input $x$, weight vector $w$, and bias $b$ is given by
\begin{eqnarray} \tanh(w \cdot x+b), \tag{24} \end{eqnarray}
where $\tanh$ is, of course, the hyperbolic tangent function. It turns out that this is very closely related to the sigmoid neuron. To see this, recall that the $\tanh$ function is defined by
\begin{eqnarray} \tanh(z) \equiv \frac{e^z-e^{-z}}{e^z+e^{-z}}. \tag{25} \end{eqnarray}
With a little algebra it can easily be verified that
\begin{eqnarray} \sigma(z) = \frac{1+\tanh(z/2)}{2}, \tag{26} \end{eqnarray}
that is, $\tanh$ is just a rescaled version of the sigmoid function. We can also see graphically that the $\tanh$ function has the same shape as the sigmoid function,
One difference between tanh neurons and sigmoid neurons is that the output from tanh neurons ranges from -1 to 1, not 0 to 1. This means that if you're going to build a network based on tanh neurons you may need to normalize your outputs (and, depending on the details of the application, possibly your inputs) a little differently than in sigmoid networks.
Similar to sigmoid neurons, a network of tanh neurons can, in principle, compute any function**[23]** mapping inputs to the range -1 to 1. Furthermore, ideas such as backpropagation and stochastic gradient descent are as easily applied to a network of tanh neurons as to a network of sigmoid neurons.
Which type of neuron should you use in your networks, the tanh or sigmoid? A priori the answer is not obvious, to put it mildly! However, there are theoretical arguments and some empirical evidence to suggest that the tanh sometimes performs better**[24]**. Let me briefly give you the flavor of one of the theoretical arguments for tanh neurons. Suppose we're using sigmoid neurons, so all activations in our network are positive. Let's consider the weights $w^{l+1}_{jk}$ input to the $j$th neuron in the $l+1$th layer. The rules for backpropagation (see here) tell us that the associated gradient will be $a^l_k \delta^{l+1}_j$. Because the activations are positive the sign of this gradient will be the same as the sign of $\delta^{l+1}_j$. What this means is that if $\delta^{l+1}_j$ is positive then all the weights $w^{l+1}_{jk}$ will decrease during gradient descent, while if $\delta^{l+1}_j$ is negative then all the weights $w^{l+1}_{jk}$ will increase during gradient descent. In other words, all weights to the same neuron must either increase together or decrease together. That's a problem, since some of the weights may need to increase while others need to decrease. That can only happen if some of the input activations have different signs. That suggests replacing the sigmoid by an activation function, such as $\tanh$, which allows both positive and negative activations. Indeed, because $\tanh$ is symmetric about zero, $\tanh(-z) = -\tanh(z)$, we might even expect that, roughly speaking, the activations in hidden layers would be equally balanced between positive and negative. That would help ensure that there is no systematic bias for the weight updates to be one way or the other.
How seriously should we take this argument? While the argument is suggestive, it's a heuristic, not a rigorous proof that tanh neurons outperform sigmoid neurons. Perhaps there are other properties of the sigmoid neuron which compensate for this problem? Indeed, for many tasks the tanh is found empirically to provide only a small or no improvement in performance over sigmoid neurons. Unfortunately, we don't yet have hard-and-fast rules to know which neuron types will learn fastest, or give the best generalization performance, for any particular application.
Another variation on the sigmoid neuron is the rectified linear neuron or rectified linear unit. The output of a rectified linear unit with input $x$, weight vector $w$, and bias $b$ is given by
\begin{eqnarray} \max(0, w \cdot x+b). \tag{27} \end{eqnarray}
Graphically, the rectifying function $\max(0, z)$ looks like this:
Obviously such neurons are quite different from both sigmoid and tanh neurons. However, like the sigmoid and tanh neurons, rectified linear units can be used to compute any function, and they can be trained using ideas such as backpropagation and stochastic gradient descent.
When should you use rectified linear units instead of sigmoid or tanh neurons? Some recent work on image recognition**[25]** has found considerable benefit in using rectified linear units through much of the network. However, as with tanh neurons, we do not yet have a really deep understanding of when, exactly, rectified linear units are preferable, nor why. To give you the flavor of some of the issues, recall that sigmoid neurons stop learning when they saturate, i.e., when their output is near either $0$ or $1$. As we've seen repeatedly in this chapter, the problem is that $\sigma'$ terms reduce the gradient, and that slows down learning. Tanh neurons suffer from a similar problem when they saturate. By contrast, increasing the weighted input to a rectified linear unit will never cause it to saturate, and so there is no corresponding learning slowdown. On the other hand, when the weighted input to a rectified linear unit is negative, the gradient vanishes, and so the neuron stops learning entirely. These are just two of the many issues that make it non-trivial to understand when and why rectified linear units perform better than sigmoid or tanh neurons.
I've painted a picture of uncertainty here, stressing that we do not yet have a solid theory of how activation functions should be chosen. Indeed, the problem is harder even than I have described, for there are infinitely many possible activation functions. Which is the best for any given problem? Which will result in a network which learns fastest? Which will give the highest test accuracies? I am surprised how little really deep and systematic investigation has been done of these questions. Ideally, we'd have a theory which tells us, in detail, how to choose (and perhaps modify-on-the-fly) our activation functions. On the other hand, we shouldn't let the lack of a full theory stop us! We have powerful tools already at hand, and can make a lot of progress with those tools. Through the remainder of this book I'll continue to use sigmoid neurons as our go-to neuron, since they're powerful and provide concrete illustrations of the core ideas about neural nets. But keep in the back of your mind that these same ideas can be applied to other types of neuron, and that there are sometimes advantages in doing so.
On stories in neural networks¶
Question: How do you approach utilizing and researching machine learning techniques that are supported almost entirely empirically, as opposed to mathematically? Also in what situations have you noticed some of these techniques fail?
Answer: You have to realize that our theoretical tools are very weak. Sometimes, we have good mathematical intuitions for why a particular technique should work. Sometimes our intuition ends up being wrong [...] The questions become: how well does my method work on this particular problem, and how large is the set of problems on which it works well.
- Reddit Question and answer with neural networks researcher Yann LeCun
References:
23. There are some technical caveats to this statement for both tanh and sigmoid neurons, as well as for the ReLU neurons discussed below. However, informally it's usually fine to think of neural networks as being able
to approximate any function to arbitrary accuracy.
24. See, for example, Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller (1998), and Understanding the difficulty of training deep feedforward
networks,
by Xavier Glorot and Yoshua Bengio (2010).
25. See, for example, What is the Best Multi-Stage Architecture for Object
Recognition?,
by Kevin Jarrett, Koray Kavukcuoglu, Marc'Aurelio Ranzato and Yann LeCun
(2009), Deep Sparse Rectifier Neural Networks, by Xavier Glorot, Antoine Bordes, and Yoshua Bengio (2011), and ImageNet Classification with
Deep Convolutional Neural Networks,
by Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton (2012). Note
that these papers fill in important details about how to set up the
output layer, cost function, and regularization in networks using
rectified linear units. I've glossed over all these details in this
brief account. The papers also discuss in more detail the benefits and
drawbacks of using rectified linear units. Another informative paper is
Rectified Linear Units Improve Restricted Boltzmann
Machines, by
Vinod Nair and Geoffrey Hinton (2010), which demonstrates the benefits
of using rectified linear units in a somewhat different approach to
neural networks.
import numpy as np
import matplotlib.pyplot as plt
z = np.arange(-2, 2, .1)
zero = np.zeros(len(z))
y = np.max([zero, z], axis=0)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, y)
ax.set_ylim([-2.0, 2.0])
ax.set_xlim([-2.0, 2.0])
ax.grid(True)
ax.set_xlabel('z')
ax.set_title('Rectified linear unit')
plt.show()
z = np.arange(-5, 5, .1)
sigma_fn = np.vectorize(lambda z: 1/(1+np.exp(-z)))
sigma = sigma_fn(z)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, sigma)
ax.set_ylim([-0.5, 1.5])
ax.set_xlim([-5,5])
ax.grid(True)
ax.set_xlabel('z')
ax.set_title('sigmoid function')
plt.show()
z = np.arange(-5, 5, .02)
step_fn = np.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)
step = step_fn(z)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, step)
ax.set_ylim([-0.5, 1.5])
ax.set_xlim([-5,5])
ax.grid(True)
ax.set_xlabel('z')
ax.set_title('step function')
plt.show()
z = np.arange(-5, 5, .1)
t = np.tanh(z)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, t)
ax.set_ylim([-1.0, 1.0])
ax.set_xlim([-5,5])
ax.grid(True)
ax.set_xlabel('z')
ax.set_title('tanh function')
plt.show()
Problems¶
Problem 1:¶
- We've seen how to use networks with two hidden layers to approximate an
arbitrary function. Can you find a proof showing that it's possible with
just a single hidden layer? As a hint, try working in the case of just
two input variables, and showing that:
- it's possible to get step functions not just in the $x$ or $y$ directions, but in an arbitrary direction;
- by adding up many of the constructions from part (1) it's possible to approximate a tower function which is circular in shape, rather than rectangular;
- using these circular towers, it's possible to approximate an arbitrary function.
Answer 1:¶
The task you’ve posed is closely related to the Universal Approximation Theorem, which states that a feedforward neural network with a single hidden layer containing a finite number of neurons can approximate any continuous function on compact subsets of $\mathbb{R}^n$, given appropriate activation functions. Here's how you can approach proving this for the case of a neural network with just one hidden layer, based on the hints provided:
(a) Step Functions in Arbitrary Directions¶
Let’s first show that it is possible to get step functions not only in the $x$- or $y$-direction, but in any arbitrary direction.
A neuron with weights $w_1$ and $w_2$ and bias $b$ has the form: $$f(x_1, x_2) = \sigma(w_1 x_1 + w_2 x_2 + b)$$ where $\sigma$ is the activation function, such as the sigmoid or ReLU. When the input $w_1 x_1 + w_2 x_2 + b = 0$, this defines a decision boundary in the $(x_1, x_2)$-plane, which is a line. The step from 0 to 1 happens across this line.
- For a step function in the $x_1$-direction, you can choose $w_2 = 0$, and the equation reduces to $w_1 x_1 + b = 0$, i.e., a vertical line.
- For a step function in the $x_2$-direction, you can choose $w_1 = 0$, and the equation reduces to $w_2 x_2 + b = 0$, i.e., a horizontal line.
- For an arbitrary direction, you can vary both $w_1$ and $w_2$, which will result in a line with slope $-w_1/w_2$. This allows us to create step functions along any direction in the input space.
Thus, using a single hidden layer neuron with an appropriate weight vector and bias, we can create step functions that transition from 0 to 1 across arbitrary lines in the $(x_1, x_2)$-plane.
(b) Circular Approximation Using Step Functions¶
Next, we want to approximate circular shapes using these step functions.
To approximate a circle, we can sum together multiple step functions in different directions. Consider a circular region centered at the origin. We can construct step functions that approximate the boundary of this circle by forming a polygon with many sides, where each side is defined by a step function in a particular direction. As we increase the number of sides (i.e., the number of neurons), the polygon will more closely approximate the shape of a circle.
For example, by taking a set of step functions corresponding to different angles (e.g., at $0^\circ$, $45^\circ$, $90^\circ$, etc.), we can form a rough approximation of a circle. Increasing the number of neurons will improve the approximation, smoothing out the circular boundary. This is analogous to how one might approximate a smooth curve with many small straight line segments.
Thus, by summing the outputs of many neurons with different weights, we can construct an approximation to a circular region or "tower" function.
(c) Approximation of Arbitrary Functions Using Circular Towers¶
Finally, using these circular towers, we can approximate any arbitrary function.
The idea here is that any continuous function can be approximated by combining these circular regions. Think of a function that you want to approximate over some input space. You can break up the input space into small circular regions, and approximate the function value within each region by placing a tower of appropriate height (i.e., adjusting the output value) over each circular region.
This is conceptually similar to a Riemann sum approximation, where the function is approximated by a sum of small regions, each with a constant value (a "tower") inside the region. By combining enough of these towers, you can approximate the shape of any continuous function.
Conclusion¶
To summarize, the proof works as follows:
- Step functions in arbitrary directions: We showed that a single hidden-layer neuron can create step functions with boundaries in any direction.
- Approximating circular towers: By summing step functions with boundaries in different directions, we can approximate circular regions or "towers".
- Approximating arbitrary functions: Using these circular towers, we can approximate any continuous function over a compact domain.
This construction shows that even with just a single hidden layer, a neural network can approximate any continuous function, which is the essence of the Universal Approximation Theorem.
Answer 2:¶
Proof Sketch: Universal Approximation with Single Hidden Layer¶
(a) Step Functions in Arbitrary Directions¶
- Consider a neuron with two inputs (
x, y) and weights (w1, w2):z = w1*x + w2*y + b - The activation function σ(z) creates a step along the line:
w1*x + w2*y + b = 0 - By adjusting w1 and w2, we can create a step in any direction in the
x-yplane
(b) Approximating Circular Tower Functions¶
- Use multiple neurons from (a) to create steps in different directions
- Combine these steps with appropriate weights to approximate a circular boundary
- Use a large positive weight in the output layer to create a "tower" effect
- Adjust the height and radius of the tower by modifying weights and biases
(c) Approximating Arbitrary Functions¶
Any continuous function on a compact subset of $\mathbb{R}^2$ can be approximated by a sum of circular tower functions
Use the Stone-Weierstrass theorem:
- Polynomial functions are dense in the space of continuous functions
- Our circular towers can approximate polynomial functions
Process:
- Divide the input space into a grid
- For each grid cell, use a circular tower to approximate the function value
- Refine the grid for better approximation
The universal approximation theorem extends this to higher dimensions and larger input spaces
Note: This proof sketch demonstrates the capability of a single hidden layer. In practice, deeper networks often learn more efficiently and require fewer total parameters.
Problem 2:¶
- Suppose we consider linear neurons, i.e., neurons with the activation function $s(z) = z$. Explain why linear neurons don't satisfy the conditions just given for universality. Show that such neurons can't be used to do universal computation.
Answer:¶
Linear neurons are neurons that use a linear activation function, meaning the activation function $s(z) = z$. In other words, the output of a linear neuron is simply a weighted sum of its inputs. While these neurons can perform useful computations, they do not satisfy the conditions for universality---i.e., they cannot approximate arbitrary continuous functions. Here's an explanation of why this is the case and a proof that linear neurons cannot perform universal computation.
Why Linear Neurons Don't Satisfy Universality¶
To understand why linear neurons don't lead to universal approximation, it's useful to revisit the conditions required for universal computation, as seen in the Universal Approximation Theorem:
Non-linearity: The activation function of neurons needs to be non-linear. This is crucial because networks composed only of linear transformations are equivalent to a single linear transformation, no matter how deep the network is.
Expressive Power: The network must be capable of combining neurons in a way that allows for the approximation of any continuous function on a compact domain.
Linear neurons fail to satisfy the non-linearity condition, which is a core requirement for universality.
Proof: Linear Networks Are Equivalent to a Single Linear Layer¶
Let's explore why a network composed of linear neurons cannot approximate arbitrary continuous functions.
Single Layer of Linear Neurons¶
Consider a single neuron with the linear activation function $s(z) = z$. The output of this neuron can be written as:
$$y = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b$$
where $w_1, w_2, \dots, w_n$ are the weights, $x_1, x_2, \dots, x_n$ are the inputs, and $b$ is the bias term. This is simply a linear combination of the inputs.
Stacking Multiple Layers of Linear Neurons¶
Now, consider a network of linear neurons with multiple layers. In the first layer, the output is:
$$y_1 = W_1 x + b_1$$
where $W_1$ is the weight matrix, $x$ is the input vector, and $b_1$ is the bias vector for the first layer. In the second layer, the input to the neurons is $y_1$, and the output of the second layer is:
$$y_2 = W_2 y_1 + b_2 = W_2 (W_1 x + b_1) + b_2$$
This simplifies to:
$$y_2 = W_2 W_1 x + W_2 b_1 + b_2$$
Now, consider adding more layers. The output at the $k$-th layer can be written as:
$$y_k = W_k (W_{k-1} \dots W_1 x + b_1) + b_k$$
Ultimately, the entire network is just a composition of linear transformations. This means that the output of the network can always be expressed as:
$$y = W x + b$$
where $W$ is a single weight matrix that results from multiplying the weight matrices of each layer together, and $b$ is an aggregate bias term. In other words, the entire network is equivalent to a single linear transformation.
Consequence: No Increase in Expressive Power¶
Because the composition of linear functions is itself a linear function, the network as a whole is still a linear model, regardless of how many layers or neurons are used. This drastically limits the expressive power of the network because:
- A linear function cannot represent non-linear relationships between variables. - Many real-world functions, such as decision boundaries for classification tasks, require non-linear mappings.
Thus, linear neurons can only model linear relationships between inputs and outputs, and they cannot approximate non-linear functions. This severely restricts the types of functions a network of linear neurons can approximate.
Conclusion: No Universal Computation with Linear Neurons¶
Because networks composed of linear neurons are equivalent to a single linear transformation, they cannot approximate arbitrary continuous functions. The lack of non-linearity prevents such networks from representing complex, non-linear relationships that are essential for universal function approximation.
In contrast, networks with non-linear activation functions, such as the sigmoid, $\tanh$, or ReLU functions, break the linearity and allow for the approximation of a wide range of continuous functions. This is why non-linear activation functions are necessary for universal computation in neural networks.
Problem 3:¶
- Earlier in the book we met another type of neuron known as a rectified
linear unit,
ReLU. Explain why such neurons don't satisfy the conditions just given for universality. Find a proof of universality showing that rectified linear units are universal for computation.
Answer 1:¶
ReLU Universality in Neural Networks¶
Part 1: Why ReLUs Don’t Satisfy Previous Conditions¶
The previous proof relied on the properties of sigmoid-like activation functions, specifically:
- They are bounded (output is between 0 and 1).
- They have a smooth, continuous transition between their minimum and maximum values.
Rectified Linear Units (ReLUs) differ in key ways:
- ReLU(x) = max(0, x)
- They are unbounded for positive inputs.
- They have a sharp transition at x = 0, not a smooth one.
These differences mean that ReLUs can’t directly create the “circular towers” we used in the previous proof. They produce piecewise linear functions instead of smooth, bounded ones.
Part 2: Proof of Universality for ReLUs¶
Despite these differences, ReLUs are indeed universal approximators. Here’s a sketch of the proof:
Piecewise Linear Approximation: Any continuous function on a compact domain can be approximated arbitrarily closely by a piecewise linear function.
ReLU as a Building Block: Consider a “hinge” function: h(x) = ReLU(x) - ReLU(x - 1) This creates a piecewise linear function that’s 0 for x < 0, increases linearly from 0 to 1 for 0 ≤ x < 1, and stays at 1 for x ≥ 1.
Constructing Arbitrary Piecewise Linear Functions:
- For a single input variable:
- Use multiple scaled and shifted hinge functions
- Example: f(x) = a₁h(b₁x + c₁) + a₂h(b₂x + c₂) + … + aₙh(bₙx + cₙ)
- For multiple input variables:
- Use linear combinations of single-variable constructions
- Example: g(x, y) = f₁(x) + f₂(y) + f₃(ax + by + c)
- For a single input variable:
Approximating Continuous Functions:
- Given any continuous function and desired error ε > 0
- Choose a fine enough piecewise linear approximation
- Construct this approximation using ReLUs as described above
Network Structure:
- First hidden layer: Compute linear functions inside ReLUs
- Second hidden layer: Combine ReLUs to form hinge functions
- Output layer: Linear combination of hinge functions
This construction shows that a network with two hidden layers of ReLU neurons can approximate any continuous function arbitrarily closely, thus proving the universality of ReLU networks.
Key Insight: While ReLUs can’t directly create smooth, bounded functions like sigmoids, they can create piecewise linear approximations of any continuous function, which is sufficient for universality.
Answer 2:¶
Certainly! Here's a more mathematical approach to showing the universality of ReLU networks.
Step 1: Define the ReLU Function¶
The ReLU function is defined as:
$$\text{ReLU}(x) = \max(0, x)$$
This is a piecewise linear function: $$\text{ReLU}(x) =
\begin{cases}
0 & \text{if } x \leq 0 \\
x & \text{if } x > 0
\end{cases}$$
### Step 2: Universal Approximation Theorem for ReLU Networks
The Universal Approximation Theorem for neural networks states that, for any continuous function $f$ defined on a compact set
$K \subset \mathbb{R}^n$, there exists a neural network with at least
one hidden layer, and a sufficient number of neurons in the hidden
layer, such that the network can approximate $f$ to any desired degree
of accuracy.
For ReLU networks, this theorem holds in a similar way as for sigmoid or tanh activations. While individual ReLUs are piecewise linear, a network made up of several ReLUs is capable of approximating any continuous function.
### Step 3: Constructing a Piecewise Linear Approximation
Let’s focus on constructing the approximation. The idea behind the proof is that any continuous function can be approximated by piecewise linear functions, and ReLU neurons are capable of building piecewise linear functions.
To approximate a continuous function ( f(x) ) on a compact domain, we partition the domain into smaller segments, and approximate ( f(x) ) on each segment by a linear function. By adding more ReLUs, we can increase the number of segments and reduce the approximation error.
1. Partition the Domain:
Let's consider a compact interval $[a, b] \subset \mathbb{R}$. We partition this interval into $N$ sub-intervals:
$$a = x_0 < x_1 < \cdots < x_N = b$$
On each sub-interval $[x_i, x_{i+1}]$, we approximate $f(x)$ by a linear function. So, on $[x_i, x_{i+1}]$, we define:
$$f(x) \approx f(x_i) + \frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i}(x - x_i)$$
This is a linear approximation of $f(x)$ on each segment
Using ReLU to Represent Linear Functions:
ReLU networks can represent such piecewise linear functions. To see how, consider the following:A ReLU function can be used to create a "kink" in a linear function, where the slope changes at some point ( c ). For example: $$\text{ReLU}(x - c) = \begin{cases} 0 & \text{if } x \leq c \\ x - c & \text{if } x > c \end{cases}$$ By combining several ReLU functions with different shifts, it's possible to construct a piecewise linear function with "kinks" at arbitrary points.
Constructing a Neural Network to Approximate ( f(x) ):
To approximate ( f(x) ), we use the following strategy:- For each sub-interval $[x_i, x_{i+1}]$, we define a linear function that approximates $f(x)$ on that interval
- These linear functions can be constructed using weighted sums of ReLU activations.
For instance, a simple two-layer ReLU network can represent a function like: $$h(x) = w_1 \text{ReLU}(x - c_1) + w_2 \text{ReLU}(x - c_2) + \cdots + w_k \text{ReLU}(x - c_k)$$ By choosing the appropriate weights $w_i$ and thresholds $c_i$, this function can represent any piecewise linear approximation to $f(x)$.
Step 4: Error Bound and Universality¶
As the number of partitions $N$ increases, the piecewise linear approximation becomes more accurate. Specifically, the approximation error decreases as:
$$\max_{x \in [a, b]} | f(x) - h(x) | \to 0 \quad \text{as} \quad N \to \infty$$
This shows that by adding more ReLU neurons (increasing the complexity of the network), we can approximate any continuous function $f(x)$ to arbitrary precision. Since $f(x)$ is continuous and the approximation is piecewise linear, the ReLU network can achieve universal approximation by using enough neurons and layers.
Step 5: Generalization to Higher Dimensions¶
The argument extends to higher-dimensional functions $f: \mathbb{R}^n \to \mathbb{R}$ by approximating the function on a grid in $\mathbb{R}^n$. In this case, the ReLU network approximates $f$ using piecewise linear functions over the grid's regions, and the same strategy applies to show that any continuous function on a compact domain can be approximated.
Conclusion¶
By using ReLU neurons in a neural network, we can construct piecewise linear functions that approximate any continuous function on a compact domain. The Universal Approximation Theorem applies to ReLU networks, proving that they are capable of approximating any continuous function to arbitrary precision, despite the piecewise linear nature of individual ReLU neurons. The key lies in the network's ability to combine many ReLU activations to form a flexible piecewise linear function.