今天看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生成的临时文件好像默认就删除了,在屏幕上打出一段源码。带行号,怎么用啊