You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:如何对一维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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:55:21