基于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求众数问题实例
Sep 26 Python
Python的subprocess模块总结
Nov 07 Python
python中的编码知识整理汇总
Jan 26 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python实现音乐下载的统计
Jun 20 Python
Python实现图片拼接的代码
Jul 02 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
详解python中递归函数
Apr 16 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
python 实现图片批量压缩的示例
Dec 18 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
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php绘制一条直线的方法
2015/01/24 PHP
PHP可变函数学习小结
2015/11/29 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
js常用代码段收集
2011/10/28 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
jquery编写日期选择器
2017/03/16 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python编程之Re模块下的函数介绍
2017/10/28 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
详解Python中namedtuple的使用
2020/04/27 Python
对孩子的寄语
2014/04/09 职场文书
责任担保书范文
2014/05/21 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
员工加薪申请报告
2015/05/15 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript