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实现的快速排序算法详解
Aug 01 Python
pip命令无法使用的解决方法
Jun 12 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python conda操作方法
Sep 11 Python
python redis 批量设置过期key过程解析
Nov 26 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
python实现监听键盘
Apr 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
javascript基本语法
2016/05/31 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python实现实时监控文件的方法
2016/08/26 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
Python reversed函数及使用方法解析
2020/03/17 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
二手车交易协议书标准版
2014/11/16 职场文书
地球上的星星观后感
2015/06/02 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
高中语文教学反思范文
2016/02/16 职场文书
靠谱的活动总结
2019/04/16 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python
nginx常用配置conf的示例代码详解
2022/03/21 Servers