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单线程实现多个定时器示例
Mar 30 Python
python数据结构之二叉树的建立实例
Apr 29 Python
浅谈django中的认证与登录
Oct 31 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 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
zend framework配置操作数据库实例分析
2012/12/06 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
JS实现吸顶特效
2020/01/08 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
Linux的主要特性
2016/09/03 面试题
店长岗位职责
2013/11/21 职场文书
社会实践心得体会
2014/01/03 职场文书
学年自我鉴定
2014/01/16 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
共产党员承诺书
2014/03/25 职场文书
环境科学专业求职信
2014/08/04 职场文书
技术支持岗位职责
2015/02/13 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
Python实现双向链表
2022/05/25 Python