theano学习-Convolutional Neural Networks (LeNet)
来源:互联网 发布:matlab fprintf 矩阵 编辑:程序博客网 时间:2024/05/22 01:56
</pre><pre name="code" class="python">import theanoimport numpyimport pylabfrom theano import tensor as Tfrom theano.tensor.nnet import convfrom PIL import Image# 生成一个随机数生成类rng,其seed为23455(随机数种子)。 rng = numpy.random.RandomState(23455)# 实例化一个4D的输入tensor,是一个象征性的输入,相当于形参,需要调用时传入一个实参 input = T.tensor4(name='input')# 权值数组的shape(可以理解为权值的数组大小),用来确定需要产生的随机数个数,#(该大小可以理解为是一个 2行3列 的矩阵,其中每个矩阵元素又是一个 9行9列的 矩阵)w_shp = (2, 3, 9, 9) # 每个权值的边界,用来确定需要产生的每个随机数的范围。w_bound = numpy.sqrt(3 * 9 * 9)# rng.uniform(low,hign,size)的作用是产生一个shape为size的均匀分布数组,每个数的范围为(low,high)# numpy.asarray(a)的作用是将 类数组a 转化为array类型# theano.shared()实例化一个权值变量(只是为了进行GPU加速时用),可以调用W.get_value()查看其valueW = theano.shared( numpy.asarray( rng.uniform( low=-1.0 / w_bound, high=1.0 / w_bound, size=w_shp), dtype=input.dtype), name ='W')# 下面是用同样的方法初始化一个偏置值b,b通常被初始化为0,因为它在算法中会有一个被学习的过程;# 但是此处是需要直接用它来计算,所以用随机值给它初始化,就当做是已经经过学习后的值了。b_shp = (2,)b = theano.shared(numpy.asarray( rng.uniform(low=-.5, high=.5, size=b_shp), dtype=input.dtype), name ='b')# conv.conv2d(input,filter) 需要2个输入,一个是input,一个是filter。 # input就是上文中的4D张量,每个张量分别代表[mini-batch size,特征图的数量,图像高度,图像宽度]。 # filter就是上文中的W。也是一个4D张量,分别代表[m层特征图数量,m-1层特征图数量,过滤器高度,过滤器宽度]。 # # 当其他函数需要用到变量conv_out时,会先把实参input传入conv2d()中,再计算出conv_out #conv_out = conv.conv2d(input, W)# dimshuffle是一个很强大的能轻松改变一个张量结构的工具。b.dimshuffle('x', 0, 'x', 'x')# 就是把b的原始的第0列向量的左侧添加一个维度,在其右侧添加两个维度。# b原来是个一维数据(2),经过dimshuffle之后,则变成了一个四维数据(1*2*1*1)。# dimshuffle具体的操作,参见文章一开始。output = T.nnet.sigmoid(conv_out + b.dimshuffle('x', 0, 'x', 'x'))# 创建一个用来过滤图像的theano.function(可以把f编译为c,然后就可以随时拿来用了。) # # 当其他函数需要调用f时(调用形式为f(input)),需要传入实参input,然后将计算结果存入output中。 # f = theano.function([input], output)# 下面开始处理几幅图片来看一下效果# 打开一幅图片,源代码中有2个"open",应该是在linux中的语法,我是在windows上运行的,所以改成1个open img = Image.open('g:\\b.jpg')# 得到图片的宽度和高度(注意,顺序一定不要弄反)img_w, img_h = img.size# 将图片像素按照(高度,宽度,通道数量)格式化为array数组# 其实就是将图片数据格式化为一个数组,因为每个像素点包括3个字节,B,G,R,且其范围为0-255,# 这个地方最后将其除以256是为了归一化,归一化后的数据是float64类型img = numpy.asarray(img, dtype='float32') / 256.# 图片的原始数据是一个3D数据【高,宽,通道数量】, # 经过数据置换(transpose(2,0,1))之后,变成了【通道数量,高,宽】, # 因为f中传入参数需要4D,因此需要将图片数据reshape成为一个【1, 通道数量, 高, 宽】这样的4D张量, # reshape的参数一定要注意,1就是最外的那一维度,3就是通道数量,然后是【高】和【宽】, # 这样结果的 img_.shape =【1, 3, 宽, 高】 ## 为什么reshape为这样的size呢?因为调用f时需要传入一个input,而这个input就是4D,最终的这个input是传入到 # conv2d中的第一个参数,而那个参数的格式是什么呢?[mini-batch size,特征图的数量,图像高度,图像宽度]# 这样就串起来了吧,第一个参数是batch size,是每次训练的样本数量,此处为1的话,就是最普通的每次训练一个样本。# 第二个参数代表输入层的特征图数量,这个地方是3,其实就是把一张彩色图片按照3个通道作为3个特征图进行输入;# 最后两个是图像的高度和宽度,正好一一对应。#img_ = img.transpose(2, 0, 1).reshape(1, 3, img_h, img_w)# 将img_作为f的参数,经过计算得到输出filtered_img = f(img_)# 将原始图片显示出来pylab.subplot(1, 3, 1); pylab.axis('off'); pylab.imshow(img)# 图片灰度化pylab.gray();# 分别显示不同处理后的图片pylab.subplot(1, 3, 2); pylab.axis('off'); pylab.imshow(filtered_img[0, 0, :, :])pylab.subplot(1, 3, 3); pylab.axis('off'); pylab.imshow(filtered_img[0, 1, :, :])pylab.show()转载:http://blog.csdn.net/niuwei22007/article/details/48025939
0 0
- theano学习-Convolutional Neural Networks (LeNet)
- Convolutional Neural Networks (LeNet)
- Theano-Deep Learning Tutorials 笔记:Convolutional Neural Networks (LeNet)
- 卷积神经网络LeNet Convolutional Neural Networks (LeNet)
- 利用Theano理解深度学习——Convolutional Neural Networks
- Convolutional Neural Networks学习
- (Convolutional Neural Networks)CNN-卷积神经网络学习
- 【深度学习】卷积神经网络(Convolutional Neural Networks)
- VGG Convolutional Neural Networks Practical 学习笔记
- CNN(Convolutional Neural Networks)学习总结
- 深度学习(3):Convolutional Neural Networks
- TensorFlow学习笔记14----Convolutional Neural Networks
- Convolutional Neural Networks
- Convolutional Neural Networks Posts
- Convolutional neural networks
- Convolutional Neural Networks
- Convolutional Neural Networks: Application
- Convolutional Neural Networks
- 百度ueditor 视频编辑问题以及图片跟视频居中报错问题解决
- HtmlAgilityPack 总结(一)
- Retrofit网络请求入门
- windows命令
- 泪如米兰 白发银沙
- theano学习-Convolutional Neural Networks (LeNet)
- linux sar命令
- 马云力荐:把时间分配在真正重要和真正有趣的事情上
- Android.mk文件
- Java Jvm、Android Dalvik和Android Art(二)——Android之路
- ROS学习--语义理解NODE(NLU,NLP)
- 架构设计:系统间通信(37)——Apache Camel快速入门(中)
- Python入门:函数封装之python调用sqlmap
- 在LINUX服务器下查看公网IP地址