pytorch 自定义卷积核进行卷积操作方式


Posted in Python onDecember 30, 2019

一 卷积操作:在pytorch搭建起网络时,大家通常都使用已有的框架进行训练,在网络中使用最多就是卷积操作,最熟悉不过的就是

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

通过上面的输入发现想自定义自己的卷积核,比如高斯核,发现是行不通的,因为上面的参数里面只有卷积核尺寸,而权值weight是通过梯度一直更新的,是不确定的。

二 需要自己定义卷积核的目的:目前是需要通过一个VGG网络提取特征特后需要对其进行高斯卷积,卷积后再继续输入到网络中训练。

三 解决方案。使用

torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)

pytorch 自定义卷积核进行卷积操作方式

这里注意下weight的参数。与nn.Conv2d的参数不一样

可以发现F.conv2d可以直接输入卷积的权值weight,也就是卷积核。那么接下来就要首先生成一个高斯权重了。这里不直接一步步写了,直接输入就行。

kernel = [[0.03797616, 0.044863533, 0.03797616],
     [0.044863533, 0.053, 0.044863533],
     [0.03797616, 0.044863533, 0.03797616]]

四 完整代码

class GaussianBlur(nn.Module):
  def __init__(self):
    super(GaussianBlur, self).__init__()
    kernel = [[0.03797616, 0.044863533, 0.03797616],
         [0.044863533, 0.053, 0.044863533],
         [0.03797616, 0.044863533, 0.03797616]]
    kernel = torch.FloatTensor(kernel).unsqueeze(0).unsqueeze(0)
    self.weight = nn.Parameter(data=kernel, requires_grad=False)
 
  def forward(self, x):
    x1 = x[:, 0]
    x2 = x[:, 1]
    x3 = x[:, 2]
    x1 = F.conv2d(x1.unsqueeze(1), self.weight, padding=2)
    x2 = F.conv2d(x2.unsqueeze(1), self.weight, padding=2)
    x3 = F.conv2d(x3.unsqueeze(1), self.weight, padding=2)
    x = torch.cat([x1, x2, x3], dim=1)
    return x

这里为了网络模型需要写成了一个类,这里假设输入的x也就是经过网络提取后的三通道特征图(当然不一定是三通道可以是任意通道)

如果是任意通道的话,使用torch.expand()向输入的维度前面进行扩充。如下:

def blur(self, tensor_image):
    kernel = [[0.03797616, 0.044863533, 0.03797616],
        [0.044863533, 0.053, 0.044863533],
        [0.03797616, 0.044863533, 0.03797616]]
    
    min_batch=tensor_image.size()[0]
    channels=tensor_image.size()[1]
    out_channel=channels
    kernel = torch.FloatTensor(kernel).expand(out_channel,channels,3,3)
    self.weight = nn.Parameter(data=kernel, requires_grad=False)
 
    return F.conv2d(tensor_image,self.weight,1,1)

以上这篇pytorch 自定义卷积核进行卷积操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决python写的windows服务不能启动的问题
Apr 15 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python基础知识_浅谈用户交互
May 31 Python
Django实现文件上传下载功能
Oct 06 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
Python hmac模块使用实例解析
Dec 24 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
python中os包的用法
Jun 01 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
PyTorch中反卷积的用法详解
Dec 30 #Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 #Python
Pytorch实现各种2d卷积示例
Dec 30 #Python
Python面向对象之多态原理与用法案例分析
Dec 30 #Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 #Python
python面向对象之类属性和类方法案例分析
Dec 30 #Python
基于Python执行dos命令并获取输出的结果
Dec 30 #Python
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP session有效期问题
2009/04/26 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python re正则表达式模块(Regular Expression)
2014/07/16 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
pygame实现成语填空游戏
2019/10/29 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
考博专家推荐信模板
2013/12/02 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
公司租车协议书
2015/01/29 职场文书
超级礼物观后感
2015/06/15 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS