请教:如何对一维Tensor进行2倍下采样?
一维Tensor的2倍下采样实现方案
假设你的一维Tensor结构为(batch_size, channels, length)(对应配图中的形状),以下是几种实用的实现方式:
1. 直接索引采样(极简无参数)
直接每隔一个元素采样,适合不需要平滑处理的场景:
import torch # 示例输入:形状(1, 3, 16)的tensor input_tensor = torch.randn(1, 3, 16) # 2倍下采样:取所有batch、通道,步长为2的元素 downsampled = input_tensor[:, :, ::2] print(downsampled.shape) # 输出: torch.Size([1, 3, 8])
2. 平均池化(平滑降噪)
通过AvgPool1d对每个2元素窗口取平均,能有效降低噪声,适合需要平滑输出的场景:
import torch import torch.nn as nn input_tensor = torch.randn(1, 3, 16) avg_pool = nn.AvgPool1d(kernel_size=2, stride=2) downsampled = avg_pool(input_tensor) print(downsampled.shape) # 输出: torch.Size([1, 3, 8])
3. 最大池化(保留峰值特征)
用MaxPool1d提取每个窗口的最大值,适合需要保留关键峰值特征的任务:
import torch import torch.nn as nn input_tensor = torch.randn(1, 3, 16) max_pool = nn.MaxPool1d(kernel_size=2, stride=2) downsampled = max_pool(input_tensor) print(downsampled.shape) # 输出: torch.Size([1, 3, 8])
4. 卷积下采样(可学习特征)
使用步长为2的1D卷积,既能完成下采样,还能在深度学习任务中学习特征映射:
import torch import torch.nn as nn input_tensor = torch.randn(1, 3, 16) # 卷积核大小3,步长2,padding=1保证输出长度为原长度的1/2 conv_downsample = nn.Conv1d(in_channels=3, out_channels=3, kernel_size=3, stride=2, padding=1) downsampled = conv_downsample(input_tensor) print(downsampled.shape) # 输出: torch.Size([1, 3, 8])
内容的提问来源于stack exchange,提问作者jordi
相关产品推荐
相关产品推荐

