随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

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
posted on   孜孜不倦fly  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示