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代码制作configure文件示例
Jul 28 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python mysql断开重连的实现方法
Jul 26 Python
python爬虫增加访问量的方法
Aug 22 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
python 实现批量图片识别并翻译
Nov 02 Python
python自动计算图像数据集的RGB均值
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中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
PHP对象实例化单例方法
2017/01/19 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python uuid模块使用实例
2015/04/08 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Python中new方法的详解
2019/01/15 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
python 的topk算法实例
2020/04/02 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
财务担保书范文
2014/04/02 职场文书
学习雷锋标语
2014/06/25 职场文书
综治工作心得体会
2014/09/11 职场文书
学习心得体会
2019/06/20 职场文书
承诺书应该怎么写?
2019/09/10 职场文书