1.首先阅读数据预处理的代码,确定送入神经网络的输入x的张量形状。比如现在有个语音输入特征张量x形状为[16, 1, 256, 40],【批量,通道数,像素宽度,特征维度】。
如果看不懂,可以先在网络的forward最开始进行print(x.shape)打印。
2.常见改变张量形状的方法:
(1)
#x形状为[16, 1, 256, 40]
x = x.view(x.size(0), x.size(1) * x.size(2), x.size(3)) #x形状为【16,1*256,40】即合并了中间两个维度,变为【16,256,40】
#另一种方法
x = x.reshape(x.size(0), -1, x.size(3)) #同样能合并了中间两个维度,变为【16,256,40】
x = x.permute(0, 2, 1) #调整维度顺序,现在x形状为【批量,特征维度,像素宽度】
(2)
#x形状为[16, 2, 256, 40]
x = x[:, 0, :, :]#取第一个通道特征,x形状为【16,1,256,40】
x = x.squeeze(1)#删除值为1的维度,现在x形状为【16,256,40】
#另一种思路
x = torch.mean(x, axis=1, keepdims=True)
(3)
numpy数组调整顺序用的是 transpose(x,x,x)
torch张量调整顺序用的是 permute(x, x, x)
(4)特征融合
def extract_mbe(_y, _sr, _nfft, _nb_mel):
spec = librosa.core.spectrum._spectrogram(y=_y, n_fft=_nfft, hop_length=_nfft//2, power=1)[0]
mel_basis = librosa.filters.mel(sr=_sr, n_fft=_nfft, n_mels=_nb_mel)
mel_spec = np.log(np.dot(mel_basis, spec).T) #mel_spec形状为【T, _nb_mel】
mfcc = librosa.feature.mfcc(y=_y, sr=_sr, n_mfcc=_nb_mel, n_fft=_nfft, hop_length=_nfft // 2)
mfcc = mfcc.transpose(1, 0) #mfcc形状为【T, _nb_mel】
fused_features = np.concatenate((mel_spec, mfcc), axis=1) #fused_features形状为【T, 2*_nb_mel】
return fused_features
分类:
深度学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具