Mercurial > pylearn
annotate doc/v2_planning/arch_src/plugin_JB_main.py @ 1212:478bb1f8215c
plugin_JB - added SPAWN control element and demo program
author | James Bergstra <bergstrj@iro.umontreal.ca> |
---|---|
date | Wed, 22 Sep 2010 01:37:55 -0400 |
parents | |
children | 9fac28d80fb7 |
rev | line source |
---|---|
1212
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
1 """plugin_JB_main - main functions illustrating control flow library""" |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
2 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
3 from plugin_JB import * #TODO: don't do this |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
4 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
5 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
6 #################################################### |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
7 # [Dummy] Components involved in learning algorithms |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
8 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
9 class Dataset(object): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
10 def __init__(self, data): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
11 self.pos = 0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
12 self.data = data |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
13 def next(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
14 rval = self.data[self.pos] |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
15 self.pos += 1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
16 if self.pos == len(self.data): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
17 self.pos = 0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
18 return rval |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
19 def seek(self, pos): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
20 self.pos = pos |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
21 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
22 class KFold(object): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
23 def __init__(self, data, K): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
24 self.data = data |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
25 self.k = -1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
26 self.scores = [None]*K |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
27 self.K = K |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
28 def next_fold(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
29 self.k += 1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
30 self.data.seek(0) # restart the stream |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
31 def next(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
32 #TODO: skip the examples that are ommitted in this split |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
33 return self.data.next() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
34 def init_test(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
35 pass |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
36 def next_test(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
37 return self.data.next() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
38 def test_size(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
39 return 5 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
40 def store_scores(self, scores): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
41 self.scores[self.k] = scores |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
42 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
43 def prog(self, clear, train, test): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
44 return REPEAT(self.K, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
45 CALL(self.next_fold), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
46 clear, |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
47 train, |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
48 CALL(self.init_test), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
49 BUFFER_REPEAT(self.test_size(), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
50 SEQ([ CALL(self.next_test), test])), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
51 FILT(self.store_scores) ]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
52 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
53 class PCA_Analysis(object): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
54 def __init__(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
55 self.clear() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
56 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
57 def clear(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
58 self.mean = 0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
59 self.eigvecs=0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
60 self.eigvals=0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
61 def analyze(self, X): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
62 self.mean = numpy.mean(X, axis=0) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
63 self.eigvecs=1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
64 self.eigvals=1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
65 def filt(self, X): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
66 return (X - self.mean) * self.eigvecs #TODO: divide by root eigvals? |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
67 def pseudo_inverse(self, Y): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
68 return Y |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
69 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
70 class Layer(object): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
71 def __init__(self, w): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
72 self.w = w |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
73 def filt(self, x): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
74 return self.w*x |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
75 def clear(self): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
76 self.w =0 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
77 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
78 def cd1_update(X, layer, lr): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
79 # update self.layer from observation X |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
80 layer.w += X.mean() * lr #TODO: not exactly correct math! |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
81 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
82 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
83 ############################################################### |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
84 # Example algorithms written in this control flow mini-language |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
85 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
86 def main_weave(): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
87 # Uses weave to demonstrate the interleaving of two bufferings of a single stream |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
88 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
89 l = [0] |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
90 def f(a): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
91 print l |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
92 l[0] += a |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
93 return l[0] |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
94 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
95 print WEAVE(1, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
96 BUFFER_REPEAT(3,CALL(f,1)), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
97 BUFFER_REPEAT(5,CALL(f,1)), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
98 ]).run() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
99 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
100 def main_weave_popen(): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
101 # Uses weave and Popen to demonstrate the control of a program with some asynchronous |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
102 # parallelism |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
103 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
104 p = WEAVE(2,[ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
105 SEQ([POPEN(['sleep', '5']), PRINT('done 1')]), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
106 SEQ([POPEN(['sleep', '10']), PRINT('done 2')]), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
107 LOOP([ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
108 CALL(print_obj, 'polling...'), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
109 CALL(time.sleep, 1)])]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
110 # The LOOP would forever if the WEAVE were not configured to stop after 2 of its elements |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
111 # complete. |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
112 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
113 p.run() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
114 # Note that the program can be run multiple times... |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
115 p.run() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
116 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
117 def main_spawn(): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
118 # illustate the use of SPAWN to drive a set of control programs |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
119 # in other processes |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
120 data1 = {0:"blah data1"} |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
121 data2 = {1:"foo data2"} |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
122 p = WEAVE(2,[ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
123 SPAWN(data1, REPEAT(3, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
124 CALL(importable_fn, data1), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
125 PRINT("hello from 1")])), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
126 SPAWN(data2, REPEAT(1, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
127 CALL(importable_fn, data2), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
128 PRINT("hello from 2")])), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
129 LOOP([ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
130 CALL(print_obj, 'polling...'), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
131 CALL(time.sleep, 0.5)])]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
132 print 'BEFORE' |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
133 print data1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
134 print data2 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
135 p.run() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
136 print 'AFTER' |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
137 print data1 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
138 print data2 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
139 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
140 def main_kfold_dbn(): |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
141 # Uses many of the control-flow elements to define the k-fold evaluation of a dbn |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
142 # The algorithm is not quite right, but the example shows off all of the required |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
143 # control-flow elements I think. |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
144 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
145 # create components |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
146 dataset = Dataset(numpy.random.RandomState(123).randn(13,1)) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
147 pca = PCA_Analysis() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
148 layer1 = Layer(w=4) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
149 layer2 = Layer(w=3) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
150 kf = KFold(dataset, K=10) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
151 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
152 pca_batchsize=1000 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
153 cd_batchsize = 5 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
154 n_cd_updates_layer1 = 10 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
155 n_cd_updates_layer2 = 10 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
156 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
157 # create algorithm |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
158 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
159 train_pca = SEQ([ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
160 BUFFER_REPEAT(pca_batchsize, CALL(kf.next)), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
161 FILT(pca.analyze)]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
162 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
163 train_layer1 = REPEAT(n_cd_updates_layer1, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
164 BUFFER_REPEAT(cd_batchsize, CALL(kf.next)), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
165 FILT(pca.filt), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
166 FILT(cd1_update, layer=layer1, lr=.01)]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
167 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
168 train_layer2 = REPEAT(n_cd_updates_layer2, [ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
169 BUFFER_REPEAT(cd_batchsize, CALL(kf.next)), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
170 FILT(pca.filt), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
171 FILT(layer1.filt), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
172 FILT(cd1_update, layer=layer2, lr=.01)]) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
173 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
174 kfold_prog = kf.prog( |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
175 clear = SEQ([ # FRAGMENT 1: this bit is the reset/clear stage |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
176 CALL(pca.clear), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
177 CALL(layer1.clear), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
178 CALL(layer2.clear), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
179 ]), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
180 train = SEQ([ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
181 train_pca, |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
182 WEAVE(1, [ # Silly example of how to do debugging / loggin with WEAVE |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
183 train_layer1, |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
184 LOOP(CALL(print_obj_attr, layer1, 'w'))]), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
185 train_layer2, |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
186 ]), |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
187 test=SEQ([ |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
188 FILT(pca.filt), # may want to allow this SEQ to be |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
189 FILT(layer1.filt), # optimized into a shorter one that |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
190 FILT(layer2.filt), # compiles these calls together with |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
191 FILT(numpy.mean)])) # Theano |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
192 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
193 pkg1 = dict(prog=kfold_prog, kf=kf) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
194 pkg2 = copy.deepcopy(pkg1) # programs can be copied |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
195 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
196 try: |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
197 pkg3 = cPickle.loads(cPickle.dumps(pkg1)) |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
198 except: |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
199 print >> sys.stderr, "pickling doesnt work, but it can be fixed I think" |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
200 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
201 pkg = pkg2 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
202 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
203 # running a program updates the variables in its package, but not the other package |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
204 pkg['prog'].run() |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
205 print pkg['kf'].scores |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
206 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
207 |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
208 if __name__ == '__main__': |
478bb1f8215c
plugin_JB - added SPAWN control element and demo program
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
209 sys.exit(eval(sys.argv[1])) |