Theano 学习笔记(一)

        最近配置Theano开发环境时,在最后测试阶段发生了一些小插曲,例如在执行下面一条测试语句时提示有如下错误:

执行指令为:python -c "import theano; theano.test()"

所报错误为:ImportError:  No   module   named  ' cPickle '

        查阅资料发现,自python3以后 cPickle 和 pickle 模块合并,所以直接引入的模块名只有 pickle。为了追根溯源,我便详细的了解pickle模块的用法与实现。

        pickle模块机制是序列化/反序列化一个对象的,可以把一个对象持久化存储,用于保存Python标准的类别实体以及实体的重新载入。简而言之就是:pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。而所谓的持久性就是指:你希望将数据对象存储在磁盘上,为了便于以后检索。例如:一个日程安排管理的程序,在用户多次运行该程序时可以保存该应用程序对象(即待办事项),并方便随时检索查询。

        用法:pickle主要有两个函数:load函数和dump函数,python pickle load是把对象反序列化(即从序列化之后的数据中解出来),python pickle dump是把对象序列化。

        这便引出了有关Theano环境下,模块数据的载入与保存。

        在Theano对象被序列化(或者反序列化)时,需要寻求基于预期保存和重新载入的耗时的不同机制。

                对于短期(比如临时文件和网络转录),Theano的pickle是可行的。
                对于长期(比如从实验中保存模型)不应当依赖于Theano的pickle对象。

         pickle.load( )与pickle.dump()
    反序列化对象与序列化对象。如下代码所示:将文件中的数据解析为一个Python对象。其中要注意的是,在load(file)与dump()的时候,要让python能够找到对象的定义,否则会报错:

#!/usr/bin/python

import cPickle as pickle
	book = 'BOOK'
	num  = {1:'One',2:'Two',3:'Three'}
	f1 = file('temp.pkl','wb')
	pickle.dump(book,f1,True)
	pickle.dump(num,f1,True)
	f1.close()

	f2 = file('temp.pkl','rb')
	index = pickle.load(f2)
	print index		#BOOK

	ind = pickle.load(f2)
	print ind
	f2.close()


       注:pickle的局限性在于,被序列化的类别实例的代码或者数据并没有被同时保存。因此重新载入先前版本的类可能会出问题。


你可能感兴趣的:(Theano入门)