现在的位置: 首页 > 综合 > 正文

python 第4天,theano

2014年01月24日 ⁄ 综合 ⁄ 共 1426字 ⁄ 字号 评论关闭

今天看deep learning的例子。读入mnist的时候,出现了memoryerror,怀疑是shell的内存管理问题。后来,我在cmd中python name.py就没有这个问题。在idle中也没有问题。

idle的智能提示需要的时间太长了。不知道能设置不?

微软的vs也支持python,还是感觉不好用。不知道咋的,一打开vs就很不愉快。vs,matlab这种东西都太庞大了。

运行一个theano的例子的时候出现了类似dot22 tensor float64 matrix 的错误。好像是因为theano 目前只支持float32,至少是用到gpu的话。

我的系统是win7 64的。参照theano 文档 config一节设置后这个问题就解决了。http://deeplearning.net/software/theano/library/config.html

并且在spyder中的memory error问题也一起解决了。。还是spyder用起来最舒服。

下面来仔细看下例子:logistic_sgd.py  deeplearning中的第一个例子。

注意的地方如下:

1.类中的方法和变量一般都+self。

2.程序执行的地方,可以用if  __name__="__main__":来判断

3.theano中真正的工作是在function中做的。只有用function来动态编译成c,才能体现theano的速度。

function函数返回一个可以调用的对象。

简单的function例子如下:

x=T.scalar('x',dtype=theano.config.floatX)
y=x**2
gy=T.grad(y,x)
f=theano.function(inputs=【x】,outputs=gy)

定义好outputs和inputs的关系,然后用function编译成c代码即可拿来调用。如f(2)即会输出4.0

复杂的情况下有updates和givens参数

inputs的输入不能是shared类型的变量。对于shared变量,则需要用updates来进行更新。givens可以用来处理shared变量的输入。

如:f=theano.function(inputs=[idx],outputs=gy,givens={x:xxsf[idx]})

这里的idx,gy,x都是符号变量。xxsf是一个shared变量,并且类型和x是一样的。xxsf不能用python的原生类型list。

如下语句:

xx=【1,2,3】

xxa=numpy.asarray(xx)

xxs=theano.shared(xxa)

xxsf=T.cast(xxs,theano.config.floatX)

xx原来是一个list,转化成shared后才能用gives输入。

shared变量?borrow? elementwise?

theano 的config文件中设置ldflags=编译程序运行正常,这个时候有才用blas吗,加了ldflags=-lblas结果出错。

配置如下:

[cuda]
root=
[global]
floatX=float32
[blas]
ldflags =-lblas

有提示说在wingw中编译会获得提示,

提示是can not find lblas,如果改用cblas 提示是unrecognized option cblas

另外,python生成的临时文件好像默认就删除了,在屏幕上打出一段源码。带行号,怎么用啊

 

 

 

抱歉!评论已关闭.