0%

Example 3- A Real Example Logistic Regression with theano

Series

code example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import numpy
import numpy as np
import theano
import theano.tensor as T
rng = numpy.random

N = 400 # training sample size
feats = 784 # number of input variables

# generate a dataset: D = (input_values, target_class)
D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))
# (400, 784) (400,)
training_steps = 10000

# Declare Theano symbolic variables
x = T.dmatrix("x") # (400,784)
y = T.dvector("y") # (400,)

# initialize the weight vector w randomly
#
# this and the following bias variable b
# are shared so they keep their values
# between training iterations (updates)
w = theano.shared(rng.randn(feats), name="w") #vector (784,)

# initialize the bias term
b = theano.shared(0., name="b") #scalar ()

print("Initial model:")
print(w.get_value().shape)
print(b.get_value().shape)

# Construct Theano expression graph
p_1 = 1 / (1 + T.exp(-T.dot(x, w) - b)) # Probability that target = 1 = vector(400,)
prediction = p_1 > 0.5 # The prediction thresholded = vector(400,) of bool
xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1) # Cross-entropy loss function = vector(400,) of Cx for given x
cost = xent.mean() + 0.01 * (w ** 2).sum()# The cost to minimize = scalar f(x,y,w,b)
gw, gb = T.grad(cost, [w, b]) # Compute the gradient of the cost
# w.r.t weight vector w and
# bias term b
# (we shall return to this in a
# following section of this tutorial)

updates = [(w, w - 0.1 * gw),(b, b - 0.1 * gb)]
# Compile
train = theano.function(
inputs=[x,y],
outputs=[prediction, xent,cost],
updates= updates
)

predict = theano.function(inputs=[x], outputs=prediction)

# Train
for i in range(training_steps):
pred, xcent,cost_t = train(D[0], D[1])

prediction = predict(D[0]) # vector(400,) of bool


#a = np.array([1,2,3,4])
#b = np.array([2,2,4,3])
#np.mean( np.equal(a,b) ) #[0,1,0,0] 0.25

accuracy = 100* np.mean( np.equal(prediction,D[1]) )

print("Final model:")
print(w.get_value().shape)
print(b.get_value().shape)

print "\nCost = ",cost_t
print "Accuracy = ", accuracy,"%"

print("\ntarget values for D:")
#print(D[1])
print("prediction on D:")
#print(prediction)
Initial model:
(784,)
()
Final model:
(784,)
()

Cost =  0.121553645129
Accuracy =  100.0 %

target values for D:
prediction on D:

Reference

History

  • 20180807: created.