有了前面的准备,能够用Theano实现一个逻辑回归程序。逻辑回归是典型的有监督学习。

为了形象。这里我们如果分类任务是区分人与狗的照片。

首先是生成随机数对象

importnumpy
importtheano
importtheano.tensor as T
rng= numpy.random

数据初始化

有400张照片,这些照片不是人的就是狗的。

每张照片是28*28=784的维度。

D[0]是训练集。是个400*784的矩阵,每一行都是一张照片。

D[1]是每张照片相应的标签。用来记录这张照片是人还是狗。

training_steps是迭代上限。

N= 400
feats= 784
D= (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))
training_steps= 10000
#Declare Theano symbolic variables
x= T.matrix("x")
y= T.vector("y")
w= theano.shared(rng.randn(feats), name="w")
b= theano.shared(0., name="b")
print"Initial model:"
printw.get_value(), b.get_value()

x是输入的训练集,是个矩阵,把D[0]赋值给它。

y是标签,是个列向量,400个样本所以有400维。把D[1]赋给它。

w是权重列向量。维数为图像的尺寸784维。

b是偏倚项向量,初始值都是0。这里没写成向量是由于之后要广播形式。

#Construct Theano expression graph
p_1= 1 / (1 + T.exp(-T.dot(x, w) - b)) #Probability that target = 1
prediction= p_1 > 0.5 # Theprediction thresholded
xent= -y * T.log(p_1) - (1-y) * T.log(1-p_1) # Cross-entropy loss function
cost= xent.mean() + 0.01 * (w ** 2).sum()# The cost to minimize
gw,gb = T.grad(cost, [w, b]) #Compute the gradient of the cost
# (we shall return to this in a
#following section of this tutorial)

这里是函数的主干部分,涉及到3个公式

1.判定函数

{h_\theta }\left( x \right) = \frac{1}{{I + {e^{ - {\theta ^T}X}}}}" alt="">

2.代价函数

Cost\left( {{h_\theta }\left( x \right),y} \right) = \left\{ \begin{array}{r}\begin{array}{*{20}{c}}{ - \log \left( {{h_\theta }\left( x \right)} \right)}&{\begin{array}{*{20}{c}}{if}&{y = 1}\end{array}}\end{array}\\\begin{array}{*{20}{c}}{ - \log \left( {1 - {h_\theta }\left( x \right)} \right)}&{\begin{array}{*{20}{c}}{if}&{y = 0}\end{array}}\end{array}\end{array} \right." alt="">

3.总目标函数

第二项是权重衰减项,减小权重的幅度。用来防止过拟合的。

#Compile
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)

构造预測和训练函数。

#Train
fori in range(training_steps):
pred,err = train(D[0], D[1])
print"Final model:"
printw.get_value(), b.get_value()
print"target values for D:", D[1]
print"prediction on D:", predict(D[0])

这里算过之后发现,经过10000次训练,预測结果与标签已经全然同样了。

欢迎參与讨论并关注本博客微博以及知乎个人主页兴许内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持。

Theano学习笔记(二)——逻辑回归函数解析的更多相关文章

  1. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  2. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  3. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  4. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  5. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  6. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  7. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  9. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  10. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

随机推荐

  1. ThinkPHP - 登录流程

    数据库: /* Navicat MySQL Data Transfer Source Server : 本地连接 Source Server Version : 50710 Source Host : ...

  2. iOS开发App上传的三大步骤

    上传流程 1.itunse connect中->“我的App”中新建创建应用,填写相关的信息 a.项目名称(多创建几个),避免重名 b.想好应用的类型 c.应用截图(5.5,4.7,4,3.5寸 ...

  3. jz2440开发板设置备份

    ___________________uboot______________________________________ OpenJTAG> pribootdelay=2baudrate=1 ...

  4. BZOJ 2157: 旅游( 树链剖分 )

    树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...

  5. hdu2289Cup(神坑题,精度+二分,以半径二分不能过,以高度为二分就过了)

    Problem Description The WHU ACM Team has a big cup, with which every member drinks water. Now, we kn ...

  6. Json也可以这么使

    public string GetJSON() { //Json数据 string json112 = "{\"control_info\":{\"imei\& ...

  7. 作业还是作孽?——Leo鉴书79

    中国孩子,尤其是城市孩子课业过重是个不争的事实.儿子上幼儿园的作业已经能做到8点多了,上小学之后不知道是不是会整得更晚.于是入手这本<家庭作业的迷思>,认真读读.请特别注意,不要买书叫&q ...

  8. c++空指针调用类成员函数

    最近在看C++动态绑定问题时(理解静态绑定时)发现的问题:能用空指针调用类的成员函数(gcc,vs2013下都可以). 例子: class animal { public: void sleep(){ ...

  9. Qt 状态机框架学习(没学会)

    Qt状态机框架是基于状态图XML(SCXML) 实现的.从Qt4.6开始,它已经是QtCore模块的一部分.尽管它本身是蛮复杂的一套东西,但经过和Qt的事件系统(event system).信号槽(s ...

  10. VS2008查看dll导出函数

    打开Visual Studio 2008 命令提示,使用命令 [plain] view plaincopyprint? dumpbin /exports simple.dll 即可查看