用于CUDA FFT的PyTorch包装器pytorch-fft
用于CUDA FFT的PyTorch包装器pytorch-fft
原文:https://ptorch.com/news/73.html
由Eric Wong提供的PyTorch C
扩展程序包,用于执行批量的2D CuFFT
转换
安装
这个包在PyPi
上。使用pip install pytorch-fft
即可安装
用法
从pytorch_fft.fft
模块中,您可以使用以下函数执行前向和后向FFT
转换(复杂到复杂)
fft
和ifft
一维变换fft2
和ifft2
2D
转换fft3
和ifft3
3D
转换
从同一个模块中,还可以使用以下方法实现复杂/复杂到实际的FFT转换
rfft
和irfft
一维变换rfft2
和irfft2
2D
转换rfft3
和irfft3
3D
转换
对于d-D
变换,需要输入张量具有> =(d + 1)
尺寸(N1 X ... X NK X M1 X ... X MD)
,其中n1 x ... x nk
是批处理FFT
变换,并且m1 x ... x md
是尺寸的 d-D
变换。d
必须是从1到3的数字。
最后,该模块包含以下帮助函数,您可能会觉得有用
reverse(X, group_size=1)
颠倒张量的元素,并返回一个新的张量的结果。请注意,PyTorch目前不支持负面切片,请参阅此 问题。如果提供了一个组的大小,这些元素将在这个大小的组中反转。expand(X, imag=False, odd=True)
采用实际的二维或三维FFT的张量输出,并用其冗余条目进行扩展,以匹配复数FFT的输出。
对于autograd
支持,请在pytorch_fft.fft.autograd
模块中使用以下功能 :
Fft
和Ifft
一维变换Fft2d
和Ifft2d
2D
转换Fft3d
和Ifft3d
3D
转换
# Example that does a batch of three 2D transformations of size 4 by 5.
import torch
import pytorch_fft.fft as fftA_real, A_imag = torch.randn(3,4,5).cuda(), torch.zeros(3,4,5).cuda()
B_real, B_imag = fft.fft2(A_real, A_imag)
fft.ifft2(B_real, B_imag) # equals (A, zeros)B_real, B_imag = fft.rfft2(A) # is a truncated version which omits# redundant entriesreverse(torch.arange(0,6)) # outputs [5,4,3,2,1,0]
reverse(torch.arange(0,6), 2) # outputs [4,5,2,3,0,1]expand(B_real) # is equivalent to fft.fft2(A, zeros)[0]
expand(B_imag, imag=True) # is equivalent to fft.fft2(A, zeros)[1]
# Example that uses the autograd for 2D fft:
import torch
from torch.autograd import Variable
import pytorch_fft.fft.autograd as fft
import numpy as npf = fft.Fft2d()
invf= fft.Ifft2d()fx, fy = (Variable(torch.arange(0,100).view((1,1,10,10)).cuda(), requires_grad=True), Variable(torch.zeros(1, 1, 10, 10).cuda(),requires_grad=True))
k1,k2 = f(fx,fy)
z = k1.sum() + k2.sum()
z.backward()
print(fx.grad, fy.grad)
笔记
这个遵循NumPy
的语义和行为,就比如ifft2(fft2(x)) = x
。请注意,用于反向FFT
的CuFFT
语义只会翻转变换的符号,但它不是真正的逆。
同样,真正的complex / complex
到真正的变体也遵循NumPy
的语义和行为。在1D
情况下,这意味着对于大小的输入N
,它返回大小的输出N//2+1
(它省略了多余的条目,请参阅Numpy
文档)
pytorch_fft.fft
模块中的函数不实现PyTorch autograd Function
,并且在语义和功能上都与它们的numpy
等价。
Autograd
功能在pytorch_fft.fft.autograd
模块中。
知识库内容
pytorch_fft/src
:C源代码pytorch_fft/fft
:Python便捷包装build.py
:编译文件test.py
:测试NumPy FFT
和Autograd
检查
问题和贡献
如果您有任何问题或功能要求,请提交问题或发送PR。
用于CUDA FFT的PyTorch包装器pytorch-fft相关推荐
- java如何给一个链表定义和传值_如何在CUDA中为Transformer编写一个PyTorch自定义层...
如今,深度学习模型处于持续的演进中,它们正变得庞大而复杂.研究者们通常通过组合现有的 TensorFlow 或 PyTorch 操作符来发现新的架构.然而,有时候,我们可能需要通过自定义的操作符来实现 ...
- Pytorch学习 - Task6 PyTorch常见的损失函数和优化器使用
Pytorch学习 - Task6 PyTorch常见的损失函数和优化器使用 官方参考链接 1. 损失函数 (1)BCELoss 二分类 计算公式 小例子: (2) BCEWithLogitsLoss ...
- Linux服务器安装cuda,cudnn,显卡驱动和pytorch超详细流程
原文链接:https://blog.csdn.net/kingfoulin/article/details/98872965 基本的环境 首先了解自己服务器的操作系统内核版本等信息: 查看自己操作系统 ...
- Pytorch优化器Optimizer
优化器Optimizer 什么是优化器 pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签 导数:函数在指定坐标轴上的变化率 方向导数:指定方向上的变化率(二元及以上函 ...
- pytorch 优化器
深度学习五个步骤:数据 --> 模型 --> 损失函数 --> 优化器 --> 迭代训练,通过前向传播,得到模型的输出和真实标签之间的差异,也就是损失函数,有了损失函数之后,模 ...
- 低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0))
低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0)) 一 电脑配置 二 正常情况下源码编译步骤 三 我的编译过程及出现的问题 首先 安装 ...
- Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad
目录 写在前面 一. torch.optim.SGD 随机梯度下降 SGD代码 SGD算法解析 1.MBGD(Mini-batch Gradient Descent)小批量梯度下降法 2.Moment ...
- ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器
目录 介绍 为什么? 怎么做? VMD.RESTApiResponseWrapper Nuget软件包 安装及使用 ASP.NET Core集成 ASP.NET Web API集成 样本响应输出 定义 ...
- Pytorch:优化器
4.2 优化器 PyTorch将深度学习中常用的优化方法全部封装在torch.optim中,其设计十分灵活,能够很方便的扩展成自定义的优化方法. 所有的优化方法都是继承基类optim.Optimize ...
最新文章
- 用户故事与敏捷方法阅读笔记03
- [官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机
- winform 分页控件分享(二)
- 万字长文带你从零开始认识机器学习
- [精华][推荐]CAS SSO实现单点登录实例源码
- MySQL 性能优化--QueryCache的原理
- IPSec L2L ××× 之 Router-to-ASA
- CentOS_Oracle Enterprise Manager 11g 页面中文无法显示
- DBArtist之Oracle入门第1步: 如何安装Oracle 11g
- 在centos上安装mysql
- PADS2007无模命令与快捷键
- 【QT】简单易学的QT安装教程
- cisp证书考试费用_cisp考试费多少钱
- ActiveX开发详解
- MySQL服务器的超级管理员名称是_mysql服务器忘记了超级管理员root密码
- [视频]K8软件破解脱壳入门教程
- gold storm翔_牙狼GOLD STORM翔的人物简介
- @Deprecated
- 蓝标智能营销转型之战 ——Oracle Eloqua 市场营销云助力蓝标盈云迎战全渠道营销...
- 设置无线路由器与有线网络在同一网段
热门文章
- php文件上传绕过mime类型,文件上传限制绕过技巧
- variable java_在XSLT中使用Variable Argument调用Java方法
- python使用osgeo库_python中使用gdal,osgeo
- 基于textureview编写opengl程序
- mockito_Mockito:为什么您仍然应该欣赏InjectMocks注释
- jedis_通过Jedis API使用排序集
- c语言中怎么吃掉最后的空格,新人提问:如何将输出时每行最后一个空格删除...
- android怎么判断程序进入了后台,Android检测应用程序是否进入后台
- perl 远程 mysql_perl联接mysql
- MySQL约束不起作用怎么解决_MySQL中的CHECK约束不起作用