pytorch 自定义卷积核进行卷积--卷积核订制

使用torch自实现简易版conv2d卷积(2种方法) padding参数代表在输入特征矩阵四周补零的情况默认为0,同样输入可以为int型如1 代表上下方向各补一行,左右方向各补一列,如果输入为tuple型如(2, 1) 代表在上下方向补两行,左右方向补一列。kernel_size参数代表卷积核的尺寸,输入可以是int类型如3 代表卷积核的height=width=3,也可以是tuple类型如(3, 5)代表卷积核的height=3,width=5;卷积核尺寸为3*3*3,一共有2个卷积核;输入特征图尺寸为5*5,通道为3;– 卷积核元素之间的间距; 阅读详情

镜像问题:tensorflow 卷积:设定特定卷积核

动机:

有时候我们希望对神经网络得到的张量进行特定的卷积操作,如求梯度,求边缘等。

或者,有时我们希望把图像进行预处理操作后输入神经网络,而这个预处理可以用卷积操作实现,如求梯度或高斯滤波。我们希望这个卷积操作在GPU上执行,这样可以加快运行速度。

这就需要我们在pytorch中进行自定义的卷积核卷积。

困难:

在常用的pytorch的卷积操作中,只有卷积核的尺寸和通道信息,且定义的卷积核是可训练的变量,无法实现卷积核订制,且保持不变

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

解决方法:

幸运的是,torch.nn.functional.conv2d 可以实现卷积核订制。

torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)

该函数的参数如下:

  • input – input tensor of shape (minibatch,in_channels,iH,iW) # [N,C,H,W]

  • weight – filters of shape(out_channels,in_channels​,kH,kW) # [C_out,C_in,kH,kW]

  • bias – optional bias tensor of shape (out_channels) . Default: None

  • stride – the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

  • padding – implicit paddings on both sides of the input. Can be a single number or a tuple (padH, padW). Default: 0

  • dilation – the spacing between kernel elements. Can be a single number or a tuple (dH, dW). Default: 1

  • groups – split input into groups, \text{in\_channels}in_channels should be divisible by the number of groups. Default: 1

 

注意事项:

在torch.nn.functional.conv2d中,input.shape=[B,C,H,W],卷积核weight.shape=[out_channels,in_channels,h,w]。这与tensorflow中的习惯不同。

如果输入的数据的shape=[B,C,H,W],可使用 tensor.permute()操作进行张量维度的重新排列。

应用示例:

import cv2
import torch
import torch.nn as nn
import torch.nn.functional as F

import numpy as np
import matplotlib.pyplot as plt

def gradient_blur_bhwc(input_bhwc):
	"""
	:param     input_bhwc: shape=[B,H,W,C]
	:return:   grad_x_bhwc: x方向梯度图,shape = [B,H,W-1,1]
		       grad_y_bhwc:y方向梯度图,shape = [B,H-1,W,1]
	"""
	in_channel = input_bhwc.size()[-1]
	input_bchw = input_bhwc.permute(0,3,1,2)

	filter_x = torch.tensor([[[[-1., 1.]]] * in_channel], dtype=torch.float32)  # [outchannel,in_channel,h,w]=>[1,3,1,2]
	filter_y = torch.tensor([[[[-1.], [1.]]] * in_channel],dtype=torch.float32)  # [outchannel,in_channel,h,w]=>[1,3,2,1]
	
	grad_x_bhwc = F.conv2d(input_bchw, weight=filter_x, stride=1).permute(0,2,3,1)
	grad_y_bhwc = F.conv2d(input_bchw, weight=filter_y, stride=1).permute(0,2,3,1)
	
	return grad_x_bhwc,grad_y_bhwc


def gradient_blur_bchw(input_bchw):
	"""
	:param      input_bchw: shape=[B,C,H,W]
	:return:	grad_x_bchw: x方向梯度图,shape = [B,1,H,W-1]
		        grad_y_bchw:y方向梯度图,shape = [B,1,H-1,W]
	"""
	in_channel = input_bchw.size()[1]
	
	filter_x = torch.tensor([[[[-1., 1.]]] * in_channel], dtype=torch.float32)  # [outchannel,in_channel,h,w]=>[1,3,1,2]
	filter_y = torch.tensor([[[[-1.], [1.]]] * in_channel],dtype=torch.float32)  # [outchannel,in_channel,h,w]=>[1,3,2,1]
	
	grad_x_bchw = F.conv2d(input_bchw, weight=filter_x, stride=1)
	grad_y_bchw = F.conv2d(input_bchw, weight=filter_y, stride=1)
	
	return grad_x_bchw, grad_y_bchw

input_bhwc = torch.tensor(np.expand_dims(cv2.imread("001.jpg"),axis=0),dtype=torch.float32) # b,h,w,c
input_bchw = input_bhwc.permute(0,3,1,2)
grad_x_bchw, grad_y_bchw = gradient_blur_bchw(input_bchw)

# 可视化
print(grad_x_bchw.shape,grad_y_bchw.shape)
plt.figure()
plt.subplot(131)
plt.imshow(input_bhwc[0,...]/255.,cmap='gray')
plt.subplot(132)
plt.imshow(grad_x_bchw[0,0,...],cmap='gray')
plt.subplot(133)
plt.imshow(grad_y_bchw[0,0,...],cmap='gray')
plt.show()

参考:pytorch 自定义高斯核进行卷积操作

pytorch 自定义卷积核进行卷积操作方式 今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

pytorch 自定义核进行卷积操作

1.介绍     高斯滤波的用处很多,也有很多现成的包可以被调用,比如opencv里面的cv2.GaussianBlur,一般情况,我们是没必要去造轮子,除非遇到特殊情况,比如我们在使用pytorch的过程中,需要自定义高斯核进行卷积操作,假设,我们要用的高斯核的参数是以下数目: 0.00...

Arthur_Holmes的博客 1882

多智能体协作的本质是中介者模式,不是多开Agent

多智能体系统并非简单启动多个Agent实例,而是一种受控的、可验证的动态交互过程。其核心原理在于解耦Agent间直接依赖,通过中央中介者统一管理任务分发、协议转换、状态协调与故障兜底。这种架构显著提升系统的可观测性、容错性与可维护性,技术价值体现在强一致性保障(如金融订单原子操作)与灵活自治平衡(如边缘设备轻量协同)。典型应用场景包括电商客服协同、工业巡检调度、飞书/微信多渠道智能服务等。OpenClaw与Hermes Agent正是这一范式的工程落地代表,分别体现强中介与弱中介两种演进路径。

weixin_34151004的博客 359

Pytorch学习日记02-自定义模型及卷积操作

最简单的方式了解Pytorch中的卷积过程。了解每一个参数每一个结果的图像化展示。

qq_43617906的博客 926

ros1 Noetic下运行cartographer算法进行2d建图

最近的工作重点放在机器狗的二次开发上,项目的需求是要升级机器狗的slam算法和导航避障算法,slam拟采用激光与视觉融合算法,激光slam就使用最为流行和实用的cartoghper算法。在这过程中遇到好多坑,希望看到这篇博客的人能少走弯路吧。我用的仿真机器人是wpr_simiulation。首先复制一份demo_revo_lds.launch文件和revo_lds.lua文件,修改成下面的样子。my_test.lua文件,base_link就是机器人的坐标系。下载与安装的博客有很多,我推荐。

sun5739的博客 1547

视觉SLAM与激光SLAM简单对比分析

本文旨在梳理目前较为前沿的SLAM技术,包括激光和视觉,主要从精度和实时性两个方面对算法进系评价。对于激光SLAM了解不深,后期需要补充相关算法的核心思想与算法框架。有问题请大佬们随时留言,我再改正。

超爱吃小蛋糕的66的博客 3854

Pytorch学习-自定义卷积核

这段代码定义了一个标准的2D卷积层,并打印出卷积核的形状以及卷积核的前两个元素。你可以通过更改in_channels, out_channels, kernel_size, stride, 和 padding 的值来定制你的卷积层。

黑猴子1357751126@qq.com 561

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2145

PyTorch 自定义卷积核「数据」

在做一些模型分析的时候可能需要将卷积核内的参数定制化(eg:全为1),此时就没办法直接使用模型中定义好的卷积了,需要将其数据给修改下方能使用,但是其输入输出通道以及卷积核大小需要留用,在此就可以单独的将 卷积的 weight/bias 进行从新赋值即可: ⚠️注意 在给 conv.weight/bais.data 赋值的时候,其类型必须是 Tensor 维度必须符合卷积核的尺寸,即 conv.weight : dim=(in_dim, out_dim, kerneal_size) conv.bias

绿色羽毛 4803

【Bug已解决】Codex CLI 报 stream disconnected before completion 解决方案

方案适用场景推荐指数更新根证书库社区验证的最常见根因⭐⭐⭐⭐⭐检查系统时间虚拟机/容器等特殊运行环境⭐⭐⭐⭐核对 base_url 配置排除证书问题后的下一步排查⭐⭐⭐⭐更换网络环境测试怀疑本地网络设备存在干扰⭐⭐⭐升级到最新版本已知版本缺陷的场景⭐⭐⭐⭐报错虽然表现形式很像网络连接问题,但社区排查的多个真实案例表明,很大一部分情况的根因其实是本机系统的 TLS 证书信任链异常或系统时间不准确,而不是单纯的网络质量问题。优先检查并更新系统根证书库,这是社区验证过的高频根因。

一键难忘的博客 8017

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 910

pytorch 自定义高斯核进行卷积操作

pytorch 自定义高斯核进行卷积操作

修行之路 1870

FISCO BCOS(八)——— 一键部署 WeBase

环境 版本 Java Oracle JDK 8 至 14 MySQL MySQL-5.6及以上 Python Python3.6及以上 PyMySQL 1、获取部署安装包: wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip 2、解压安装包: unzip webase-deploy.zip 3、进入目录: c...

林中有神君 3607

自定义卷积核——pytorch

自定义卷积核——pytorch 自定义一些常见的滤波器卷积核,定义成类,可以在网络框架中直接调用 定义类,写入自定义卷积核,用于网络处理图片 高斯滤波器写入网络框架 import torch import torch.nn as nn import torch.nn.functional as F from torch.autograd import Variable import numpy as np import cv2 import matplotlib.pyplot as plt clas

bank777777的博客 2808

微信小程序 - 获取用户头像昵称等信息(带授权检测)

前言 接口调整官方文档:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01 在以前,是否授权可以直接弹出询问用户,但现在微信更改了策略,必须由用户点击按钮触发。下面将用代码来实现用户授权及获取用户信息。 功能介绍 无论确认授权还是拒绝授权,都会跳转对应页面,不让用户卡在界面。 点击授权后,下次不在出现授权页面了,如果拒绝,下次依然出现。 以下代码可直接复制粘贴,具体功能如下:

🏆 前端领域优质创作者 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pytorch 自定义卷积核进行卷积操作

一 卷积操作:在pytorch搭建起网络时,大家通常都使用已有的框架进行训练,在网络中使用最多就是卷积操作,最熟悉不过的就是 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, gro...

Arthur_Holmes的博客 2980

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【已解决 含代码调试分析】pytorch自定义手动设置卷积核

卷积内部结构卷积核内部结构例如迁移学习,或者使用固定参数初始化等,有些模型的初始化并不一样,都可能需要使用到自定义卷积核。找到卷积核所在的tensor,conv.weight.data,然后对其赋值操作。运行结果。

pytorch 入门与进阶 978

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pytorch高斯函数自定义卷积核

1.直接输入参数 np.repeat()用于将numpy数组重复。 numpy.repeat(a, repeats, axis=None); 参数: axis=0,沿着y轴复制,实际上增加了行数 axis=1,沿着x轴复制,实际上增加了列数 torch.nn.functional.conv2d(input,filters,bias,stride,padding, dilation,groups) 在一次卷积计算中,filter可以在input的两个维度上扫描,即参数str...

jsc142915的博客 3053

pytorch深度学习基础(九)——深入浅析卷积核

提到卷积,应该多数人都会想到类似上图的这种示例,可以简单的理解成卷积核与图像中和卷积核相同大小的一块区域与卷积核相乘再求和,通过移动区域产生一个有和组成的新的图像,那么卷积核是什么呢,本文将从原理通俗易懂的介绍卷积核

艾醒的博客 1941

pytorch自定义高斯卷积核进行卷积

pytorch支持自定义卷积核进行卷积操作,使用 torch.nn.functional.conv2d 下面是我用到的自定义高斯卷积核的代码: class SA_net(nn.Module): def __init__(self): super(SA_net, self).__init__() kernel =get_kernel(kernlen=5,nsig=3) #获得高斯卷积核 kernel = torch.FloatTensor(ker

rocking_struggling的博客 3661

深度学习pytorch之简单方法自定义9类卷积即插即用

本文详细解析了 PyTorch 中 torch.nn.Conv2d 的核心参数,通过代码示例演示了如何利用这一基础函数实现多种卷积操作。涵盖的卷积类型包括:标准卷积、逐点卷积(1x1 卷积)、非对称卷积(长宽不等的卷积核)、空洞卷积(扩大感受野)、深度卷积(逐通道滤波)、组卷积(分组独立处理)、深度可分离卷积(深度+逐点组合)、转置卷积(上采样)和动态卷积(动态生成卷积核),帮助读者理解如何通过调整参数灵活构建卷积层,适应不同任务需求。

一个AI从业者的博客 1384

如何在 PyTorch 中自定义卷积核参数(亲测,已解决)

如何在 PyTorch 中自定义卷积核参数(亲测,已解决)

Vertira的博客 931

Pytorch常用的函数(三)深度学习中常见的卷积操作详细总结

Pytorch常用的函数(三)深度学习中常见的卷积操作详细总结

qq_44665283的博客 4160

pytorch之nn.Conv2d用法

nn.functional.Conv2d提供了卷积的计算函数,需要自己定义卷积核,输入图像的相关信息(值),从而帮助计算卷积。而nn.Conv2d类仅需要提供输入层,卷积核的尺寸信息即可计算,自动初始化权重等信息。

mengdeer_Q的博客 903

pytorch中的卷积操作详解

深度好文-----pytorch中的卷积操作详解 首先说下pytorch中的Tensor通道排列顺序是:[batch, channel, height, width] 我们常用的卷积(Conv2d)在pytorch中对应的函数是: torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, gr

Lily的博客 3090

Pytorch学习笔记——卷积操作

卷积操作是一种数学运算,它涉及两个函数:输入函数(通常是图像)和卷积核(也称为滤波器或特征检测器)。卷积核在输入函数上滑动,将核中的每个元素与其覆盖的输入函数区域中的对应元素相乘,然后将所有乘积相加,形成输出函数的一个值。这个过程在整个输入函数上重复,生成一个新的二维数组,称为特征图或激活图。卷积操作的主要目的是从输入数据中提取特征。通过改变卷积核的值,可以检测不同类型的特征,如边缘、角点、纹理等。

weixin_50765519的博客 1895
上一篇: Pytorch Dataset类和Dataloader实践
下一篇: pytorch convLSTM实现
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值