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编程中一些重用与缩减的建议
Apr 14 Python
Python验证码识别处理实例
Dec 28 Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
Pytorch 实现变量类型转换
May 17 Python
Python爬取某拍短视频
Jun 11 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
python保存图片的四个常用方法
Feb 28 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python中实现控制小数点位数的方法
2019/01/24 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
揠苗助长教学反思
2014/02/04 职场文书
劲霸男装广告词
2014/03/21 职场文书
教师考核评语大全
2014/12/31 职场文书
餐厅开业活动方案
2019/07/08 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python