如何用PyTorch的nn.Conv()将768尺寸张量投影为128尺寸?
PyTorch用nn.Conv实现张量维度投影的方案
你当前的输入张量形状为[197, 1, 768],要投影为[197, 1, 128],本质是对最后一维的特征做通道压缩,用kernel_size=1的1维卷积即可实现,具体实现如下:
完整代码示例
import torch import torch.nn as nn # 定义1x1卷积投影层,in_channels对应输入特征维度,out_channels对应目标输出维度 conv_proj = nn.Conv1d(in_channels=768, out_channels=128, kernel_size=1, bias=False) # 模拟你的输入张量 input_tensor = torch.randn(197, 1, 768) # 调整维度适配nn.Conv1d的输入要求:Conv1d要求输入格式为 [batch_size, in_channels, seq_len] # 原形状 [197(seq_len), 1(batch), 768(in_channels)] → 转置为 [1,768,197] transposed_input = input_tensor.permute(1, 2, 0) # 卷积计算,输出形状为 [1, 128, 197] conv_output = conv_proj(transposed_input) # 调整维度回你需要的格式:[1,128,197] → 转置为 [197,1,128] output_tensor = conv_output.permute(2, 0, 1) # 验证输出形状 print(output_tensor.shape) # 输出结果:torch.Size([197, 1, 128])
补充说明
- 如果你不需要卷积层带偏置参数,保留
bias=False即可,和常规投影层的配置一致;如果需要偏置,删掉该参数即可(默认bias=True) - 1x1卷积在这里的计算效果和
nn.Linear(768, 128)完全等价,如果你没有强制要求使用卷积接口,用线性层实现会更简单,不需要做维度转置
内容的提问来源于stack exchange,提问作者Ali Mostafa
相关产品推荐
相关产品推荐

