基于python中theano库的线性回归


Posted in Python onAugust 31, 2018

theano库是做deep learning重要的一部分,其最吸引人的地方之一是你给出符号化的公式之后,能自动生成导数。本文使用梯度下降的方法,进行数据拟合,现在把代码贴在下方

代码块

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

class Linear_Reg(object): 
  def __init__(self,x): 
    self.a = theano.shared(value = np.zeros((1,), dtype=theano.config.floatX),name = 'a') 
    self.b = theano.shared(value = np.zeros((1,), 
dtype=theano.config.floatX),name = 'b') 
    self.result = self.a * x + self.b 
    self.params = [self.a,self.b] 
  def msl(self,y): 
    return T.mean((y - self.result)**2) 

def regrun(rate,data,labels): 

  X = theano.shared(np.asarray(data, 
                 dtype=theano.config.floatX),borrow = True) 
  Y = theano.shared(np.asarray(labels, 
                 dtype=theano.config.floatX),borrow = True) 

  index = T.lscalar() #定义符号化的公式
  x = T.dscalar('x')  #定义符号化的公式
  y = T.dscalar('y')  #定义符号化的公式

  reg = Linear_Reg(x = x) 
  cost = reg.msl(y) 


  a_g = T.grad(cost = cost,wrt = reg.a) #计算梯度 
  b_g = T.grad(cost = cost, wrt = reg.b) #计算梯度

  updates=[(reg.a,reg.a - rate * a_g),(reg.b,reg.b - rate * b_g)] #更新参数
  train_model = theano.function(inputs=[index], outputs = reg.msl(y),updates = updates,givens = {x:X[index], y:Y[index]}) 

  done = True 
  err = 0.0 
  count = 0 
  last = 0.0 
  start_time = time.clock() 
  while done: 
    #err_s = [train_model(i) for i in xrange(data.shape[0])] 
    for i in xxx:
      err_s = [train_model(i) ]
      err = np.mean(err_s)  

    #print err 
    count = count + 1 
    if count > 10000 or err <0.1: 
      done = False 
    last = err 
  end_time = time.clock() 
  print 'Total time is :',end_time -start_time,' s' # 5.12s 
  print 'last error :',err 
  print 'a value : ',reg.a.get_value() # [ 2.92394467]  
  print 'b value : ',reg.b.get_value() # [ 1.81334458] 

if __name__ == '__main__':  
  rate = 0.01 
  data = np.linspace(1,10,10) 
  labels = data * 3 + np.ones(data.shape[0],dtype=np.float64) +np.random.rand(data.shape[0])
  regrun(rate,data,labels)

其基本思想是随机梯度下降。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
Random 在 Python 中的使用方法
Aug 09 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python抓取需要扫微信登陆页面
Apr 29 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
基于plt.title无法显示中文的快速解决
May 16 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 Python
python开发实时可视化仪表盘的示例
May 07 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 #Python
python实现梯度下降算法
Mar 24 #Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 #Python
opencv python 图像去噪的实现方法
Aug 31 #Python
python+numpy+matplotalib实现梯度下降法
Aug 31 #Python
python实现随机梯度下降法
Mar 24 #Python
python实现决策树分类(2)
Aug 30 #Python
You might like
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
解析php中的escape函数
2013/06/29 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python生成随机验证码的两种方法
2015/12/22 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
遗体告别仪式答谢词
2014/01/23 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
最美乡村教师观后感
2015/06/11 职场文书
贷款工作证明模板
2015/06/12 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python