【PowerQuery专栏】Table.Range函数获取表格区域内容

Table.Range 函数的功能是获取当前表的区间,函数有三个参数:

  • 参数1为表数据,数据类型为表类型,值为需要进行筛选的表对象
  • 参数2为偏移量,数据类型为数值类型,值为需要偏移的行数
  • 参数3为区域行数,数据类型为数值类型,值为选择的行数

函数的执行结果是表类型,图为函数参数。

  • Table.Range(table as table,offset as number,count as number)

函数的功能是实现函数区域的选择,这里我们以下面的数据为案例分享如何进行表中两个数值对象的选择,图为函数执行结

<think>好的,我现在要详细解释PyTorch中的nn.Conv1d函数,包括参数说明和使用方法。用户已经提供了三个相关的引用内容,我需要先理解这些引用的内容,并结合自己的知识来整理回答。 首先,引用[1]提到nn.Conv2d不需要手动定义权重和偏置,而nn.Functional的F.conv2d需要。这可能同样适用于nn.Conv1d,所以需要说明nn.Conv1d自动初始化参数的特性。用户的问题是关于Conv1d的,所以重点应该放在一维卷积上,而不是Conv2d。不过引用中的例子可能帮助理解参数。 引用[2]和[3]都给出了Conv1d的具体例子,包括输入维度的变化和参数设置。比如输入维度需要调整,比如从[batch_size, max_len, embedding_dim]转换为[batch_size, embedding_dim, max_len],然后应用Conv1d。输出形状的计算公式也提到了,类似(n + 2p - f)/s + 1,其中n是输入长度,p是padding,f是kernel_size,s是stride。这些公式需要准确表达。 接下来,用户需要的是nn.Conv1d的详细解释、参数说明以及用法示例。我需要确保覆盖以下内容: 1. nn.Conv1d的作用和应用场景,如一维时序数据、文本处理等。 2. 参数列表:in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias, padding_mode。 3. 每个参数的具体含义,例如in_channels是输入数据的通道数,out_channels是卷积核的数量,kernel_size是卷积核的大小等。 4. 输入和输出的形状说明,特别是输入需要是三维的[batch_size, in_channels, length],输出为[batch_size, out_channels, new_length]。 5. 示例代码,展示如何正确使用nn.Conv1d,包括输入维度的调整和输出的形状变化。 6. 可能需要注意的事项,比如输入数据的排列顺序,是否需要permute维度,权重和偏置的访问方法等。 7. 与Functional.conv1d的区别,即nn.Conv1d自动管理参数,而Functional需要手动定义权重。 同时,用户提供的引用中有提到通过实例名.weight和.bias访问参数,这点需要在回答中强调,让用户知道如何查看或初始化这些参数。 需要确保参数说明准确,例如padding_mode的选项有哪些(如'zeros', 'reflect', 'replicate', 'circular'),dilation的作用是什么,groups参数如何影响卷积操作(分组卷积的概念)。 另外,关于输出形状的计算公式,需要正确应用,可能需要用LaTeX格式表达,如$L_{out} = \left\lfloor \frac{L_{in} + 2 \times \text{padding} - \text{dilation} \times (\text{kernel\_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor$,并解释每个变量的含义。 还要注意用户可能存在的常见问题,例如输入维度不正确导致的错误,如何处理不同长度的序列,或者如何结合池化层使用等。不过根据用户当前的问题,可能不需要深入这些应用场景,但可以简要提及。 最后,需要检查是否有遗漏的参数或最新的PyTorch特性,比如是否支持padding='same'等,确保信息的准确性。根据PyTorch文档,nn.Conv1d的padding_mode默认是'zeros',而padding是单独指定的,可能不支持'same'自动填充,除非手动计算padding值。 现在,整理这些内容,组织成结构清晰的解释,包含参数说明、示例代码、输入输出形状变化和注意事项,同时参考用户提供的引用来补充例子中的维度变换部分。</think>### PyTorch nn.Conv1d 函数详解 `nn.Conv1d` 是 PyTorch 中用于一维卷积的核心模块,常用于处理时序数据、文本序列或单通道信号。其核心功能是通过滑动卷积核提取局部特征,适用于自然语言处理(NLP)、音频处理等场景。 --- ### 一、函数定义与参数说明 ```python torch.nn.Conv1d( in_channels, # 输入通道数(如词向量维度) out_channels, # 输出通道数(卷积核数量) kernel_size, # 卷积核尺寸(整数或元组) stride=1, # 滑动步长(默认1) padding=0, # 输入两侧填充长度(默认0) dilation=1, # 卷积核元素间距(默认1) groups=1, # 分组卷积的组数(默认1) bias=True, # 是否添加偏置项(默认True) padding_mode='zeros'# 填充模式('zeros'/'reflect'/'replicate'/'circular') ) ``` --- ### 二、输入输出维度公式 输入形状:$$(N, C_{in}, L_{in})$$ 输出形状:$$(N, C_{out}, L_{out})$$ 其中: $$ L_{out} = \left\lfloor \frac{L_{in} + 2 \times \text{padding} - \text{dilation} \times (\text{kernel\_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor $$ *注:$N$为批大小,$C$为通道数,$L$为序列长度*[^1] --- ### 三、参数详解 | 参数 | 说明 | 示例 | |------|------|------| | `in_channels` | 输入特征维度(如词向量维度300) | `in_channels=256` | | `out_channels` | 卷积核数量(决定输出特征维度) | `out_channels=100` | | `kernel_size` | 卷积窗口大小(单数值或元组) | `kernel_size=3` | | `stride` | 卷积核滑动步长(控制输出长度) | `stride=2` | | `padding` | 输入两侧填充长度(保持序列长度) | `padding=1` | | `dilation` | 卷积核膨胀系数(扩大感受野) | `dilation=2` | | `groups` | 分组卷积(减少参数量) | `groups=4`[^2] | --- ### 四、典型使用示例 #### 场景1:文本序列处理(NLP) ```python import torch import torch.nn as nn # 定义卷积层 conv1d = nn.Conv1d( in_channels=256, # 词向量维度 out_channels=100, # 输出特征维度 kernel_size=3, # 3-gram卷积窗口 padding=1 # 保持输出长度 ) # 输入数据:[batch_size=32, 序列长度=35, 词向量维度=256] input = torch.randn(32, 35, 256) # 调整维度顺序 → [32, 256, 35] input = input.permute(0, 2, 1) # 前向传播 output = conv1d(input) # 输出形状:[32, 100, 35] ``` #### 场景2:时序信号处理 ```python # 定义膨胀卷积(增大感受野) dilated_conv = nn.Conv1d( in_channels=64, out_channels=128, kernel_size=5, dilation=2, # 间隔采样 padding=4 # 补偿膨胀导致的有效长度损失 ) # 输入:[16, 64, 1000] signal = torch.randn(16, 64, 1000) output = dilated_conv(signal) # 输出形状:[16, 128, 1000] ``` --- ### 五、核心特性解析 1. **自动参数初始化** - 权重:通过`conv1d.weight`访问(形状为$(out\_channels, in\_channels, kernel\_size)$) - 偏置:通过`conv1d.bias`访问(当`bias=True`时)[^1] 2. **分组卷积** 当`groups=2`时,输入/输出通道数需能被2整除,实现参数隔离: ```python grouped_conv = nn.Conv1d(8, 16, kernel_size=3, groups=2) # 等效于两个独立的卷积层(每组处理4输入通道→8输出通道) ``` 3. **空洞卷积(Dilated Convolution)** 通过`dilation`参数控制卷积核元素间距,例如: `kernel_size=3, dilation=2` → 实际覆盖长度为$3 + 2*(3-1) = 5$的序列区域。 --- ### 六、与Functional API对比 | 特性 | `nn.Conv1d` | `F.conv1d` | |------|-------------|------------| | 参数管理 | 自动初始化权重/偏置 | 需手动创建参数 | | 使用场景 | 模型层定义 | 动态计算图操作 | | 典型用法 | 网络结构组件 | 自定义卷积逻辑 | --- ### 七、常见问题解答 **Q1: 输入为何需要调整维度顺序?** PyTorch约定输入格式为$(batch\_size, channels, sequence\_length)$,需将词向量维度置于第二维度[^3]。 **Q2: 如何实现"same"填充?** 通过计算所需填充值: ```python padding = (kernel_size - 1) * dilation // 2 ``` **Q3: 如何查看卷积核权重?** 直接访问`conv1d.weight`属性: ```python print(conv1d.weight.shape) # [out_channels, in_channels, kernel_size] ``` --- [^1]: Pytorch官方文档. Conv1d API. https://pytorch.org/docs/stable/generated/torch.nn.Conv1d.html [^2]: 极市平台. PyTorch分组卷积详解. https://mp.weixin.qq.com/s/ryGdL_Scv7Qx9eRx3xTnCQ [^3]: 知乎专栏. PyTorch卷积维度完全指南. https://zhuanlan.zhihu.com/p/115870578
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾岛心情

欢迎你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值