In [29]:
import numpy as np
import pandas as pd

from theano import tensor

import fuel
import h5py
from fuel.datasets.hdf5 import H5PYDataset
from fuel.streams import DataStream
from fuel.schemes import SequentialScheme
from fuel.transformers import Flatten

from blocks.bricks import Linear, Logistic, Softmax
from blocks.bricks.cost import CategoricalCrossEntropy
from blocks.roles import WEIGHT
from blocks.graph import ComputationGraph
from blocks.filter import VariableFilter
from blocks.initialization import IsotropicGaussian, Constant
from blocks.algorithms import GradientDescent, Scale, AdaGrad, Adam
from blocks.extensions.monitoring import DataStreamMonitoring
from blocks.main_loop import MainLoop
from blocks.extensions import FinishAfter, Printing
from blocks.extensions.monitoring import TrainingDataMonitoring
from blocks_extras.extensions.plot import Plot

%matplotlib inline

In [30]:
header = ["label", "cap-shape","cap-surface", "cap-color", "bruises", "odor", "gill-attachment", "gill-spacing", "gill-size", "gill-color",
"stalk-shape", "stalk-root", "stalk-surface-above-ring", "stalk-surface-below-ring", "stalk-color-above-ring",
"stalk-color-below-ring", "veil-type", "veil-color", "ring-number", "ring-type", "spore-print-color", "population",
"habitat"]

def makeOneHot(col):
    vals,idx = pd.factorize(col)
    res = np.zeros((len(vals),len(idx)))
    res[range(len(vals)),vals] = 1
    return res

def loadData():
    df = pd.read_csv("./agaricus-lepiota.data", header=0, names=header)
    X = np.hstack([makeOneHot(df[c]) for c in header[1:]])
    y = makeOneHot(df[header[0]])
    
    return X, y

def randomizeData(X,y):
    num_instances = X.shape[0]
    indices = np.random.permutation(num_instances)
    return X[indices,:], y[indices]

X, y = loadData()
X, y = randomizeData(X,y)


print X.shape, y.shape


(8123, 117) (8123, 2)

In [31]:
def createH5Dataset(path,X,y):
    f = h5py.File(path, mode='w')

    split = int(8123*0.8)

    features = f.create_dataset('features', (8123, 117), dtype='uint8')
    targets = f.create_dataset('targets', (8123, 2), dtype='uint8')

    features[...] = X
    targets[...] = y

    split_dict = {
         'train': {'features': (0, splits), 'targets': (0, splits)},
         'test':  {'features': (split+1,8123), 'targets': (split,8123)},
    }
    f.attrs['split'] = H5PYDataset.create_split_array(split_dict)

    f.flush()
    f.close()

#createH5Dataset("dataset.hdf5", X, y)

#train_data = H5PYDataset('dataset.hdf5', which_sets=('train',), load_in_memory=True)
#test_data  = H5PYDataset('dataset.hdf5', which_sets=('test',), load_in_memory=True)

In [32]:
from fuel.datasets import IndexableDataset

def createDataset(X,y):
    split = int(X.shape[0]*0.8)
    
    train = IndexableDataset({
        'features': X[:split,:].astype(np.uint8),
        'targets': y[:split].astype(np.uint8)
    })
    test  = IndexableDataset({
        'features': X[split:,:].astype(np.uint8),
        'targets': y[split:].astype(np.uint8)
    })
    
    return train, test

train_data, test_data = createDataset(X, y)

In [33]:
data_stream = Flatten(DataStream.default_stream(
     train_data,
     iteration_scheme=SequentialScheme(train_data.num_examples, batch_size=50)))

data_stream_test = Flatten(DataStream.default_stream(
        test_data, 
        iteration_scheme=SequentialScheme(
        test_data.num_examples, batch_size=1000)))

In [41]:
from blocks.bricks.cost import MisclassificationRate

def makeGraph():
    Xs = tensor.matrix("features")
    y = tensor.lmatrix('targets')
    
    h1 = Linear(name='h1', input_dim=117, output_dim=70)
    a1 = Logistic().apply(h1.apply(Xs))
    h2 = Linear(name='h2', input_dim=70, output_dim=2)
    y_hat = Softmax().apply(h2.apply(a1))
    
    h1.weights_init = h2.weights_init = IsotropicGaussian(0.01)
    h1.biases_init = h2.biases_init = Constant(0)
    h1.initialize()
    h2.initialize()
    
    cost = CategoricalCrossEntropy().apply(y, y_hat)
    
    cg = ComputationGraph(cost)
    W1, W2 = VariableFilter(roles=[WEIGHT])(cg.variables)
    
    cost = cost + 0.005 * (W1 ** 2).sum() + 0.005 * (W2 ** 2).sum()
    cost.name = 'cost_with_regularization'
    
    mcr = MisclassificationRate().apply(y.argmax(axis=1), y_hat)
    mcr.name = "misclassification rate"
    
    return cg,(W1,W2),cost,mcr

In [42]:
cg, (W1,W2), cost, mcr = makeGraph()

main_loop = MainLoop(data_stream = data_stream, 
                     algorithm   = GradientDescent(
                                    cost=cost, 
                                    parameters=cg.parameters,
                                    step_rule=Scale(learning_rate=0.1)),
                      extensions = [
                        DataStreamMonitoring(variables=[cost, mcr], data_stream=data_stream_test), 
                        FinishAfter(after_n_epochs=10), 
                        Printing(),
                        #TrainingDataMonitoring([cost,], after_batch=True),
                      ]
)
main_loop.run()


-------------------------------------------------------------------------------
BEFORE FIRST EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: True
	 epochs_done: 0
	 iterations_done: 0
	 received_first_batch: False
	 resumed_from: None
	 training_started: True
Log records from the iteration 0:
	 cost_with_regularization: 0.69959283783
	 misclassification rate: 0.515


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 1
	 iterations_done: 130
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 130:
	 cost_with_regularization: 0.620252515407
	 misclassification rate: 0.1023


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 2
	 iterations_done: 260
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 260:
	 cost_with_regularization: 0.283540207938
	 misclassification rate: 0.08


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 3
	 iterations_done: 390
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 390:
	 cost_with_regularization: 0.21732529216
	 misclassification rate: 0.0275


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 4
	 iterations_done: 520
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 520:
	 cost_with_regularization: 0.200206408557
	 misclassification rate: 0.0234


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 5
	 iterations_done: 650
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 650:
	 cost_with_regularization: 0.193827570941
	 misclassification rate: 0.0224


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 6
	 iterations_done: 780
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 780:
	 cost_with_regularization: 0.190562662214
	 misclassification rate: 0.0203


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 7
	 iterations_done: 910
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 910:
	 cost_with_regularization: 0.188616155387
	 misclassification rate: 0.019


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 8
	 iterations_done: 1040
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1040:
	 cost_with_regularization: 0.187379148901
	 misclassification rate: 0.0182


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 9
	 iterations_done: 1170
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1170:
	 cost_with_regularization: 0.186563359277
	 misclassification rate: 0.0182


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 10
	 iterations_done: 1300
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1300:
	 cost_with_regularization: 0.186008641756
	 misclassification rate: 0.0182
	 training_finish_requested: True


-------------------------------------------------------------------------------
TRAINING HAS BEEN FINISHED:
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 10
	 iterations_done: 1300
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1300:
	 cost_with_regularization: 0.186008641756
	 misclassification rate: 0.0182
	 training_finish_requested: True
	 training_finished: True


In [44]:
import matplotlib.pyplot as plt


def hinton(matrix, max_weight=None, ax=None):
    """Draw Hinton diagram for visualizing a weight matrix."""
    ax = ax if ax is not None else plt.gca()

    if not max_weight:
        max_weight = 2**np.ceil(np.log(np.abs(matrix).max())/np.log(2))

    ax.patch.set_facecolor('gray')
    ax.set_aspect('equal', 'box')
    ax.xaxis.set_major_locator(plt.NullLocator())
    ax.yaxis.set_major_locator(plt.NullLocator())

    for (x, y), w in np.ndenumerate(matrix):
        color = 'white' if w > 0 else 'black'
        size = np.sqrt(np.abs(w))
        rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
                             facecolor=color, edgecolor=color)
        ax.add_patch(rect)

    ax.autoscale_view()
    ax.invert_yaxis()
#print W1.get_value()
hinton(W1.get_value())
plt.show()
hinton(W2.get_value())
plt.show()



In [47]:
cg, (W1,W2), cost, mcr = makeGraph()
main_loop = MainLoop(data_stream = data_stream, 
                     algorithm   = GradientDescent(
                                        cost=cost, 
                                        parameters=cg.parameters,
                                        step_rule=AdaGrad()),
                    extensions = [
                        DataStreamMonitoring(variables=[cost, mcr], data_stream=data_stream_test), 
                        FinishAfter(after_n_epochs=20), 
                        Printing(),
                        #TrainingDataMonitoring([cost,], after_batch=True),
                      ]
)
main_loop.run()


-------------------------------------------------------------------------------
BEFORE FIRST EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: True
	 epochs_done: 0
	 iterations_done: 0
	 received_first_batch: False
	 resumed_from: None
	 training_started: True
Log records from the iteration 0:
	 cost_with_regularization: 0.702552455124
	 misclassification rate: 0.515


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 1
	 iterations_done: 130
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 130:
	 cost_with_regularization: 0.640689906044
	 misclassification rate: 0.1123


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 2
	 iterations_done: 260
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 260:
	 cost_with_regularization: 0.565039684348
	 misclassification rate: 0.1116


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 3
	 iterations_done: 390
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 390:
	 cost_with_regularization: 0.502925224399
	 misclassification rate: 0.1126


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 4
	 iterations_done: 520
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 520:
	 cost_with_regularization: 0.458707586839
	 misclassification rate: 0.1085


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 5
	 iterations_done: 650
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 650:
	 cost_with_regularization: 0.426959709602
	 misclassification rate: 0.103


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 6
	 iterations_done: 780
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 780:
	 cost_with_regularization: 0.403076199155
	 misclassification rate: 0.0994


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 7
	 iterations_done: 910
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 910:
	 cost_with_regularization: 0.384273697757
	 misclassification rate: 0.0933


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 8
	 iterations_done: 1040
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1040:
	 cost_with_regularization: 0.368939790471
	 misclassification rate: 0.0858


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 9
	 iterations_done: 1170
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1170:
	 cost_with_regularization: 0.356105551651
	 misclassification rate: 0.0786


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 10
	 iterations_done: 1300
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1300:
	 cost_with_regularization: 0.345154057569
	 misclassification rate: 0.0713


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 11
	 iterations_done: 1430
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1430:
	 cost_with_regularization: 0.335669374797
	 misclassification rate: 0.0626


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 12
	 iterations_done: 1560
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1560:
	 cost_with_regularization: 0.32735705967
	 misclassification rate: 0.0581


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 13
	 iterations_done: 1690
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1690:
	 cost_with_regularization: 0.320000392575
	 misclassification rate: 0.0501


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 14
	 iterations_done: 1820
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1820:
	 cost_with_regularization: 0.313434946638
	 misclassification rate: 0.0486


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 15
	 iterations_done: 1950
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1950:
	 cost_with_regularization: 0.307532986165
	 misclassification rate: 0.0437


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 16
	 iterations_done: 2080
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2080:
	 cost_with_regularization: 0.302193406938
	 misclassification rate: 0.0409


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 17
	 iterations_done: 2210
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2210:
	 cost_with_regularization: 0.29733496368
	 misclassification rate: 0.0367


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 18
	 iterations_done: 2340
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2340:
	 cost_with_regularization: 0.292891542772
	 misclassification rate: 0.0347


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 19
	 iterations_done: 2470
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2470:
	 cost_with_regularization: 0.288808763333
	 misclassification rate: 0.0324


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 20
	 iterations_done: 2600
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2600:
	 cost_with_regularization: 0.285041473737
	 misclassification rate: 0.0316
	 training_finish_requested: True


-------------------------------------------------------------------------------
TRAINING HAS BEEN FINISHED:
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 20
	 iterations_done: 2600
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2600:
	 cost_with_regularization: 0.285041473737
	 misclassification rate: 0.0316
	 training_finish_requested: True
	 training_finished: True


In [48]:
cg, (W1,W2), cost, mcr = makeGraph()
main_loop = MainLoop(data_stream = data_stream, 
                     algorithm   = GradientDescent(
                                        cost=cost, 
                                        parameters=cg.parameters,
                                        step_rule=Adam()),
                      extensions = [
                        DataStreamMonitoring(variables=[cost, mcr], data_stream=data_stream_test), 
                        FinishAfter(after_n_epochs=20), 
                        Printing(),
                        #TrainingDataMonitoring([cost,], after_batch=True),
                      ]
)
main_loop.run()


-------------------------------------------------------------------------------
BEFORE FIRST EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: True
	 epochs_done: 0
	 iterations_done: 0
	 received_first_batch: False
	 resumed_from: None
	 training_started: True
Log records from the iteration 0:
	 cost_with_regularization: 0.6988425957
	 misclassification rate: 0.515


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 1
	 iterations_done: 130
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 130:
	 cost_with_regularization: 0.262812283985
	 misclassification rate: 0.0239


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 2
	 iterations_done: 260
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 260:
	 cost_with_regularization: 0.209310776135
	 misclassification rate: 0.0198


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 3
	 iterations_done: 390
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 390:
	 cost_with_regularization: 0.193854598557
	 misclassification rate: 0.0185


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 4
	 iterations_done: 520
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 520:
	 cost_with_regularization: 0.188016365901
	 misclassification rate: 0.0185


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 5
	 iterations_done: 650
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 650:
	 cost_with_regularization: 0.18565258418
	 misclassification rate: 0.0185


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 6
	 iterations_done: 780
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 780:
	 cost_with_regularization: 0.184669017289
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 7
	 iterations_done: 910
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 910:
	 cost_with_regularization: 0.184248923454
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 8
	 iterations_done: 1040
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1040:
	 cost_with_regularization: 0.184060206661
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 9
	 iterations_done: 1170
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1170:
	 cost_with_regularization: 0.183967429941
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 10
	 iterations_done: 1300
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1300:
	 cost_with_regularization: 0.183915845187
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 11
	 iterations_done: 1430
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1430:
	 cost_with_regularization: 0.183883338829
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 12
	 iterations_done: 1560
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1560:
	 cost_with_regularization: 0.183860739376
	 misclassification rate: 0.0169


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 13
	 iterations_done: 1690
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1690:
	 cost_with_regularization: 0.183843969465
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 14
	 iterations_done: 1820
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1820:
	 cost_with_regularization: 0.183831003202
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 15
	 iterations_done: 1950
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 1950:
	 cost_with_regularization: 0.183820699407
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 16
	 iterations_done: 2080
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2080:
	 cost_with_regularization: 0.18381234366
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 17
	 iterations_done: 2210
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2210:
	 cost_with_regularization: 0.183805455166
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 18
	 iterations_done: 2340
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2340:
	 cost_with_regularization: 0.183799695302
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 19
	 iterations_done: 2470
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2470:
	 cost_with_regularization: 0.183794818421
	 misclassification rate: 0.0164


-------------------------------------------------------------------------------
AFTER ANOTHER EPOCH
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 20
	 iterations_done: 2600
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2600:
	 cost_with_regularization: 0.183790642493
	 misclassification rate: 0.0164
	 training_finish_requested: True


-------------------------------------------------------------------------------
TRAINING HAS BEEN FINISHED:
-------------------------------------------------------------------------------
Training status:
	 batch_interrupt_received: False
	 epoch_interrupt_received: False
	 epoch_started: False
	 epochs_done: 20
	 iterations_done: 2600
	 received_first_batch: True
	 resumed_from: None
	 training_started: True
Log records from the iteration 2600:
	 cost_with_regularization: 0.183790642493
	 misclassification rate: 0.0164
	 training_finish_requested: True
	 training_finished: True


In [ ]: