【theano-windows】学习笔记七——logistic回归

前言

前面只是学了最基本的theano操作,但是theano中还有很多其他的东西,比如图结构,自定义函数等,这些暂时没有用到就先不看了,后续学啥用啥,没必要一口气吃个胖子,免得消化不良还把前面吃的东西忘记了,先拿logistic回归试试水

基本理论

推导可以看我前面你的博客softmax理论及代码解读——UFLDL, 这里只贴出前向计算公式和损失函数,毕竟theano可以自动梯度咯

前向计算公式就是sigmoid函数, 得到的是当前数据 x 标签为1的概率

hθ(xi)=P(y=1|x;w,b)=11+ewxb

损失函数的定义就是

J(θ)=1m[i=1m[(yiloghθ(xi)+(1yi)log(1hθ(xi)]]

代码实现

导入包

import numpy as np
import theano
import theano.tensor as T

定义样本矩阵(样本*属性)以及对应标签向量(样本*标签)

N=400#训练集大小
feats=784#每个样本的特征维度,可以当做输入神经元个数
train_steps=10000#训练次数
x=T.dmatrix('x') #样本*特征维度
y=T.dvector('y') #样本*标签

因为是二分类,所以只有一个输出神经元,那么权重维度就是(输入数据维度*1), 进而可以据此进行初始化共享变量,也即模型参数权重、偏置. 注意权重不能初始化为0, 因为这样你的输出就都是一样了,整个网络参数都会一样,这还学个锤子

rng=np.random#随机初始化权重
w=theano.shared(rng.randn(feats),name='w')#权重初始化
b=theano.shared(0.,name='b')#偏置初始化

随后计算梯度

#logistic回归损失函数
print w.get_value().shape#看看每个输入神经元对应的权重维度
p1=T.nnet.sigmoid(T.dot(x,w)+b)
prediction=p1>0.5
xnet=-y*T.log(p1)-(1-y)*T.log(1-p1)#目标函数
cost=xnet.mean()+0.01*(w**2).sum()#损失函数+权重衰减
#求解梯度
gw,gb=theano.grad(cost,[w,b])#损失函数对权重和偏置求导

利用function更新模型参数,以及输出结果

#用function编译训练函数
train=theano.function(inputs=[x,y],
                      outputs=[prediction,xnet],
                      updates=[(w,w-0.1*gw),(b,b-0.1*gb)])
#预测函数
predict=theano.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进行更深一步的探索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值