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程序的方法
Apr 21 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python异常处理知识点总结
Feb 18 Python
浅谈python新式类和旧式类区别
Apr 26 Python
Python实现微信小程序支付功能
Jul 25 Python
超实用的 30 段 Python 案例
Oct 10 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
Pytorch的mean和std调查实例
Jan 02 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
python使用glob检索文件的操作
May 20 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jqTransform美化表单
2015/10/10 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Python实现的简单hangman游戏实例
2015/06/28 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Python重新加载模块的实现方法
2018/10/16 Python
python实现微信自动回复机器人功能
2019/07/11 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
梅西百货官网:Macy’s
2020/08/04 全球购物
《凡卡》教学反思
2014/04/09 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
2014年度考核工作总结
2014/12/24 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android