调用Wav2Vec2 PyTorch模型获取Emission时触发ValueError问题
解决Wav2Vec2获取发射概率时的维度不匹配ValueError
执行以下代码获取Wav2Vec2模型的发射概率时:
model = torchaudio.pipelines.WAV2VEC2_ASR_BASE_960H.get_model() emission = model(data)
出现维度不匹配的ValueError,报错核心是:
ValueError: Expected the input Tensor to be 2D (batch, time), but received {list(x.shape)}
问题原因
Wav2Vec2的ASR模型强制要求输入张量为2D结构(batch_size, 采样点长度),但你的data张量维度不符合这个要求(比如是1D单音频、或带通道的3D张量)。
解决步骤
先检查当前输入维度
执行print(data.shape)查看data的形状,常见错误维度包括:- 1D:
(time,)(单条音频没有batch维度) - 3D:
(batch, 1, time)(多了通道维度,比如 librosa 加载的音频带通道)
- 1D:
根据维度情况调整
- 如果是1D单音频:添加batch维度,用
data = data.unsqueeze(0),调整后形状为(1, time) - 如果是带通道的3D张量:移除通道维度,用
data = data.squeeze(1),调整后形状为(batch, time)
- 如果是1D单音频:添加batch维度,用
修正后的完整代码示例
import torchaudio import torch # 加载预训练模型 model = torchaudio.pipelines.WAV2VEC2_ASR_BASE_960H.get_model() # 示例:假设原data是1D单音频(1秒16kHz采样) data = torch.randn(16000) # 调整为模型要求的2D格式 data = data.unsqueeze(0) # 成功获取发射概率 emission = model(data)
内容的提问来源于stack exchange,提问作者Victor Zheng
相关产品推荐
相关产品推荐

