(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. KVM地址翻译流程及EPT页表的建立过程

    本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/9284635 ------------------ ...

  2. SQL高级优化之经常使用的优化策略-2(The Return Of The King)

    1.2 索引 索引不是越多越好,你须要知道索引建立多了.写入数据的效率会减少.怎样使用索引要看你的项目的应用场景,做出合理的測试评估. 1.2.1 统计数量 统计数量上.假设字段(fieldName) ...

  3. 通过strace 监控 fdatasync

    通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置 「appendonly yes」 开启每次更新操作后进行日志记录 「appendfilename appendo ...

  4. careercup-链表 2.7

    2.7 编写一个函数,检查链表是否为回文. 思路:1)可以利用链表中的元素采用头插法创建一个新的链表,然后比较两个链表的元素是否相等.   2)利用快慢指针,将链表后半部分逆转之后,比较前半部分与后半 ...

  5. 【NodeJs】用arrayObject.join('')处理粘包的错误原因

    服务器测试代码如下: var net = require('net'); var server = net.createServer(function(c){ console.log('client ...

  6. iOS在xib或storyboard里为控件添加圆角、外框和外框颜色

    如果要在xib和storyboard里为控件添加圆角和外框宽度,只要这样做就可以: layer.borderWidth 设置外框宽度属性 layer.cornerRadius 设置圆角属性 只要为属性 ...

  7. 基于Lucene的文件检索Demo

    通过Lucene实现了简单的文件检索功能的Demo.这个Demo支持基于文件内容的检索,支持中文分词和高亮显示. 下面简单的介绍下核心的类 1)索引相关的类 1.FileIndexBuilder -- ...

  8. mac 神奇时光机

    http://bbs.zol.com.cn/nbbbs/d544_8216.html

  9. JOSN对象与JSON字符串的相互转化

    前端在与服务端通信时.会与JSON JSON字符串经常打交道. 什么是JSON?  如果不太清楚可以点击这里 服务端传过来的数据一般都是一串字符串,jQuery AJAX中的success函数的第一个 ...

  10. day-9

    /* 考前第9天 区间*的线段树居然卡住了23333 明天再搞搞 今天针对考试复习了几个板子 手动堆都打了 实测比priority快 下午考试成了炮灰233333 晚上复习矩阵乘法 手推9*9矩阵 可 ...