南京做网站南京乐识好,唐山网站公司建设网站,用织梦系统做网站,域名网址注册前言
前面只是学了最基本的theano操作#xff0c;但是theano中还有很多其他的东西#xff0c;比如图结构#xff0c;自定义函数等#xff0c;这些暂时没有用到就先不看了#xff0c;后续学啥用啥#xff0c;没必要一口气吃个胖子#xff0c;免得消化不良还把前面吃的东…前言
前面只是学了最基本的theano操作但是theano中还有很多其他的东西比如图结构自定义函数等这些暂时没有用到就先不看了后续学啥用啥没必要一口气吃个胖子免得消化不良还把前面吃的东西忘记了先拿logistic回归试试水
基本理论
推导可以看我前面你的博客softmax理论及代码解读——UFLDL, 这里只贴出前向计算公式和损失函数毕竟theano可以自动梯度咯
前向计算公式就是sigmoid函数, 得到的是当前数据xx标签为1的概率
hθ(xi)=P(y=1|x;w,b)=11+e−w∗x−b
h_\theta (x^i)=P(y=1|x;w,b)=\frac{1}{1+e^{-w*x-b}}损失函数的定义就是
J(θ)−1m[∑i1m[(yiloghθ(xi)(1−yi)log(1−hθ(xi)]]J(\theta)=-\frac{1}{m}\left[ \sum_{i=1}^m
\left[ (y^i\log h_\theta(x^i)+(1-y^i)\log(1-h_\theta (x^i)\right] \right]代码实现
导入包
import numpy as np
import theano
import theano.tensor as T
定义样本矩阵(样本*属性)以及对应标签向量(样本*标签)
N400#训练集大小
feats784#每个样本的特征维度可以当做输入神经元个数
train_steps10000#训练次数
xT.dmatrix(x) #样本*特征维度
yT.dvector(y) #样本*标签
因为是二分类所以只有一个输出神经元那么权重维度就是(输入数据维度*1), 进而可以据此进行初始化共享变量也即模型参数权重、偏置. 注意权重不能初始化为0, 因为这样你的输出就都是一样了整个网络参数都会一样这还学个锤子
rngnp.random#随机初始化权重
wtheano.shared(rng.randn(feats),namew)#权重初始化
btheano.shared(0.,nameb)#偏置初始化
随后计算梯度
#logistic回归损失函数
print w.get_value().shape#看看每个输入神经元对应的权重维度
p1T.nnet.sigmoid(T.dot(x,w)b)
predictionp10.5
xnet-y*T.log(p1)-(1-y)*T.log(1-p1)#目标函数
costxnet.mean()0.01*(w**2).sum()#损失函数权重衰减
#求解梯度
gw,gbtheano.grad(cost,[w,b])#损失函数对权重和偏置求导
利用function更新模型参数以及输出结果
#用function编译训练函数
traintheano.function(inputs[x,y],outputs[prediction,xnet],updates[(w,w-0.1*gw),(b,b-0.1*gb)])
#预测函数
predicttheano.function(inputs[x],outputs[prediction])
可以输出看看预测结果
print Target values for D:
print D[1]
print Prediction values for D
print predict(D[0])
后续
这只是最基础的一个使用grad计算损失函数梯度, 然后用function更新参数的例子循环还没使用scan, 后续将跟进深度学习0.1文档学习各种网络的实现当然依据需求对theano进行更深一步的探索