转载:http://deeplearning.net/software/theano/tutorial/examples.html
核心要点:共享变量shared,函数构建function
import numpy
import theano
import theano.tensor as T
rng = numpy.random
N = 400 # 训练样本数量
feats = 700 # 样本特征数量
# 随机产生训练数据集: D = (input_values, target_class)
D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))
training_steps = 1000
# 声明theano变量,x为矩阵,y为向量
x = T.dmatrix("x")
y = T.dvector("y")
# 随机初始化权重向量w,保存为共享变量以便梯度迭代更新
w = theano.shared(rng.randn(feats), name="w")
# 初始化偏移变量b,即z=wx+b
b = theano.shared(0., name="b")
#打印初始化变量w,b
print("Initial model:")
print(w.get_value())
print(b.get_value())
# 构建theano函数表达式
p_1 = 1 / (1 + T.exp(-T.dot(x, w) - b)) # 利用s函数计算概率值(矩阵运算)
prediction = p_1 > 0.5 # 预测目标变量
xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1) # 目标优化函数(交叉熵)
cost = xent.mean() + 0.01 * (w ** 2).sum()# 含有正则化L2的损失函数
gw, gb = T.grad(cost, [w, b]) # 梯度下降法函数构建
# 训练函数构建,输入[x,y],输入目标函数值变量[prediction, xent],表示每个样本的预测值和损失值,更新策略采用梯度下降法
train = theano.function(
inputs=[x,y],
outputs=[prediction, cost],
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 "%s:%s"%(i,err)
#打印结果
print("Final model:")
print(w.get_value())
print(b.get_value())
print("target values for D:")
print(D[1])
print("prediction on D:")
print(predict(D[0]))