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实现115网盘自动下载的方法
Sep 30 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
python调用OpenCV实现人脸识别功能
May 25 Python
python flask实现分页的示例代码
Aug 02 Python
Python中调用其他程序的方式详解
Aug 06 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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实现window平台的checkdnsrr函数
2015/05/27 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP6新特性分析
2016/03/03 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
python实现扫雷游戏
2020/03/03 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
乔迁宴答谢词
2014/01/21 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
地震捐款简报
2015/07/21 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js