Theano学习1
来源:互联网 发布:江苏猎宝网络是真是假 编辑:程序博客网 时间:2024/06/05 02:35
Theano学习笔记(三)——图结构
(http://blog.csdn.net/ycheng_sjtu/article/details/38920473)
图结构(Graph Structures)是了解Theano内在工作原理的基础。
Theano编程的核心是用符号占位符把数学关系表示出来。
图结构的组成部分
如图实现了这段代码:
- importtheano.tensor as T
- x= T.matrix('x')
- y= T.matrix('y')
- z= x + y
变量节点(variable nodes)
红色表示。变量节点都有owner,其中x与y的owner为none。z的owner为apply。
操作节点(op nodes)
绿色表示。表示各个变量之间的运算(例如+, -, **, sum(),tanh()等等)。
应用节点(apply nodes)
蓝色表示。其他节点都连在上面。
分析nodes对应属性
对于以下代码,分析其节点属性。
#注意这里第二个输入并不是2,而是和x同样大小的矩阵框架,因为等会要广播才能相乘
- importtheano.tensor as T
- x= T.dmatrix('x')
- y= x * 2.
- >>>y.owner.op.name
- 'Elemwise{mul,no_inplace}'#y的owner是apply而apply的op是'Elemwise{mul,no_inplace}'
- >>>len(y.owner.inputs)
- 2#两个输入
- >>>y.owner.inputs[0]
- x#第一个输入是x矩阵
- >>>y.owner.inputs[1]
- InplaceDimShuffle{x,x}.0
- >>>type(y.owner.inputs[1])
- <class'theano.tensor.basic.TensorVariable'>
- >>>type(y.owner.inputs[1].owner)
- <class'theano.gof.graph.Apply'>
- >>>y.owner.inputs[1].owner.op
- <class'theano.tensor.elemwise.DimShuffle object at 0x14675f0'>#用DimShuffle把2广播出来
- >>>y.owner.inputs[1].owner.inputs
- [2.0]#矩阵框架的owner才是2
自动优化
编译Theano其实是编译了一张图。这张图从输入变量开始贯穿全图直到输出变量。Theano可以检测关键子图,来进行替换,防止重复,以达到优化的目的。比如用x替换xy/y。
举个例子
- >>>import theano
- >>>a = theano.tensor.vector("a") # declare symbolic variable
- >>>b = a + a ** 10 #build symbolic expression
- >>>f = theano.function([a], b) #compile function
- >>>print f([0, 1, 2]) #prints `array([0,2,1026])`
优化前Theano 学习笔记################################################################Q1:softmax 函数总结为: 将一组数变换为 总和为1,各个数为0~1之间的软性归一化结果。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于logistic regression中的softmax 函数
是用来柔化输出值,减小值之间的差。
用来归一化一组值到0~1之间, 总和为1.
步骤为:
- 求出最大值max
- 由exp表达式将各个值转化为0~1之间的数 x[i] = exp(x[i] - max)
- 求sum,归一化。
- void LogisticRegression::softmax(double *x) {
- double max = 0.0;
- double sum = 0.0;
- for(int i=0; i<n_out; i++) if(max < x[i]) max = x[i];
- for(int i=0; i<n_out; i++) {
- x[i] = exp(x[i] - max);
- sum += x[i];
- }
- for(int i=0; i<n_out; i++) x[i] /= sum;
- }
0 0
- Theano学习1
- theano学习1
- Theano深度学习系列1
- python theano库学习(1)
- theano基础学习笔记1
- theano 学习
- theano学习
- Theano 学习
- Theano学习三----Theano function
- Theano学习四----Theano shared
- Theano学习五----Theano RandomStreams
- Deeplearning学习之Theano(1)--保存参数
- Theano学习系列(1):符号变量
- theano学习笔记(1)—代数
- 【Theano】学习笔记-1-什么是Theano?有哪些优点?
- Theano(1):windows、linux下安装深度学习库Theano
- 深度学习Theano教程Theano tutorial
- Theano 学习numpy.asarray(), theano.shared()
- hdu 4268 Alice and Bob(multiset)
- 考试题目分析
- Android 手机定位慢的解决方法
- android 自定义控件
- hdu 4893 Goffi and GCD
- Theano学习1
- spring整合memcached注意事项-poolname
- Linux下DIR,dirent,stat等结构体详解
- ubuntu12.04-64位系统上安装s2e过程
- Duilib学习总结
- 关于java接口和抽象类可以用的修饰符
- android开发笔记(2)——简单的数据存储
- 【虚拟化实战】VM设计之一vCPU
- Wamp下drupal简洁链接的启用(clean urls)