This commit is contained in:
Carl Pearson
2016-11-16 16:52:10 -06:00
parent 8850a53f5a
commit 3968ac642a

View File

@@ -74,6 +74,11 @@ class Model(object):
self.h = h self.h = h
self.dh = dh self.dh = dh
self.w1_v = np.zeros(self.w1.shape)
self.w2_v = np.zeros(self.w2.shape)
self.b1_v = np.zeros(self.b1.shape)
self.b2_v = np.zeros(self.b2.shape)
def z1(self, x): def z1(self, x):
return self.w1 * x + self.b1 return self.w1 * x + self.b1
@@ -136,7 +141,6 @@ class Model(object):
self.b1 -= ETA * b1_grad self.b1 -= ETA * b1_grad
self.w2 -= ETA * w2_grad self.w2 -= ETA * w2_grad
self.w1 -= ETA * w1_grad self.w1 -= ETA * w1_grad
return return
def backward_minibatch(self, batch, ETA): def backward_minibatch(self, batch, ETA):
@@ -158,9 +162,26 @@ class Model(object):
self.b1 -= ETA * b1_grad / len(batch) self.b1 -= ETA * b1_grad / len(batch)
self.w2 -= ETA * w2_grad / len(batch) self.w2 -= ETA * w2_grad / len(batch)
self.w1 -= ETA * w1_grad / len(batch) self.w1 -= ETA * w1_grad / len(batch)
return return
def SGDm(self, training_samples, ETA):
alpha = 0.99
for sample in training_samples:
sample_input = sample[0]
sample_output = sample[1]
self.b2_v = alpha * self.b2_v + ETA * self.dLdb2(sample_input, sample_output)
self.w2_v = alpha * self.w2_v + ETA * self.dLdw2(sample_input, sample_output)
self.b1_v = alpha * self.b1_v + ETA * self.dLdb1(sample_input, sample_output)
self.w1_v = alpha * self.w1_v + ETA * self.dLdw1(sample_input, sample_output)
self.b2 -= self.b2_v
self.b1 -= self.b1_v
self.w2 -= self.w2_v
self.w1 -= self.w1_v
return
def evaluate(model, samples): def evaluate(model, samples):
"""Report the loss function over the data""" """Report the loss function over the data"""
@@ -179,7 +200,7 @@ MODEL = Model(10, sigmoid, d_sigmoid, DATA_TYPE)
# Train the model with some training data # Train the model with some training data
TRAINING_ITERS = 5000 TRAINING_ITERS = 5000
LEARNING_RATE = 0.002 LEARNING_RATE = 0.0005
TRAINING_SUBSET_SIZE = len(TRAIN_DATA) TRAINING_SUBSET_SIZE = len(TRAIN_DATA)
print TRAINING_SUBSET_SIZE print TRAINING_SUBSET_SIZE
@@ -196,8 +217,11 @@ for training_iter in range(TRAINING_ITERS):
# Apply backpropagation # Apply backpropagation
# MODEL.backward(training_subset, LEARNING_RATE) # MODEL.backward(training_subset, LEARNING_RATE)
# Apply backpropagation
# MODEL.SGDm(training_subset, LEARNING_RATE)
# Apply backprop with minibatch # Apply backprop with minibatch
BATCH_SIZE = 4 BATCH_SIZE = 1
for i in range(0, len(training_subset), BATCH_SIZE): for i in range(0, len(training_subset), BATCH_SIZE):
batch = training_subset[i:min(i+BATCH_SIZE, len(training_subset))] batch = training_subset[i:min(i+BATCH_SIZE, len(training_subset))]
# print batch # print batch