Skip to content

Commit 1479874

Browse files
committed
python: support hidden biases
1 parent e348895 commit 1479874

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

python/nplm.py

+24-2
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ def __init__(self, ngram_size, input_vocab_size, output_vocab_size, input_embedd
3131
self.input_embeddings = numpy.zeros((input_vocab_size, input_embedding_dimension))
3232
if not num_hidden:
3333
self.hidden1_weights = numpy.zeros((output_embedding_dimension, (ngram_size-1)*input_embedding_dimension))
34+
self.hidden1_biases = numpy.zeros((output_embedding_dimension, 1))
3435
self.hidden2_weights = numpy.zeros((1, 1))
36+
self.hidden2_biases = numpy.zeros((1, 1))
3537
else:
3638
self.hidden1_weights = numpy.zeros((num_hidden, (ngram_size-1)*input_embedding_dimension))
39+
self.hidden1_biases = numpy.zeros((num_hidden, 1))
3740
self.hidden2_weights = numpy.zeros((output_embedding_dimension, num_hidden))
41+
self.hidden2_biases = numpy.zeros((output_embedding_dimension, 1))
3842
self.output_weights = numpy.zeros((output_vocab_size, output_embedding_dimension))
3943
self.output_biases = numpy.zeros((output_vocab_size, 1))
4044

@@ -43,17 +47,19 @@ def uniform(m):
4347
m[:,:] = numpy.random.uniform(-r, r, m.shape)
4448
uniform(self.input_embeddings)
4549
uniform(self.hidden1_weights)
50+
uniform(self.hidden1_biases)
4651
uniform(self.hidden2_weights)
52+
uniform(self.hidden2_biases)
4753
uniform(self.output_weights)
4854
uniform(self.output_biases)
4955

5056
def forward_prop(self, inputs, output=None, normalize=True):
5157
u = numpy.bmat([[self.input_embeddings.T * ui] for ui in inputs])
52-
h1 = numpy.maximum(0., self.hidden1_weights * u)
58+
h1 = numpy.maximum(0., self.hidden1_weights * u + self.hidden1_biases)
5359
if not self.num_hidden:
5460
h2 = h1
5561
else:
56-
h2 = numpy.maximum(0., self.hidden2_weights * h1)
62+
h2 = numpy.maximum(0., self.hidden2_weights * h1 + self.hidden2_biases)
5763

5864
if output is None:
5965
o = self.output_weights * h2 + self.output_biases
@@ -119,9 +125,15 @@ def write_vector(m):
119125
outfile.write("\\hidden_weights 1\n")
120126
write_matrix(self.hidden1_weights)
121127

128+
outfile.write("\\hidden_biases 1\n")
129+
write_matrix(self.hidden1_biases)
130+
122131
outfile.write("\\hidden_weights 2\n")
123132
write_matrix(self.hidden2_weights)
124133

134+
outfile.write("\\hidden_biases 2\n")
135+
write_matrix(self.hidden2_biases)
136+
125137
outfile.write("\\output_weights\n")
126138
write_matrix(self.output_weights)
127139

@@ -207,11 +219,21 @@ def read_matrix(lines, m, n, out=None):
207219
read_matrix(lines, m.output_embedding_dimension, (m.ngram_size-1)*m.input_embedding_dimension, out=m.hidden1_weights)
208220
else:
209221
read_matrix(lines, m.num_hidden, (m.ngram_size-1)*m.input_embedding_dimension, out=m.hidden1_weights)
222+
elif section == "\\hidden_biases 1":
223+
if not m.num_hidden:
224+
read_matrix(lines, m.output_embedding_dimension, 1, out=m.hidden1_biases)
225+
else:
226+
read_matrix(lines, m.num_hidden, 1, out=m.hidden1_biases)
210227
elif section == "\\hidden_weights 2":
211228
if not m.num_hidden:
212229
read_matrix(lines, 1, 1, out=m.hidden2_weights)
213230
else:
214231
read_matrix(lines, m.output_embedding_dimension, m.num_hidden, out=m.hidden2_weights)
232+
elif section == "\\hidden_biases 2":
233+
if not m.num_hidden:
234+
read_matrix(lines, 1, 1, out=m.hidden2_biases)
235+
else:
236+
read_matrix(lines, m.output_embedding_dimension, 1, out=m.hidden2_biases)
215237
elif section == "\\output_weights":
216238
read_matrix(lines, m.output_vocab_size, m.output_embedding_dimension, out=m.output_weights)
217239
elif section == "\\output_biases":

0 commit comments

Comments
 (0)