python +numpy,theano,cifar 2

    数据要归一化到[0..1)

    貌似dbn还是很普通。cnn提供了共享权值,局部感受野,dbn提供了基于层的学习和非监督学习,模拟了人类的学习,我们可以不知道一个事情是啥,当看多了,以后一点就通了。

   有把cnn和dbn结合起来的。

   如果把cnn和dbn结合,是在第一层实现cnn,还是每个层都用相同的cnn呢?

   dbn的各层,是否可用不同的rmb?

对于shared variable 的一点理解,主要的说明在注释中了。另外,也想过是否直接通过inputs传数据,对于多个函数共用一个数据的情况,似乎不行,还是要用共享变量的。

 

# -*- coding: utf-8 -*-

"""

Created on Tue Nov 29 18:30:54 2011

@author: Administrator

"""

import numpy,theano,theano.tensor as T

#define model

idx=T.lscalar('idx')

x=T.vector('x')

y=T.vector('y')

f1=T.sum(x)

fn1=theano.function([x],f1)

#prepare data

a=[1,2,3,4,5]

b=[6,7,8,9,10]

a_n=numpy.asarray(a,dtype=theano.config.floatX)

b_n=numpy.asarray(a,dtype=theano.config.floatX)

a_s=theano.shared(a_n)

b_s=theano.shared(b_n)

#run the operations defined by theano.function

print fn1(a)#works

print fn1(a_n)#works

# theano function works with tensor ,not shared variable

# we can't use share variable as parameters

#fn2=theano.function([idx],outputs=f1,givens={x:a_s})#not works,a_s is a shared\

# variable,we should tansfermate it to a tensor by a_s[...]?

fn2=theano.function([idx],outputs=f1,givens={x:a_s[0:idx]})

print fn2(3)

a_s=b_s #这条语句造成了后面fn2(3)=6,实际上,这里把a_s指向了b_s.

print fn2(3) #,we can't change shared variable by point it to other shared variable

#there are three variables,symbol variable,system variable,shared variable

#symbol variable is just used in write theano function.

#sysem variable is point to a data area

# so does shared variable,while shared variable is managed by theano,not system

#a theano function is combined with shared variable when this fucntion is compiled

a_s.set_value(b)

print fn2(3)

print a_s.get_value()

 

 

output:

15.0
15.0
6.0
6.0
6.0
[  6.   7.   8.   9.  10.]

 

通过shard variable  可以减少数据交换,要改变shared variable 的值,可以通过set_value。

set_value(b) 时需要把b先转换成numpy.array,你不做。theano也会这么做。容易出错,不如自己来做。

尤其是在borrow=true时。

关于borrow=true,本来是很好立即的。偏偏有些细节不太明白。基本上cpu上,还是用borrow=true,gpu上用deepcopy(borrow=false)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值