Skip to content

Commit 58018c1

Browse files
committed
hot fix
1 parent 06c1e36 commit 58018c1

4 files changed

Lines changed: 23 additions & 10 deletions

File tree

classes/neural_net.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ def predict(self, batch, label):
5454
next_input *= self.dropout_p
5555

5656
result = np.array(next_input)
57-
loss, delta = utils.softmax_loss(result, label)
57+
if self.loss == 'softmax':
58+
loss, delta = utils.softmax_loss(result, label)
59+
elif self.loss == 'logistic':
60+
loss, delta = utils.logistic_loss(result, label)
5861

5962
max_result = np.argmax(result, axis=0)
6063
correct_count = np.sum(max_result == label)

classes/neuron.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
class Neuron(object):
55
def __init__(self, input_size, bias=0.0):
66
self.weights = (np.random.randn(input_size) * np.sqrt(2.0/input_size)).astype(np.float32)
7-
self.bias = np.float32(bias)
7+
self.b = np.float32(bias)
88
self.last_input = None
99
self.delta = 0
1010
self.m = 0
1111
self.v = 0
1212

1313
def strength(self, values):
14-
return np.dot(self.weights, values) + self.bias
14+
return np.dot(self.weights, values) + self.b
1515

1616
def regularization(self):
1717
return np.sum(np.square(self.weights))

classes/utils.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def adam_update(neurons, lr, t, l2_reg=0, beta1=np.float32(0.9), beta2=np.float3
6565
for n in neurons:
6666
l2 = l2_reg * n.weights
6767
dx = (n.last_input.dot(n.delta)).T
68+
dBias = np.average(n.delta)
6869

6970
n.m = beta1 * n.m + (1 - beta1) * dx
7071
n.v = beta2 * n.v + (1 - beta2)*(dx**2)
@@ -74,33 +75,40 @@ def adam_update(neurons, lr, t, l2_reg=0, beta1=np.float32(0.9), beta2=np.float3
7475
n.v /= np.float32(1-beta2**t)
7576

7677
n.weights -= lr * n.m / (np.sqrt(n.v) + 1e-8) + l2
78+
n.b -= lr * dBias
7779

7880
def nag_update(neurons, lr, l2_reg=0, mu=np.float32(0.9)):
7981
for n in neurons:
8082
l2 = l2_reg * n.weights
8183
dx = (n.last_input.dot(n.delta)).T
84+
dBias = np.average(n.delta)
8285

8386
n.v_prev = n.v
8487
n.v = mu * n.v - lr * dx
8588

8689
n.weights += -mu * n.v_prev + (1 + mu) * n.v - l2
90+
n.b -= lr * dBias
8791

8892
def momentum_update(neurons, lr, l2_reg=0, mu=np.float32(0.9)):
8993
for n in neurons:
9094
l2 = l2_reg * n.weights
9195
dx = (n.last_input.dot(n.delta)).T
96+
dBias = np.average(n.delta)
9297

9398
n.v = mu * n.v - lr * dx
9499

95100
n.weights += n.v - l2
101+
n.b -= lr * dBias
96102

97103

98104
def vanila_update(neurons, lr, l2_reg=0):
99105
for n in neurons:
100106
l2 = l2_reg * n.weights
101-
d = (n.last_input.dot(n.delta)).T
107+
dx = (n.last_input.dot(n.delta)).T
108+
dBias = np.average(n.delta)
102109

103-
n.weights -= lr * d + l2
110+
n.weights -= lr * dx + l2
111+
n.b -= lr * dBias
104112

105113
def sigmoid(input):
106114
return 1/(1+np.exp(-input))

example/cifar-10-batches-py/main.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import sys, os
2+
sys.path.insert(1, os.path.split(os.path.split(sys.path[0])[0])[0])
13
import cPickle as pkl
24
import numpy as np
35
from sklearn import preprocessing
@@ -11,15 +13,15 @@ def unpickle(file):
1113
return dict
1214

1315
le = preprocessing.LabelEncoder()
14-
le.classes_ = unpickle('batches.meta')['label_names']
16+
le.classes_ = unpickle(sys.path[0] + '/batches.meta')['label_names']
1517

1618
train_images = None
1719
train_labels = []
1820

1921
test_images = None
2022
test_labels = []
2123
for i in xrange(1, 6):
22-
data = unpickle('data_batch_'+str(i))
24+
data = unpickle(sys.path[0] + '/data_batch_'+str(i))
2325
if train_images is None:
2426
train_images = data['data']
2527
else:
@@ -39,7 +41,7 @@ def unpickle(file):
3941
train_images[:, 1] -= g_mean
4042
train_images[:, 2] -= b_mean
4143

42-
data = unpickle('test_batch')
44+
data = unpickle(sys.path[0] + '/test_batch')
4345
test_images = data['data'].reshape(-1, 3, 32, 32)
4446
test_images = test_images.astype(np.float32)
4547
test_images /= np.float32(255)
@@ -52,8 +54,8 @@ def unpickle(file):
5254

5355
lr = 1e-4
5456
dropout_percent = 0.5
55-
l2_reg = 5e-6
56-
learning_rate_decay = np.float32(98e-2)
57+
l2_reg = 4e-6
58+
learning_rate_decay = np.float32(99e-2)
5759
batch_size = 1
5860

5961
cnn = NeuralNetwork(train_images.shape[1:],

0 commit comments

Comments
 (0)