.
This commit is contained in:
32
network.py
32
network.py
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user