1 / 38
文档名称:

Theano学习笔记.docx

格式:docx   大小:1,641KB   页数:38页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Theano学习笔记.docx

上传人:幸福人生 2024/5/10 文件大小:1.60 MB

下载得到文件列表

Theano学习笔记.docx

相关文档

文档介绍

文档介绍:该【Theano学习笔记 】是由【幸福人生】上传分享,文档一共【38】页,该文档可以免费在线阅读,需要了解更多关于【Theano学习笔记 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。Theano学****笔记Theano学****笔记(一)——代数分类:?Python2014-08-2815:29?2008人阅读?评论(5)?收藏?举报numpypython深度学****Theanogpu标量相加[python]?viewplaincopyimport??as?T??from?theano?import?function??x?=?('x')??y?=?('y')??z?=?x?+?y??f?=?function([x,?y],?z)??输入定义两个符号变量来代替数值,。?矩阵相加把输入类型换一下就行了,矩阵如果维数不同,会遵循NumPy的广播规则。[python]?viewplaincopyimport??as?T??from?theano?import?function??x?=?('x')??y?=?('y')??z?=?x?+?y??f?=?function([x,?y],?z)???定义一个公式如:a**2+b**2+2*a*b这里每个变量都需要单独申明。[python]?viewplaincopyprint?f(33)??print?f(33,?2)??print?f(33,by_name=3)??>>>??????????共享变量为了在GPU上更好的性能,引入共享变量,以累加器为例。[python]?viewplaincopyimport??as?T??from?theano?import?function??from?theano?import?shared??state?=?shared(0)??inc?=?('inc')??accumulator?=?function([inc],?state,updates=[(state,?state+inc)])??print?()??accumulator(1)??print?()??accumulator(300)??print?()??(-1)??print?accumulator(3)??print?()??>>>???0??1??301??-1??2??state的值在调用函数之后才刷新。而且可以定义多个函数共用同一个共享变量,例如这个减法器。[python]?viewplaincopydecrementor?=?function([inc],?state,updates=[(state,?state-inc)])??print?decrementor(2)??print?()??>>>???2??0??如果在某个函数中,共用了这个共享变量,但是又不想变动它的值,那么可以使用given参数替代这个变量。而旧的state不发生变化。[python]?viewplaincopyfn_of_state?=?state?*?2?+?inc??foo?=?(dtype=)??skip_shared?=?function([inc,?foo],fn_of_state,?????????????????????????????givens=[(state,foo)])??print?skip_shared(1,?3)??print?()??>>>???7??0???产生随机数和C中的srand()一样,都是伪随机数。[python]?viewplaincopyfrom?theano?import?function??from??RandomStreams??srng?=?RandomStreams(seed=234)#种子??rv_u?=?((2,2))#均匀分布??rv_n?=?((2,2))#正态分布??f?=?function([],?rv_u)#每次调用,每次都会更新??g?=?function([],?rv_n,no_default_updates=True)#如果以后一直用这组随机数,就不再更新??nearly_zeros?=?function([],?rv_u?+?rv_u-?2?*?rv_u)??print?nearly_zeros()#函数每次执行只获得一个随机数,即使表达式里面有3个随机数??种子流:上述2个随机变量,可以全局设定同一个种子,也可以是分别设定。[python]?viewplaincopy#分别设置,()函数??rng_val?=(borrow=True)?#?Get?the?rng?for?rv_u??(89234)?#?seeds?thegenerator??(rng_val,borrow=True)??#全局设置,()函数??(902340)??函数间共享流[python]?viewplaincopystate_after_v0?=().get_state()#保存调用前的state??nearly_zeros()???????#?this?affects?rv_u's?generator??v1?=?f()#第一个调用,之后state会变化??rng?=?(borrow=True)??(state_after_v0)#为其state还原??(rng,?borrow=True)??v2?=?f()?????????????#?v2?!=?v1输出更新后state对应的随机数??v3?=?f()?????????????#?v3?==?v1再次更新又还原成原来的state了???在2张Theano图间复制状态[python]?viewplaincopyimport?theano??import?numpy??import??as?T??from??importMRG_RandomStreams??from??RandomStreams?????class?Graph():?????def?__init__(self,?seed=123):??????????=?RandomStreams(seed)??????????=?(size=(1,))?????g1?=?Graph(seed=123)??f1?=?([],?)?????g2?=?Graph(seed=987)??f2?=?([],?)?????print?'By?default,?the?two?functionsare?out?of?sync.'??print?'f1()?returns?',?f1()??print?'f2()?returns?',?f2()??#输出不同的随机值??def?copy_random_state(g1,?g2):?????if?isinstance(,?MRG_RandomStreams):??#类型判断:其第一个参数为对象,第二个为类型名或类型名的一个列表。其返回值为布尔型。??????????=??????for?(su1,?su2)?in?zip(,?):#打包?????????su2[0].set_value(su1[0].get_value())#赋值?????print?'We?now?copy?the?state?of?thetheano?random?number?generators.'??copy_random_state(g1,?g2)??print?'f1()?returns?',?f1()??print?'f2()?returns?',?f2()??#输出相同的随机值??>>>???By?default,?the?two?functions?are?outof?sync.??f1()?returns??[?]??f2()?returns??[?]??We?now?copy?the?state?of?the?theanorandom?number?generators.??f1()?returns??[?]??f2()?returns??[?]??Theano学****笔记(二)——逻辑回归函数解析分类:?Python2014-08-2821:46?1215人阅读?评论(0)?收藏?举报pythonnumpyDeepLearningTheano深度学****有了前面的准备,可以用Theano实现一个逻辑回归程序,逻辑回归是典型的有监督学****为了形象,这里我们假设分类任务是区分人与狗的照片。?首先是生成随机数对象[python]?viewplaincopyimportnumpy??importtheano???as?T??rng=???数据初始化有400张照片,这些照片不是人的就是狗的。每张照片是28*28=784的维度。D[0]是训练集,是个400*784的矩阵,每一行都是一张照片。D[1]是每张照片对应的标签,用来记录这张照片是人还是狗。training_steps是迭代上限。[python]?viewplaincopyN=?400??feats=?784??D=?((N,?feats),?(size=N,?low=0,?high=2))??training_steps=?10000??[python]?viewplaincopy#Declare?Theano?symbolic?variables??x=?("x")??y=?("y")??w=?((feats),?name="w")??b=?(0.,?name="b")??print"Initial?model:"??(),?()??x是输入的训练集,是个矩阵,把D[0]赋值给它。y是标签,是个列向量,400个样本所以有400维。把D[1]赋给它。w是权重列向量,维数为图像的尺寸784维。b是偏倚项向量,初始值都是0,这里没写成向量是因为之后要广播形式。?[python]?viewplaincopy#Construct?Theano?expression?graph??p_1=?1?/?(1?+?(-(x,?w)?-?b))???#Probability?that?target?=?1??prediction=?p_1?>?????????????????????#?Theprediction?thresholded??xent=?-y?*?(p_1)?-?(1-y)?*?(1-p_1)?#?Cross-entropy?loss?function??cost=?()?+??*?(w?**?2).sum()#?The?cost?to?minimize??gw,gb?=?(cost,?[w,?b])?????????????#Compute?the?gradient?of?the?cost????????????????????????????????????????????#?(we?shall?return?to?this?in?a????????????????????????????????????????????#following?section?of?this?tutorial)??这里是函数的主干部分,,减小权重的幅度,用来防止过拟合的。[python]?viewplaincopy#Compile??train=?(????????????inputs=[x,y],????????????outputs=[prediction,?xent],????????????updates=((w,?w?-??*?gw),?(b,?b?-?*?gb)))??predict=?(inputs=[x],?outputs=prediction)??构造预测和训练函数。?[python]?viewplaincopy#Train??fori?in?range(training_steps):??????pred,err?=?train(D[0],?D[1])??print"Final?model:"??(),?()??print"target?values?for?D:",?D[1]??print"prediction?on?D:",?predict(D[0])??这里算过之后发现,经过10000次训练,预测结果与标签已经完全相同了。Theano学****笔记(三)——图结构分类:?Python2014-08-2910:13?1515人阅读?评论(0)?收藏?举报Theanopython深度学****DeepLearning图结构图结构(GraphStructures)是了解Theano内在工作原理的基础。Theano编程的核心是用符号占位符把数学关系表示出来。