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实现从字典中删除元素的方法
May 04 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
Python 私有函数的实例详解
Sep 11 Python
TensorFlow如何实现反向传播
Feb 06 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python求解正态分布置信区间教程
Nov 20 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
python利用opencv保存、播放视频
Nov 02 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
使用PHP编写发红包程序
2015/07/22 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
Python之str操作方法(详解)
2017/06/19 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
python3实现飞机大战
2020/11/29 Python
10个顶级Python实用库推荐
2021/03/04 Python
说明书怎么写
2014/05/06 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书