torch.rfft用法详解

时间: 2023-09-29 11:06:15 浏览: 32
`torch.rfft` 是 PyTorch 中一个用于实现快速傅里叶变换(FFT)的函数。它可用于对实数或复数序列执行 FFT,并返回实数或复数频谱。下面是 `torch.rfft` 的用法详解: ``` torch.rfft(input, signal_ndim, normalized=False, onesided=True, output=None, inverse=False) ``` 参数: - `input`(Tensor):要进行 FFT 的输入张量。可以是实数或复数张量。如果是实数张量,则必须是实数输入张量的最后一维的奇数长度。如果是复数张量,则必须是复数输入张量的最后一维的偶数长度。 - `signal_ndim`(int):FFT 要在哪些维度上执行。通常为 1 或 2。 - `normalized`(bool):是否进行归一化。默认为 False。 - `onesided`(bool):是否只返回正频率部分。默认为 True。 - `output`(Tensor):可选参数,输出张量。如果不为 None,则必须具有与输入张量相同的形状。 - `inverse`(bool):是否执行逆 FFT。默认为 False。 返回值: - `output`(Tensor):FFT 的结果。如果 `onesided` 为 True,则返回的张量的最后一维的长度是 `(input.size(-1)//2)+1`,否则长度是 `input.size(-1)`。 示例: ```python import torch # 1D FFT x = torch.randn(5, 4) y = torch.rfft(x, 1) print(y.shape) # torch.Size([5, 3, 2]) # 2D FFT x = torch.randn(5, 4, 3, 2) y = torch.rfft(x, 2) print(y.shape) # torch.Size([5, 3, 2, 2]) # Inverse FFT x = torch.randn(5, 4, 3) y = torch.rfft(x, 2) z = torch.irfft(y, 2, signal_sizes=x.shape[-3:]) print(z.shape) # torch.Size([5, 4, 3]) ```

相关推荐

torch.rfft2 是 PyTorch 中的一个函数,用于进行二维实数输入的快速傅里叶变换(FFT)。该函数的返回值是一个复数张量,包含了输入数据的傅里叶变换结果。以下是该函数的详细用法。 函数定义: python torch.rfft2(input, signal_ndim=2, normalized=False, onesided=True) 参数说明: - input:输入张量,数据类型为实数,形状为 (batch_size, channel, height, width)。 - signal_ndim:表示输入张量的信号维度,默认值为 2,即二维信号。 - normalized:表示是否进行归一化,即除以 Fourier 变换的系数。默认值为 False,表示不进行归一化。 - onesided:表示是否只保留输出的单边频谱,即对称的频率部分是否只保留一半。默认值为 True,表示只保留单边频谱。 返回值: - 输出张量,数据类型为复数,形状为 (batch_size, channel, height, width // 2 + 1, 2)。其中最后一个维度表示实部和虚部。 使用示例: python import torch # 定义输入数据 input = torch.randn(1, 3, 32, 32) # 进行二维实数输入的快速傅里叶变换 output = torch.rfft2(input) # 输出结果 print(output.shape) # torch.Size([1, 3, 17, 17, 2]) 上述代码中,定义了一个形状为 (1, 3, 32, 32) 的输入张量,其中 1 表示 batch_size,3 表示通道数,32 表示高度和宽度。然后使用 torch.rfft2 函数对输入数据进行二维实数输入的快速傅里叶变换,得到一个形状为 (1, 3, 17, 17, 2) 的输出张量。其中 17 表示经过 FFT 变换后的频域大小,2 表示实部和虚部。
引用\[1\]:在新版的PyTorch中,可以使用torch.fft.rfft2()函数来进行二维实数快速傅里叶变换。该函数的参数包括输入张量和维度参数。例如,可以使用以下代码进行二维实数快速傅里叶变换: input = torch.rand(1, 3, 32, 32) output = torch.fft.rfft2(input, dim=(-2, -1)) 其中,input是输入张量,dim=(-2, -1)表示在倒数第二维和倒数第一维上进行傅里叶变换。输出的结果是一个复数张量,可以通过output.real和output.imag分别获取实部和虚部。 引用\[2\]:在PyTorch 1.7及之后的版本中,如果想要得到单边频谱输出,可以使用torch.fft.rfft()函数;如果想要得到双边频谱输出,可以使用torch.fft.fft()函数。例如,可以使用以下代码进行实数输入的快速傅里叶变换: input = torch.arange(4) fft = torch.fft.rfft(input, 2, normalized=True, onesided=False) 其中,input是输入张量,2表示进行二维傅里叶变换,normalized=True表示进行归一化,onesided=False表示得到双边频谱输出。 综上所述,根据你提供的代码和问题,可以使用torch.fft.rfft2()函数来进行二维实数快速傅里叶变换。 #### 引用[.reference_title] - *1* *2* [torch.fft.rfft()函数用法](https://blog.csdn.net/oxygenh2o/article/details/122157814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [torch.fft.fft2.() 报错问题解决](https://blog.csdn.net/Claire_wanqing/article/details/123591896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
### 回答1: torch.onnx.export函数是PyTorch中用于将模型导出为ONNX格式的函数。ONNX是一种开放式的深度学习框架,可以用于在不同的平台和框架之间共享模型。torch.onnx.export函数接受以下参数: 1. model:要导出的PyTorch模型。 2. args:模型的输入参数,可以是一个张量或一个元组。 3. f:导出的ONNX文件的名称。 4. export_params:如果为True,则导出模型的参数。 5. opset_version:导出的ONNX版本。 6. do_constant_folding:如果为True,则将模型中的常量折叠。 7. input_names:模型的输入名称。 8. output_names:模型的输出名称。 9. dynamic_axes:动态轴的字典,用于指定输入和输出的变化轴。 使用torch.onnx.export函数可以将PyTorch模型导出为ONNX格式,以便在其他平台和框架中使用。 ### 回答2: torch.onnx.export是PyTorch中的一个API,用于将定义好的模型导出为ONNX格式,从而可以在其他平台或框架中使用。 在使用torch.onnx.export时,需要提供以下参数: - model:待导出的模型 - args:模型输入的张量 - f:导出的ONNX文件的路径或文件句柄 - input_names:输入张量的名称列表 - output_names:输出张量的名称列表 - dynamic_axes:为输入和输出张量指定动态轴的名称和长度。例如:{‘input’: {0: ‘batch_size’}, ‘output’: {0: ‘batch_size’}}表示对于输入和输出的第0维设置为变化的动态轴,而它们的名称为“batch_size”。 - opset_version:ONNX模型所使用的运算符版本,例如opset_version=11表示使用ONNX版本11的运算符。 下面是一个简单的示例,展示了如何使用torch.onnx.export将模型导出为ONNX格式。 import torch import torchvision dummy_input = torch.randn(10, 3, 224, 224) model = torchvision.models.alexnet(pretrained=True) torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True) 在上述示例中,我们首先载入预训练的AlexNet模型,并随机生成一个形状为[10,3,224,224]的张量作为输入数据。然后,我们使用torch.onnx.export将AlexNet模型导出为ONNX模型,并将其保存为"alexnet.onnx"文件。 这个API实际上还挺好用的,特别是在多次部署部署时可以避免重复工作。笔者在使用过程中也遇到了一些坑,比如导出的onnx模型放到tensorflow里跑的时候需要默认转置,如果涉及到模型的输入形状动态改变的话还需要设置对于维度名称的设置和onnx模型opset_version设置。阅读文档是件严肃的事情,用好了一定可以起到事半功倍的效果。 ### 回答3: PyTorch是一种非常流行的深度学习框架,其提供了ONNX(开放式神经网络交换)作为模型导出的标准。通过使用ONNX,PyTorch可以将训练好的模型导出为不同的平台所需的不同格式。这就使得模型可以在不同平台和环境中进行部署和运行。在PyTorch中,我们可以使用torch.onnx.export函数从PyTorch模型导出一个ONNX模型。 torch.onnx.export函数可以将PyTorch模型保存为ONNX模型,其原型如下: torch.onnx.export(model, args, f, export_params=True, verbose=False, input_names=None, output_names=None, operator_export_type=None, opset_version=None, input_shapes=None, dynamic_axes=None, do_constant_folding=True, example_outputs=None, strip_doc_string=True, keep_initializers_as_inputs=None) 其中,参数model是我们要导出为ONNX模型的PyTorch模型,args是PyTorch模型输入的张量,f是导出ONNX模型的文件名。 export_params确定是否将训练参数导出到ONNX模型中,verbose指定是否输出详细信息。input_names和output_names是模型输入和输出张量的名称。operator_export_type指定导出模型时要使用的运算符类型,opset_version指定使用的ONNX版本。 input_shapes和dynamic_axes在导出多个批次数据时非常有用。input_shapes可以指定张量的完整形状,dynamic_axes可以指定哪个维度应该是变量维度(批次维度)。 do_constant_folding可以控制是否执行常量折叠优化,例如可以删除不再需要的常量。example_outputs是生成器,提供模型的输出示例。strip_doc_string确定是否删除ONNX模型中的注释字符串。keep_initializers_as_inputs决定是否在导出的ONNX模型的输入中保留初始化器。 使用torch.onnx.export函数时,要注意输入和输出张量的数量和顺序。如果我们的PyTorch模型有多个输入或输出,我们需要在input_names和output_names中提供所有输入和输出名称,并在args中按顺序提供所有输入张量。 除了torch.onnx.export函数之外,我们还可以使用PyTorch提供的其他API来进行模型导出。例如,我们可以使用torch.jit.trace函数来动态跟踪模型操作,并生成Torch脚本模型。我们还可以使用torch.jit.script函数将整个PyTorch模型转换为Torch脚本模型。但是,对于某些平台或工具,ONNX格式是最好的选择。 在总体上,通过使用torch.onnx.export函数,我们可以轻松地将训练好的PyTorch模型导出为ONNX模型,以便在不同的平台和环境中进行部署和运行。

最新推荐

关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)

torch.optim的灵活使用详解 1. 基本用法: 要构建一个优化器Optimizer,必须给它一个包含参数的迭代器来优化,然后,我们可以指定特定的优化选项, 例如学习速率,重量衰减值等。 注:如果要把model放在GPU中,需要...

Pytorch中torch.gather函数

在学习 CS231n中的NetworkVisualization-PyTorch任务,讲解了使用torch.gather函数,gather函数是用来根据你输入的位置索引 index,来对张量位置的数据进行合并,然后再输出。 其中 gather有两种使用方式,一种为 ...

Pytorch中torch.nn的损失函数

最近使用Pytorch做多标签分类任务,遇到了一些损失函数的问题,因为经常会忘记(好记性不如烂笔头囧rz),都是现学现用,所以自己写了一些代码探究一下,并在此记录,如果以后还遇到其他损失函数,继续在此补充。...

电力设备行业研究周报新能源盈利分化-11页.pdf.zip

电力及公用事业、电子设备与新能源类报告 文件类型:PDF 打开方式:直接解压,无需密码

安全文明监理实施细则_工程施工土建监理资料建筑监理工作规划方案报告_监理实施细则.ppt

安全文明监理实施细则_工程施工土建监理资料建筑监理工作规划方案报告_监理实施细则.ppt

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

typeerror: invalid argument(s) 'encoding' sent to create_engine(), using con

这个错误通常是由于使用了错误的参数或参数格式引起的。create_engine() 方法需要连接数据库时使用的参数,例如数据库类型、用户名、密码、主机等。 请检查你的代码,确保传递给 create_engine() 方法的参数是正确的,并且符合参数的格式要求。例如,如果你正在使用 MySQL 数据库,你需要传递正确的数据库类型、主机名、端口号、用户名、密码和数据库名称。以下是一个示例: ``` from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://username:password@hos

数据库课程设计食品销售统计系统.doc

数据库课程设计食品销售统计系统.doc

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�

1.创建以自己姓名拼音缩写为名的数据库,创建n+自己班级序号(如n10)为名的数据表。2.表结构为3列:第1列列名为id,设为主键、自增;第2列列名为name;第3列自拟。 3.为数据表创建模型,编写相应的路由、控制器和视图,视图中用无序列表(ul 标签)呈现数据表name列所有数据。 4.创建视图,在表单中提供两个文本框,第一个文本框用于输入以上数据表id列相应数值,以post方式提交表单。 5.控制器方法根据表单提交的id值,将相应行的name列修改为第二个文本框中输入的数据。

步骤如下: 1. 创建数据库和数据表 创建名为xny_n10的数据表,其中xny为姓名拼音缩写,n10为班级序号。 ``` CREATE DATABASE IF NOT EXISTS xny_n10; USE xny_n10; CREATE TABLE IF NOT EXISTS xny_n10 ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), column3 VARCHAR(50) ); ``` 2. 创建模型 在app/Models目录下创建XnyN10.php文件,定义XnyN10模型类,继承自I