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使用xmlrpc实例讲解
Dec 17 Python
python进阶教程之异常处理
Aug 30 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
python使用udp实现聊天器功能
Dec 10 Python
python实现烟花小程序
Jan 30 Python
python虚拟环境完美部署教程
Aug 06 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python基础知识之变量的详解
Apr 14 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 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
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
python+mongodb数据抓取详细介绍
2017/10/25 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
某个公司的Java笔面试题
2016/03/11 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
会计专业毕业自荐书范文
2014/02/08 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
经理聘任证明
2015/03/02 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书