Theano深度学习系列1

Theano深度学习第一课

最近将英文原版书籍《python for data analysis》看完,也将《scikit-learn Cookbook》例子实现完,对基本的机器学习有一定的了解,下面来学习强大的python深度学习库Theano以及keras。

首先直接上代码,接下来会慢慢解释该入门代码的真正含义,该入门是逻辑回归的实现。

import numpy
import theano
import theano.tensor as T
rng = numpy.random
N = 400
feats = 784s
D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))
training_steps = 10000
x = T.matrix('x')
y = T.vector('y')
w = theano.shared(rng.randn(feats), name='w')
b =theano.shared(0., name='b')
p_1 = 1 / (1 + T.exp(-T.dot(x, w) - b))
xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1)
cost = xent.mean() + 0.01 * (w ** 2).sum()
gw, gb = T.grad(cost, [w, b])
train = theano.function(inputs=[x,y], outputs=[prediction, xent],
                        updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))
predict = theano.function(inputs=[x], outputs=prediction)
for i in range(training_steps):
    pred, err = train(D[0], D[1])
print "Final model:"
print w.get_value(), b.get_value()
print "target values for D:", D[1]
print "prediction on D:", predict(D[0])

代码解释:
首先我们生成一个用来逻辑回归的模型。x,y,w,b的定义是theano中标准的定义方式,其中w,b是共享变量,为什么需要这种变量呢,原因是后期需要GPU编程,需要将cpu中的变量移动到GPU中去,前期不需要了解。

p_1 = 1 / (1 + T.exp(-T.dot(x, w) - b))

这句话的含义对应的数学表达式为

h=11+e(wx+b)

这里多了一个b什么意思,其实b可以看做是w0,原理与UFLDL上的逻辑回归表达式是一样的。

xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1)

对应的表达式为,这是代价函数的一部分

ylog(h(x))(1y)log(1h(x))

完整的代价函数为
J=1m[i=1mylog(h(x))(1y)log(1h(x))]

则下面代码是完整代价函数的一部分:

cost = xent.mean() + 0.01 * (w ** 2).sum()

后面的为正则化项,防止过度拟合。
下面代码就是使用随机梯度下降算法来更新w,b的值。

gw, gb = T.grad(cost, [w, b])
train = theano.function(inputs=[x,y], outputs=[prediction, xent],
                        updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))
predict = theano.function(inputs=[x], outputs=prediction)
for i in range(training_steps):
    pred, err = train(D[0], D[1])
print "Final model:"
print w.get_value(), b.get_value()
print "target values for D:", D[1]
print "prediction on D:", predict(D[0])

这个例子虽然简单,但知识量特别大,希望有读者看的时候有疑问参考http://blog.csdn.net/u012162613/article/details/43157801这篇文章,这篇作者写的特别好,也很亲民。

你可能感兴趣的:(机器学习)