train_rbm = theano.function(
[index], # inputs
cost, # outputs
updates=updates,
givens={
x: train_set_x[index×batch_size: (index + 1)×batch_size]
},
name='train_rbm'
)

function函数里面最典型的四个参数是inputs,outputs,updates,givens。

function是一个由inputs计算outputs的对象,它关于怎么计算的定义一般在outputs里面,outputs一般是一个符号表达式。

  • inputs:输入是一个python的列表list,里面存放的是将要传递给outputs的参数,这里inputs不用是共享变量shared variables
  • outputs: 输出是一个存放变量的列表list或者字典dict,如果是字典的话,keys必须是字符串。这里代码段2中的outputs是cost,可以把它看成是一个损失函数值,它由输入inputs,updates以后的shared_variable的值和givens的值共同计算得到。在这里inputs只是在采取minibatch算法时准备抽取的样本集的索引,根据这个索引得到givens数据,是模型的输入变量即输入样本集,而updates中的shared_variable是模型的参数,所以最后由模型的输入和模型参数得到了模型输出就是cost。
  • updates: 这里的updates存放的是一组可迭代更新的量,是(shared_variable, new_expression)的形式,对其中的shared_variable输入用new_expression表达式更新,而这个形式可以是列表,元组或者有序字典,这几乎是整个算法的关键也就是梯度下降算法的关键实现的地方。 看示例代码段1中updates是怎么来的,cost最后计算出来的可以看作是损失函数,是关于所有模型参数的一个函数,其中的模型参数是self.params,所以gparams是求cost关于所有模型参数的偏导数,其中模型参数params存放在一个列表里面,所有偏导数gparams也存放在一个列表里面,然后用来一个for循环,每次从两个列表里面各取一个量,则是一个模型参数和这个参数之于cost的偏导数,然后把它们存放在updates字典里面,字典的关键字就是一个param,这里一开始声明的所有params都是shared_variable,对应的这个关键字的值就是这个参数的梯度更新,即param-gparam*lr,其实这里的param-gparam*lr就是new_expression,所以这个updates的字典就构成了一对(shared_variable, new_expression)的形式。所以这里updates其实也是每次调用function都会执行一次,则所有的shared_variable都会根据new_expression更新一次值。
  • givens:这里存放的也是一个可迭代量,可以是列表,元组或者字典,即每次调用function,givens的量都会迭代变化,但是比如上面的示例代码,是一个字典,不论值是否变化,都是x,字典的关键字是不变的,这个x值也是和input一样,传递到outputs的表达式里面的,用于最后计算结果。所以其实givens可以用inputs参数来代替,但是givens的效率更高

theano function参数的更多相关文章

  1. [SAP ABAP开发技术总结]Form(subroutine)、Function参数传值传址

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. js中function参数默认值

    --在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中 ...

  3. JavaScript的function参数的解释

    在js里面写function时其参数在内部表示为一个数组.也就是说:我们定义一个function,里面的参数和将来调用这个function时传入的实参是毫无关系的,如果我们要定义一个function ...

  4. function参数

    expr_without_variable { Z_LVAL($$.u.constant) = ; zend_do_pass_param(&$, ZEND_SEND_VAL, Z_LVAL($ ...

  5. js function 参数

    JS 中 函数的调用非常完美, 例如 var myFun=function( num1,num2){ return num1+num2;} 调用喊出 1) myFun(1,1) 2) myFun(); ...

  6. jquery 添加方法 : $.fn.方法名 = function(参数a,b,c){

    $.fn.image_checked = function(self,status,img_body,csrf_token){             $(this).live('click', fu ...

  7. renderer:function参数介绍

    转载自:http://blog.sina.com.cn/s/blog_9eaf28f90101b7y3.html renderer:function(value, cellmeta, record, ...

  8. typedef 返回类型(*Function)(参数表) ——typedef函数指针

    //首先看一下函数指针怎么用 #include <iostream> using namespace std; //定义一个函数指针pFUN,它指向一个返回类型为char,有一个整型的参数 ...

  9. 【转】JavaScript里Function函数实现可变参数

    转载:  http://www.oschina.net/question/54100_15938 使用javascript类库函数时,经常会遇到一个函数,可以使用不同个数的参数的情况 比如:exp(v ...

随机推荐

  1. spring cloud Ribbon的使用和实现原理

    转载链接:https://blog.csdn.net/qq_20597727/article/details/82860521 简介 这篇文章主要介绍一下ribbon在程序中的基本使用,在这里是单独拿 ...

  2. python基础-流程控制(if,while,for)

    今日内容总结 --流程控制(if,while,for) if:用来判断事物的对错.真假.是否执行.根据不同的情况判断,条件满足执行某条件下的语句 语法结构(3种) # 第一种,只有if结构.条件表达式 ...

  3. SCOI2005 繁忙的都市 [Luogu P2330]

    题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...

  4. 如何实现一个MVVM

    说一说我对于mvvm模型的理解吧 我第一次接触mvvm也是在学习vue的时候,在我看来vue和react都是数据驱动视图,但是vue属于标准的mvvm模型,react是从组件化演变而来 不多废话,直接 ...

  5. st表复习笔记

    st表,一种高效的区间最值查询(RMQ)算法.本质其实是一个动态规划. 其实吧,对于看过线性dp的人来说应该不难理解,只是处理有些麻烦.但是本土狗因为-1的问题居然改了许久... 用两个2^i的区间把 ...

  6. python——函数的基本概念

    Python函数认识 数学定义 y = f(x), y是x的函数,x是自变量. python中的函数组成 由若干语句组成的语句块.函数名称.参数列表构成,函数是组织代码的最小单元 像一个黑盒子,我们给 ...

  7. 「每日五分钟,玩转 JVM」:GC 概览

    前言 GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC. 做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 ...

  8. python函数的基本语法<一>

    函数: 一次定义,多次调用,函数可以变相看成变量函数的阶段: 1.定义阶段 2调用阶段 形参和实参: 定义阶段的参数叫形参,调用阶段的参数叫实参 函数的几种基本用法: #多变量 def test(na ...

  9. ios遇到的坑

    总结体会:很多ios兼容性问题都是由于body设置了height:100% ios中input输入不了 在ios中margin属性不起作用 设置html body的高度为百分比时,margin-bot ...

  10. Spring Boot2 系列教程(二十四)Spring Boot 整合 Jpa

    Spring Boot 中的数据持久化方案前面给大伙介绍了两种了,一个是 JdbcTemplate,还有一个 MyBatis,JdbcTemplate 配置简单,使用也简单,但是功能也非常有限,MyB ...