最近将英文原版书籍《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))
这句话的含义对应的数学表达式为
xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1)
对应的表达式为,这是代价函数的一部分
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这篇文章,这篇作者写的特别好,也很亲民。