基于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中生成器和yield语句的用法详解
Apr 17 Python
深入浅析Python字符编码
Nov 12 Python
python运行时间的几种方法
Jun 17 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python import与from import使用及区别介绍
Sep 06 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
python获取txt文件词向量过程详解
Jul 05 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 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中cookie的作用域
2008/03/27 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php实现Mysql简易操作类
2015/10/11 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
js禁止表单重复提交
2017/08/29 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Python快速从注释生成文档的方法
2016/12/26 Python
python数据结构之列表和元组的详解
2017/09/23 Python
python安装本地whl的实例步骤
2019/10/12 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
Python爬取网页信息的示例
2020/09/24 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
毕业生实习鉴定
2013/12/11 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
我的中国心演讲稿
2014/09/04 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
农村婚庆主持词
2015/06/29 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
TS 类型兼容教程示例详解
2022/09/23 Javascript