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 random模块常用方法
Nov 03 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
python递归法解决棋盘分割问题
Jul 17 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
django和flask哪个值得研究学习
Jul 31 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
DRF使用simple JWT身份验证的实现
Jan 14 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 第二节 数据类型之字符串类型
2012/04/28 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
使用JS动态显示文本
2017/09/09 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
小试SVG之新手小白入门教程
2019/01/08 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
少先队入队活动方案
2014/02/08 职场文书
签约仪式策划方案
2014/06/02 职场文书
元旦晚会活动总结
2014/07/09 职场文书
学雷锋日活动总结
2015/02/06 职场文书
公司承诺书格式范文
2015/04/28 职场文书
婚宴主持词
2015/06/30 职场文书
初二物理教学反思
2016/02/19 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技