(1) 定义计算过程中需要的symbolic expression

 """
定义相关的symbolic experssion
"""
# convolution layer的输入,根据theano,它应该是一个4d tensor
input = T.tensor4(name='input')
# 共享权值W,它的shape为2,3,9,9
w_shp = (2,3,9,9);w_bound = numpy.sqrt(3*9*9)
W = theano.shared(numpy.asarray(rng.uniform(low= -1.0/w_bound, high = 1.0/w_bound,size=w_shp),dtype=input.dtype),name='W')
# 利用卷积核W对input进行卷积运算
conv_out = conv.conv2d(input,W)
# 偏执向量b
b_shp = (2,) # b是一个只有1个元素2的tuple
b = theano.shared(numpy.asarray(rng.uniform(low= -.5, high = .5,size=b_shp),dtype=input.dtype),name='b')
# 计算sigmoid函数
output = T.nnet.sigmoid(conv_out+b.dimshuffle('x',0,'x','x'))
# 输入输出function
f = theano.function([input],output)

(2)利用真实数据计算

 """
开始使用具体数值
"""
# 读入图像
img = Image.open('3wolfmoon.jpg', mode='r')
# 将输入图像存入在array中
img = numpy.array(img,dtype='float64')/256
# 对输入图像进行reshape
img_=img.transpose(2,0,1).reshape(1,3,639,516)
# 利用convolution kernel对输入图像进行卷积运算
filtered_img=f(img_)

(3)绘制需要显示的图像

 """
绘制图像
"""
# 显示原始图像
pylab.subplot(1,3,1);pylab.axis('off');pylab.imshow(img);pylab.gray()
# 显示filter后的图像的channel1
pylab.subplot(1,3,2);pylab.axis('off');pylab.imshow(filtered_img[0,0,:,:])
# 显示filter后的图像的channel2
pylab.subplot(1,3,3);pylab.axis('off');pylab.imshow(filtered_img[0,1,:,:])
# 显示
pylab.show()

整个代码段

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

 # 导入相关的模块
import theano
from theano import tensor as T
from theano.tensor.nnet import conv
import numpy
import pylab
from PIL import Image # 产生随机数的种子
rng = numpy.random.RandomState(23455) """
定义相关的symbolic experssion
"""
# convolution layer的输入,根据theano,它应该是一个4d tensor
input = T.tensor4(name='input')
# 共享权值W,它的shape为2,3,9,9
w_shp = (2,3,9,9);w_bound = numpy.sqrt(3*9*9)
W = theano.shared(numpy.asarray(rng.uniform(low= -1.0/w_bound, high = 1.0/w_bound,size=w_shp),dtype=input.dtype),name='W')
# 利用卷积核W对input进行卷积运算
conv_out = conv.conv2d(input,W)
# 偏执向量b
b_shp = (2,) # b是一个只有1个元素2的tuple
b = theano.shared(numpy.asarray(rng.uniform(low= -.5, high = .5,size=b_shp),dtype=input.dtype),name='b')
# 计算sigmoid函数
output = T.nnet.sigmoid(conv_out+b.dimshuffle('x',0,'x','x'))
# 输入输出function
f = theano.function([input],output) """
开始使用具体数值
"""
# 读入图像
img = Image.open('3wolfmoon.jpg', mode='r')
# 将输入图像存入在array中
img = numpy.array(img,dtype='float64')/256
# 对输入图像进行reshape
img_=img.transpose(2,0,1).reshape(1,3,639,516)
# 利用convolution kernel对输入图像进行卷积运算
filtered_img=f(img_) """
绘制图像
"""
# 显示原始图像
pylab.subplot(1,3,1);pylab.axis('off');pylab.imshow(img);pylab.gray()
# 显示filter后的图像的channel1
pylab.subplot(1,3,2);pylab.axis('off');pylab.imshow(filtered_img[0,0,:,:])
# 显示filter后的图像的channel2
pylab.subplot(1,3,3);pylab.axis('off');pylab.imshow(filtered_img[0,1,:,:])
# 显示
pylab.show()

theano中对图像进行convolution 运算的更多相关文章

  1. 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!

            经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...

  2. Theano入门笔记1:Theano中的Graph Structure

    译自:http://deeplearning.net/software/theano/extending/graphstructures.html#graphstructures 理解Theano计算 ...

  3. theano中的scan用法

    scan函数是theano中的循环函数,相当于for loop.在读别人的代码时第一次看到,有点迷糊,不知道输入.输出怎么定义,网上也很少有example,大多数都是相互转载同一篇.所以,还是要看官方 ...

  4. PS中的图像知识

    图像处理对于前端工作来说是一个不能回避的问题,ps技术也是我们必备的技能.用法可以在使用中不断的熟练,但针对前端技术本身的一些知识点,需要我们平时不断的积累才能够在使用中不出现问题. 如今的办公,已经 ...

  5. theano中的dimshuffle

    theano中的dimshuffle函数用于对张量的维度进行操作,可以增加维度,也可以交换维度,删除维度. 注意的是只有shared才能调用dimshuffle() 'x'表示增加一维,从0d sca ...

  6. (转)原始图像数据和PDF中的图像数据

    比较原始图像数据和PDF中的图像数据,结果见表1.1.表1.1中各种“解码器”的解释见本文后续的“PDF支持的图像格式”部分,“PDF中的图像数据”各栏中的数据来自开源的PdfView.如果您有兴趣查 ...

  7. Android中解决图像解码导致的OOM问题

    Android中解决图像解码导致的OOM问题 原文链接:http://blog.csdn.net/zjl5211314/article/details/7042017

  8. 如何在图像处理工具包ImagXpress中对图像进行捕捉、复制和粘贴

    如何在在ImagXpress中进行图像的捕捉. 复制和粘贴呢?下面详细来看一下,在多种情况下,图和实现这些操作. 捕捉屏幕图像 捕捉通过ImageXView窗口绑定的屏幕范围,以及保存到一个Image ...

  9. C# 在SQLite数据库中存储图像 z

    C# 在SQLite数据库中存储图像 更多 0 C# SQLite   建表语句 CREATE TABLE [ImageStore]([ImageStore_Id] INTEGER NOT NULL ...

随机推荐

  1. Look and say numbers

    地址:http://www.codewars.com/kata/53ea07c9247bc3fcaa00084d/train/python There exists a sequence of num ...

  2. 在内核外编写的linux驱动程序MAKEFILE

    一般都是这么写: ifneq ($(KERNELRELEASE),) obj-m :=  else KERNELDIR ?= /lib/modules/$(shell uname -r)/build ...

  3. ACM 关于数据输入加速

    转载请注明出处:http://blog.csdn.net/a1dark 分析:我们都知道运行时间对我们来说很重要.有时候不惜用大量的内存去换取一点时间.有些人可能都比较关注这个问题.首先时间上:cin ...

  4. 系统性能优化分析—CPU消耗

    http://blog.csdn.net/longdel/article/details/7296446

  5. 高效 jquery 的奥秘

    当你准备使用 jQuery,我强烈建议你遵循下面这些指南: 1. 缓存变量 DOM 遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $( ...

  6. pnd_start_2

    试过才知道一点都不简单,虽然表现出的逻辑是错的,但是至少运行上是正确的.

  7. 整理收藏一份PHP高级工程师的笔试…

    注:本文转自 http://www.icultivator.com/p/5535.html 注:本文转自 http://www.yiichina.com/tutorial/57 整理了一份PHP高级工 ...

  8. SOCKET,TCP/UDP,HTTP,FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  9. Android学习之旅:五子棋

    在学完了Android的基础之后,我开始尝试着写一些小项目练练手,同时进一步巩固自己的基础知识,而我选的的第一个项目就是做一个简单的人人对战的五子棋小游戏. 首先,我们要新建一个自定义控件类Panel ...

  10. oracle学习笔记3:基本的SQL语句

    oracle基本的SQL语句和SQLSERVER基本一样,在这里只简单列出与SQLSERVER不一样的地方 1.select * from orderinfo where address = 'abc ...