Skip to content

Commit 1f62578

Browse files
committed
Added code for benchmarking pybrain, arac and theano RNN implementations.
1 parent 85cc230 commit 1f62578

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

util/speedtest.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#!/usr/bin/env python2.6
2+
# -*- coding: utf-8 -*-
3+
4+
5+
__author__ = 'Justin S Bayer, [email protected]'
6+
7+
8+
import optparse
9+
import sys
10+
import time
11+
12+
import scipy
13+
14+
from rnn import RecurrentNetwork, LstmNetwork
15+
from pybrain.tools.shortcuts import buildNetwork
16+
from pybrain.structure import LSTMLayer, TanhLayer
17+
18+
19+
def make_optparse():
20+
parser = optparse.OptionParser()
21+
parser.add_option('--lstm', dest='lstm', action='store_true')
22+
return parser
23+
24+
25+
def theano(num_inpt, num_hidden, num_output, inpts, lstm=False):
26+
klass = LstmNetwork if lstm else RecurrentNetwork
27+
rnn = klass(num_inpt, num_hidden, num_output)
28+
29+
start = time.time()
30+
for inpt in inpts:
31+
rnn(inpt)
32+
return time.time() - start
33+
34+
35+
def pybrain(num_inpt, num_hidden, num_output, inpts, lstm=False):
36+
net = buildNetwork(num_inpt, num_hidden, num_output, recurrent=True,
37+
hiddenclass=LSTMLayer if lstm else TanhLayer,
38+
fast=False)
39+
start = time.time()
40+
for seq in inpts:
41+
net.reset()
42+
for inpt in seq:
43+
net.activate(inpt)
44+
return time.time() - start
45+
46+
47+
def pybrainarac(num_inpt, num_hidden, num_output, inpts, lstm=False):
48+
net = buildNetwork(num_inpt, num_hidden, num_output, recurrent=True,
49+
hiddenclass=LSTMLayer if lstm else TanhLayer,
50+
fast=True)
51+
start = time.time()
52+
for seq in inpts:
53+
net.reset()
54+
for inpt in seq:
55+
net.activate(inpt)
56+
return time.time() - start
57+
58+
59+
def main():
60+
options, args = make_optparse().parse_args()
61+
num_inpt = int(args[0])
62+
num_hidden = int(args[1])
63+
num_output = int(args[2])
64+
65+
print "Network stats"
66+
print "-" * 20
67+
print "Number of inputs: %i" % num_inpt
68+
print "Number of hidden: %i" % num_hidden
69+
print "Number of outputs: %i" % num_output
70+
71+
inpts = scipy.random.random((500, 100, num_inpt))
72+
73+
print
74+
print "Durations"
75+
print "-" * 20
76+
pybrain_dur = pybrain(num_inpt, num_hidden, num_output, inpts,
77+
lstm=options.lstm)
78+
print "Pybrain: %.2f" % pybrain_dur
79+
80+
pybrainarac_dur = pybrainarac(num_inpt, num_hidden, num_output, inpts,
81+
lstm=options.lstm)
82+
print "Pybrain \w arac: %.2f" % pybrainarac_dur
83+
84+
theano_dur = theano(num_inpt, num_hidden, num_output, inpts, lstm=options.lstm)
85+
print "Theano: %.2f" % theano_dur
86+
87+
print
88+
print "Ratios"
89+
print "-" * 20
90+
91+
print "Theano / PyBrain: %.2f" % (theano_dur / pybrain_dur)
92+
print "Theano / PyBrain+arac: %.2f" % (theano_dur / pybrainarac_dur)
93+
print "PyBrain+arac / PyBrain: %.2f" % (pybrainarac_dur / pybrain_dur)
94+
95+
return 0
96+
97+
98+
if __name__ == '__main__':
99+
sys.exit(main())
100+

0 commit comments

Comments
 (0)