/
mnist-nolearn.py
95 lines (79 loc) · 2.86 KB
/
mnist-nolearn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from lasagne.nonlinearities import softmax
from nolearn.lasagne import NeuralNet
import matplotlib.pyplot as plt
from nolearn.lasagne.visualize import plot_conv_weights
from nolearn.lasagne import TrainSplit
import gzip
import cPickle as pickle
import os
import numpy as np
import sys
import re
import helper
import random
def get_net(num_epochs):
net = NeuralNet(
layers = [
('l_in', layers.InputLayer),
('l_conv1', layers.Conv2DLayer),
('l_pool1', layers.MaxPool2DLayer),
('l_conv2', layers.Conv2DLayer),
('l_pool2', layers.MaxPool2DLayer),
('l_hidden', layers.DenseLayer),
('l_out', layers.DenseLayer)
],
l_in_shape = (None, 1, 28, 28),
l_conv1_filter_size=(5,5), l_conv1_num_filters=10,
l_pool1_pool_size=(2,2),
l_conv2_filter_size=(5,5), l_conv2_num_filters=25,
l_pool2_pool_size=(2,2),
l_hidden_num_units=250, l_hidden_nonlinearity=lasagne.nonlinearities.rectify, l_hidden_W=lasagne.init.GlorotUniform(),
l_out_num_units=10, l_out_nonlinearity=lasagne.nonlinearities.softmax, l_out_W=lasagne.init.GlorotUniform(),
update=nesterov_momentum,
update_learning_rate=0.01,
update_momentum=0.9,
verbose=1,
max_epochs=num_epochs,
train_split=TrainSplit(eval_size=0.0)
)
return net
def train(args):
X_train = args["X_train"]
X_train = X_train.reshape( (X_train.shape[0], 1, 28, 28) )
X_train /= 255
y_train = np.asarray( args["y_train"].flatten(), dtype="int32" )
num_epochs = 1 if "num_epochs" not in args else args["num_epochs"]
net = get_net(num_epochs)
net.fit(X_train, y_train)
if "vis" in args and args["vis"] == True:
helper.plot_conv_activity( net.layers_[1], X_train[0:1] )
return net.get_all_params_values()
def describe(args, model):
return "my conv net"
def test(args, model):
X_test = args["X_test"]
X_test = X_test.reshape( (X_test.shape[0], 1, 28, 28) )
X_test /= 255
num_epochs = 1 if "num_epochs" not in args else args["num_epochs"]
net = get_net(num_epochs)
net.initialize()
net.load_params_from(model)
return net.predict_proba(X_test).tolist()
if __name__ == '__main__':
#net.initialize_layers()
f = gzip.open("mnist.pkl.gz")
args = pickle.load(f)
f.close()
#args["vis"] = True
args["num_epochs"] = 1
model_params = train(args)
args["X_test"] = args["X_train"]
predictions = test(args, model_params)
predicted_labels = []
actual_labels = args["y_train"].flatten().tolist()
for pred in predictions:
predicted_labels.append( np.argmax(pred) )
print "Accuracy is: %f" % (float( np.sum( np.equal(actual_labels, predicted_labels) ) ) / len(actual_labels))