PyHierarchicalTsetlinMachineCUDA 0.3.2__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PKG-INFO +1 -1
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA/kernels.py +19 -1
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA/tm.py +35 -12
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA.egg-info/PKG-INFO +1 -1
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/setup.py +1 -1
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/LICENSE +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA/__init__.py +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA/tools.py +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA/utils.py +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA.egg-info/SOURCES.txt +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA.egg-info/dependency_links.txt +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA.egg-info/requires.txt +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/PyHierarchicalTsetlinMachineCUDA.egg-info/top_level.txt +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/README.md +0 -0
- {PyHierarchicalTsetlinMachineCUDA-0.3.2 → PyHierarchicalTsetlinMachineCUDA-0.3.3}/setup.cfg +0 -0
|
@@ -41,6 +41,21 @@ code_header = """
|
|
|
41
41
|
code_update = """
|
|
42
42
|
extern "C"
|
|
43
43
|
{
|
|
44
|
+
|
|
45
|
+
// Counts number of include actions for a given clause component
|
|
46
|
+
__device__ inline int number_of_include_actions(unsigned int *ta_state)
|
|
47
|
+
{
|
|
48
|
+
int number_of_include_actions = 0;
|
|
49
|
+
for (int k = 0; k < TA_CHUNKS_PER_LEAF-1; ++k) {
|
|
50
|
+
unsigned int ta_pos = k*STATE_BITS + STATE_BITS-1;
|
|
51
|
+
number_of_include_actions += __popc(ta_state[ta_pos]);
|
|
52
|
+
}
|
|
53
|
+
unsigned int ta_pos = (TA_CHUNKS_PER_LEAF-1)*STATE_BITS + STATE_BITS-1;
|
|
54
|
+
number_of_include_actions += __popc(ta_state[ta_pos] & FILTER_HIERARCHICAL);
|
|
55
|
+
|
|
56
|
+
return(number_of_include_actions);
|
|
57
|
+
}
|
|
58
|
+
|
|
44
59
|
// Increment the states of each of those 32 Tsetlin Automata flagged in the active bit vector.
|
|
45
60
|
__device__ inline void inc(unsigned int *ta_state, int chunk, unsigned int active)
|
|
46
61
|
{
|
|
@@ -140,6 +155,9 @@ code_update = """
|
|
|
140
155
|
if (curand_uniform(localState) <= update_probability) {
|
|
141
156
|
if (target*sign > 0) {
|
|
142
157
|
// Type I Feedback
|
|
158
|
+
|
|
159
|
+
int included_literals = number_of_include_actions(ta_state);
|
|
160
|
+
|
|
143
161
|
for (int ta_chunk = 0; ta_chunk < TA_CHUNKS_PER_LEAF; ++ta_chunk) {
|
|
144
162
|
// Generate random bit values
|
|
145
163
|
unsigned int la_feedback = 0;
|
|
@@ -149,7 +167,7 @@ code_update = """
|
|
|
149
167
|
}
|
|
150
168
|
}
|
|
151
169
|
|
|
152
|
-
if (component_output) {
|
|
170
|
+
if (component_output && included_literals <= LITERAL_BUDGET) {
|
|
153
171
|
#if BOOST_TRUE_POSITIVE_FEEDBACK == 1
|
|
154
172
|
inc(ta_state, ta_chunk, X[ta_chunk]);
|
|
155
173
|
#else
|
|
@@ -44,12 +44,13 @@ COALESCED_TM = 2
|
|
|
44
44
|
|
|
45
45
|
class CommonTsetlinMachine():
|
|
46
46
|
|
|
47
|
-
def __init__(self, number_of_clauses, T, s, q=1.0, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, hierarchy_structure=None, boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
47
|
+
def __init__(self, number_of_clauses, T, s, q=1.0, literal_budget=None, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, hierarchy_structure=None, boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
48
48
|
self.number_of_clauses = number_of_clauses
|
|
49
49
|
self.number_of_state_bits = number_of_state_bits
|
|
50
50
|
self.T = float(T)
|
|
51
51
|
self.s = s
|
|
52
52
|
self.q = q
|
|
53
|
+
self.literal_budget = literal_budget
|
|
53
54
|
self.no_clipping = no_clipping
|
|
54
55
|
self.constant_update_p = constant_update_p
|
|
55
56
|
self.binary_inference = binary_inference
|
|
@@ -92,6 +93,9 @@ class CommonTsetlinMachine():
|
|
|
92
93
|
self.number_of_literals_per_leaf = self.number_of_features_per_leaf
|
|
93
94
|
self.number_of_literal_chunks_per_leaf = int((self.number_of_literals_per_leaf - 1) / 32 + 1)
|
|
94
95
|
|
|
96
|
+
if self.literal_budget == None:
|
|
97
|
+
self.literal_budget = self.number_of_literals_per_leaf
|
|
98
|
+
|
|
95
99
|
# Calculates the number of literal chunks for the full hierarchy
|
|
96
100
|
self.hierarchy_size[0] = self.number_of_literal_chunks_per_leaf * self.hierarchy_size[1]
|
|
97
101
|
|
|
@@ -130,6 +134,7 @@ class CommonTsetlinMachine():
|
|
|
130
134
|
#define S %f
|
|
131
135
|
#define THRESHOLD %d
|
|
132
136
|
#define Q %f
|
|
137
|
+
#define LITERAL_BUDGET %d
|
|
133
138
|
#define BINARY_INFERENCE %d
|
|
134
139
|
#define CONSTANT_UPDATE_P %d
|
|
135
140
|
#define AND_GROUP_NORMALIZATION %d
|
|
@@ -141,7 +146,7 @@ class CommonTsetlinMachine():
|
|
|
141
146
|
|
|
142
147
|
#define NEGATIVE_CLAUSES %d
|
|
143
148
|
#define FLIP_POLARITY %d
|
|
144
|
-
""" % (self.number_of_clauses, self.depth, self.hierarchy_size[1], self.number_of_ta_teams, self.number_of_literals_per_leaf, self.number_of_literal_chunks_per_leaf, self.number_of_literal_chunks, self.number_of_state_bits, self.boost_true_positive_feedback, self.s, self.T, self.q, self.binary_inference, self.constant_update_p, self.and_group_normalization, AND_GROUP, AND_ALTERNATIVES, OR_GROUP, OR_ALTERNATIVES, self.negative_clauses, self.flip_polarity)
|
|
149
|
+
""" % (self.number_of_clauses, self.depth, self.hierarchy_size[1], self.number_of_ta_teams, self.number_of_literals_per_leaf, self.number_of_literal_chunks_per_leaf, self.number_of_literal_chunks, self.number_of_state_bits, self.boost_true_positive_feedback, self.s, self.T, self.q, self.literal_budget, self.binary_inference, self.constant_update_p, self.and_group_normalization, AND_GROUP, AND_ALTERNATIVES, OR_GROUP, OR_ALTERNATIVES, self.negative_clauses, self.flip_polarity)
|
|
145
150
|
|
|
146
151
|
mod_prepare = SourceModule(parameters + kernels.code_header + kernels.code_prepare, no_extern_c=True)
|
|
147
152
|
self.prepare_weights = mod_prepare.get_function("prepare_weights")
|
|
@@ -648,9 +653,9 @@ class CommonTsetlinMachine():
|
|
|
648
653
|
|
|
649
654
|
|
|
650
655
|
class MultiOutputTsetlinMachine(CommonTsetlinMachine):
|
|
651
|
-
def __init__(self, number_of_clauses, T, s, q=1.0, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
656
|
+
def __init__(self, number_of_clauses, T, s, q=1.0, literal_budget=None, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
652
657
|
self.negative_clauses = 1
|
|
653
|
-
super().__init__(number_of_clauses, T, s, q=q, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
658
|
+
super().__init__(number_of_clauses, T, s, q=q, literal_budget=literal_budget, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
654
659
|
|
|
655
660
|
def fit(self, X, Y):
|
|
656
661
|
X = X.reshape(X.shape[0], X.shape[1], 1)
|
|
@@ -674,12 +679,29 @@ class MultiOutputTsetlinMachine(CommonTsetlinMachine):
|
|
|
674
679
|
return (self.score(X) >= 0).astype(np.uint32).transpose()
|
|
675
680
|
|
|
676
681
|
class MultiClassCoalescedTsetlinMachine(CommonTsetlinMachine):
|
|
677
|
-
def __init__(
|
|
682
|
+
def __init__(
|
|
683
|
+
self, number_of_clauses,
|
|
684
|
+
T,
|
|
685
|
+
s,
|
|
686
|
+
q=1.0,
|
|
687
|
+
literal_budget=None,
|
|
688
|
+
no_clipping=False,
|
|
689
|
+
constant_update_p=0,
|
|
690
|
+
binary_inference=False,
|
|
691
|
+
and_group_normalization=False,
|
|
692
|
+
hierarchy_structure=((AND_GROUP, 1)),
|
|
693
|
+
boost_true_positive_feedback=1,
|
|
694
|
+
number_of_state_bits=8,
|
|
695
|
+
append_negated=True,
|
|
696
|
+
grid=(16*13,1,1),
|
|
697
|
+
block=(128,1,1),
|
|
698
|
+
seed=None
|
|
699
|
+
):
|
|
678
700
|
self.negative_clauses = 1
|
|
679
701
|
self.tm_type = COALESCED_TM
|
|
680
702
|
self.flip_polarity = 1
|
|
681
703
|
|
|
682
|
-
super().__init__(number_of_clauses, T, s, q=q, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
704
|
+
super().__init__(number_of_clauses, T, s, q=q, literal_budget=literal_budget, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
683
705
|
|
|
684
706
|
def fit(self, X, Y):
|
|
685
707
|
X = X.reshape(X.shape[0], X.shape[1], 1)
|
|
@@ -706,11 +728,12 @@ class MultiClassCoalescedTsetlinMachine(CommonTsetlinMachine):
|
|
|
706
728
|
return np.argmax(self.score(X), axis=0)
|
|
707
729
|
|
|
708
730
|
class MultiClassTsetlinMachine:
|
|
709
|
-
def __init__(self, number_of_clauses, T, s, q=1.0, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, weighted_clauses=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
731
|
+
def __init__(self, number_of_clauses, T, s, q=1.0, literal_budget=None, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, weighted_clauses=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
710
732
|
self.number_of_clauses = number_of_clauses
|
|
711
733
|
self.T = T
|
|
712
734
|
self.s = s
|
|
713
735
|
self.q = q
|
|
736
|
+
self.literal_budget = literal_budget
|
|
714
737
|
self.no_clipping = no_clipping
|
|
715
738
|
self.constant_update_p = constant_update_p
|
|
716
739
|
self.binary_inference = binary_inference
|
|
@@ -732,7 +755,7 @@ class MultiClassTsetlinMachine:
|
|
|
732
755
|
if not self.configured:
|
|
733
756
|
self.tms = []
|
|
734
757
|
for i in range(self.number_of_outputs):
|
|
735
|
-
self.tms.append(TsetlinMachine(self.number_of_clauses, self.T, self.s, q=self.q, no_clipping=self.no_clipping, constant_update_p=self.constant_update_p, binary_inference=self.binary_inference, and_group_normalization=self.and_group_normalization, weighted_clauses=self.weighted_clauses, hierarchy_structure=self.hierarchy_structure, boost_true_positive_feedback=self.boost_true_positive_feedback, number_of_state_bits=self.number_of_state_bits, append_negated=self.append_negated, grid=self.grid, block=self.block, seed=self.seed+i))
|
|
758
|
+
self.tms.append(TsetlinMachine(self.number_of_clauses, self.T, self.s, q=self.q, literal_budget=self.literal_budget, no_clipping=self.no_clipping, constant_update_p=self.constant_update_p, binary_inference=self.binary_inference, and_group_normalization=self.and_group_normalization, weighted_clauses=self.weighted_clauses, hierarchy_structure=self.hierarchy_structure, boost_true_positive_feedback=self.boost_true_positive_feedback, number_of_state_bits=self.number_of_state_bits, append_negated=self.append_negated, grid=self.grid, block=self.block, seed=self.seed+i))
|
|
736
759
|
|
|
737
760
|
self.configured = True
|
|
738
761
|
|
|
@@ -798,7 +821,7 @@ class MultiClassTsetlinMachine:
|
|
|
798
821
|
self.configured = True
|
|
799
822
|
|
|
800
823
|
class TsetlinMachine(CommonTsetlinMachine):
|
|
801
|
-
def __init__(self, number_of_clauses, T, s, q=1.0, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, weighted_clauses=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
824
|
+
def __init__(self, number_of_clauses, T, s, q=1.0, literal_budget=None, no_clipping=False, constant_update_p=0, binary_inference=False, and_group_normalization=False, weighted_clauses=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
802
825
|
self.negative_clauses = 1
|
|
803
826
|
self.flip_polarity = 0
|
|
804
827
|
|
|
@@ -807,7 +830,7 @@ class TsetlinMachine(CommonTsetlinMachine):
|
|
|
807
830
|
else:
|
|
808
831
|
self.tm_type = VANILLA_TM
|
|
809
832
|
|
|
810
|
-
super().__init__(number_of_clauses, T, s, q=q, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
833
|
+
super().__init__(number_of_clauses, T, s, q=q, literal_budget=literal_budget, no_clipping=no_clipping, constant_update_p=constant_update_p, binary_inference=binary_inference, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
811
834
|
|
|
812
835
|
def fit(self, X, Y):
|
|
813
836
|
X = X.reshape(X.shape[0], X.shape[1], 1)
|
|
@@ -831,11 +854,11 @@ class TsetlinMachine(CommonTsetlinMachine):
|
|
|
831
854
|
return (self.score(X) >= 0).astype(np.int32)
|
|
832
855
|
|
|
833
856
|
class RegressionTsetlinMachine(CommonTsetlinMachine):
|
|
834
|
-
def __init__(self, number_of_clauses, T, s, and_group_normalization=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
857
|
+
def __init__(self, number_of_clauses, T, s, literal_budget=None, and_group_normalization=False, hierarchy_structure=((AND_GROUP, 1)), boost_true_positive_feedback=1, number_of_state_bits=8, append_negated=True, grid=(16*13,1,1), block=(128,1,1), seed=None):
|
|
835
858
|
self.negative_clauses = 0
|
|
836
859
|
self.flip_polarity = 0
|
|
837
860
|
|
|
838
|
-
super().__init__(number_of_clauses, T, s, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
861
|
+
super().__init__(number_of_clauses, T, s, literal_budget=literal_budget, and_group_normalization=and_group_normalization, hierarchy_structure=hierarchy_structure, boost_true_positive_feedback=boost_true_positive_feedback, number_of_state_bits=number_of_state_bits, append_negated=append_negated, grid=grid, block=block, seed=seed)
|
|
839
862
|
|
|
840
863
|
def fit(self, X, Y):
|
|
841
864
|
X = X.reshape(X.shape[0], X.shape[1], 1)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|