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 中文乱码问题深入分析
Mar 13 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
django将数组传递给前台模板的方法
Aug 06 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 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简单遍历对象示例
2016/09/28 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
js实现楼层导航功能
2017/02/23 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python list操作用法总结
2015/11/10 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python conda操作方法
2019/09/11 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
解决python replace函数替换无效问题
2020/01/18 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
关于Java finally的面试题
2016/04/27 面试题
土木工程专业自荐信
2013/10/04 职场文书
个人简历中的自我评价范例
2013/10/29 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
村党建工作汇报材料
2014/11/02 职场文书
审美与表现自我评价
2015/03/09 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript