深度学习(三)theano学习笔记(2)基础函数-未完待续

theano学习笔记(2)基础函数

1、随机函数库的调用





2、卷积神经网络

[python]  view plain  copy
  1. #-*-coding:utf-8-*-  
  2. import theano  
  3. import numpy as np  
  4. import matplotlib.pyplot as plt       
  5. from loaddata import loadmnist  
  6. import theano.tensor as T  
  7.   
  8.   
  9. #softmax函数  
  10. class softmax:  
  11.     #outdata为我们标注的输出,hiddata网络输出层的输入,nin,nout为输入、输出神经元个数  
  12.     def __init__(self,hiddata,outdata,nin,nout):  
  13.   
  14.         self.w=theano.shared(value=np.zeros((nin,nout),dtype=theano.config.floatX),name='w');  
  15.         self.b=theano.shared(value=np.zeros((nout,),dtype=theano.config.floatX),name='b')  
  16.   
  17.         prey=T.nnet.softmax(T.dot(hiddata,self.w)+self.b)#通过softmax函数,得到输出层每个神经元数值(概率)  
  18.         self.loss=-T.mean(T.log(prey)[T.arange(outdata.shape[0]),outdata])#损失函数  
  19.         self.para=[self.w,self.b]  
  20.         self.predict=T.argmax(prey,axis=1)  
  21.         self.error=T.mean(T.neq(T.argmax(prey,axis=1),outdata))  
  22.           
  23.   
  24.           
  25.   
  26. #输入层到隐藏层  
  27. class HiddenLayer:  
  28.     def __init__(self,inputx,nin,nout):  
  29.          a=np.sqrt(6./(nin+nout))  
  30.          ranmatrix=np.random.uniform(-a,a,(nin,nout));  
  31.          self.w=theano.shared(value=np.asarray(ranmatrix,dtype=theano.config.floatX),name='w')  
  32.          self.b=theano.shared(value=np.zeros((nout,),dtype=theano.config.floatX),name='b')  
  33.          self.out=T.tanh(T.dot(inputx,self.w)+self.b)  
  34.          self.para=[self.w,self.b]  
  35. #传统三层感知器      
  36. class mlp:  
  37.     def __init__(self,nin,nhid,nout):  
  38.         x=T.fmatrix('x')  
  39.         y=T.ivector('y')  
  40.         #前向  
  41.         hlayer=HiddenLayer(x,nin,nhid)  
  42.         olayer=softmax(hlayer.out,y,nhid,nout)  
  43.         #反向  
  44.         paras=hlayer.para+olayer.para  
  45.         dparas=T.grad(olayer.loss,paras)  
  46.         updates=[(para,para-0.1*dpara) for para,dpara in zip(paras,dparas)]  
  47.         self.trainfunction=theano.function(inputs=[x,y],outputs=olayer.loss,updates=updates)  
  48.   
  49.           
  50.     def train(self,trainx,trainy):  
  51.         return self.trainfunction(trainx,trainy)  
  52. #卷积神经网络的每一层,包括卷积、池化、激活映射操作  
  53. #img_shape为输入特征图,img_shape=(batch_size,特征图个数,图片宽、高)  
  54. #filter_shape为卷积操作相关参数,filter_shape=(输入特征图个数、输出特征图个数、卷积核的宽、卷积核的高)  
  55. #,这样总共filter的个数为:输入特征图个数*输出特征图个数*卷积核的宽*卷积核的高  
  56. class LeNetConvPoolLayer:  
  57.     def __init__(self,inputx,img_shape,filter_shape,poolsize=(2,2)):  
  58.         #参数初始化  
  59.         assert img_shape[1]==filter_shape[1]  
  60.         a=np.sqrt(6./(filter_shape[0]+filter_shape[1]))  
  61.   
  62.         v=np.random.uniform(low=-a,high=a,size=filter_shape)  
  63.   
  64.         wvalue=np.asarray(v,dtype=theano.config.floatX)  
  65.         self.w=theano.shared(value=wvalue,name='w')  
  66.         bvalue=np.zeros((filter_shape[0],),dtype=theano.config.floatX)  
  67.         self.b=theano.shared(value=bvalue,name='b')  
  68.           
  69.         covout=T.nnet.conv2d(inputx,self.w)#卷积操作  
  70.           
  71.         covpool=T.signal.downsample.max_pool_2d(covout,poolsize)#池化操作  
  72.           
  73.         self.out=T.tanh(covpool+self.b.dimshuffle('x'0'x''x'))  
  74.           
  75.         self.para=[self.w,self.b]  
  76.       
  77.           
  78.            
  79.   
  80. trainx,trainy=loadmnist()  
  81. trainx=trainx.reshape(-1,1,28,28)  
  82. batch_size=30  
  83. m=trainx.shape[0]  
  84. ne=m/batch_size  
  85.   
  86.   
  87.   
  88. batchx=T.tensor4(name='batchx',dtype=theano.config.floatX)  
  89. batchy=T.ivector('batchy')  
  90.   
  91. #  
  92. cov1_layer=LeNetConvPoolLayer(inputx=batchx,img_shape=(batch_size,1,28,28),filter_shape=(20,1,5,5))  
  93. cov2_layer=LeNetConvPoolLayer(inputx=cov1_layer.out,img_shape=(batch_size,20,12,12),filter_shape=(50,20,5,5))  
  94. cov2out=cov2_layer.out.flatten(2)  
  95. hlayer=HiddenLayer(cov2out,4*4*50,500)  
  96. olayer=softmax(hlayer.out,batchy,500,10)  
  97.   
  98. paras=cov1_layer.para+cov2_layer.para+hlayer.para+olayer.para  
  99. dparas=T.grad(olayer.loss,paras)  
  100. updates=[(para,para-0.1*dpara) for para,dpara in zip(paras,dparas)]  
  101.   
  102. train_function=theano.function(inputs=[batchx,batchy],outputs=olayer.loss,updates=updates)  
  103. test_function=theano.function(inputs=[batchx,batchy],outputs=[olayer.error,olayer.predict])  
  104.   
  105. testx,testy=loadmnist(True)  
  106. testx=testx.reshape(-1,1,28,28)  
  107.   
  108. train_history=[]  
  109. test_history=[]  
  110.   
  111. for it in range(20):  
  112.     sum=0  
  113.     for i in range(ne):  
  114.         a=trainx[i*batch_size:(i+1)*batch_size]  
  115.         loss_train=train_function(trainx[i*batch_size:(i+1)*batch_size],trainy[i*batch_size:(i+1)*batch_size])  
  116.         sum=sum+loss_train  
  117.     sum=sum/ne   
  118.     print 'train_loss:',sum  
  119.     test_error,predict=test_function(testx,testy)  
  120.     print 'test_error:',test_error  
  121.       
  122.     train_history=train_history+[sum]  
  123.     test_history=test_history+[test_error]  
  124. n=len(train_history)  
  125. fig1=plt.subplot(111)  
  126. fig1.set_ylim(0.001,0.2)  

  1. fig1.plot(np.arange(n),train_history,'-')  

from: http://blog.csdn.net/hjimce/article/details/46806923

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值