神经网络中间层特征图可视化(输入为音频)(二)

相比方法一个人感觉这种方法更好

复制代码
import librosa
import numpy as np
import utils
import torch
import matplotlib.pyplot as plt

class Hook:
    def __init__(self):
        self.features = None

    def hook_fn(self, module, input, output):
        self.features = output

# 创建钩子的实例
hook = Hook()

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
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)
    return mel_spec       #最后必须是[frames, dimensions]

def preprocess_data(X, seq_len, nb_ch):
    # split into sequences
    X = utils.split_in_seqs(X, seq_len)
    X = utils.split_multi_channels(X, nb_ch)
    # Convert to PyTorch tensors
    X = torch.Tensor(X)
    X = X.permute(0,1,3,2)   #x形状为[709,2,40,256],【总样本数,通道数,特征维度,像素宽度】
    return X

# 提取梅尔频谱特征
audio_path = "a011.wav"
y, sr = librosa.load(audio_path, sr=44100)
mel = extract_mbe(y, sr, 2048, 64)

value = preprocess_data(mel, 256, 1).to(device)     #value 为输入模型的样本特征


model = torch.load(f'best_model_2.pth')

# 将钩子注册到需要的层
model.cnn1.register_forward_hook(hook.hook_fn)

# 假设`input_data`是你的输入张量
output = model(value)

# 访问存储的特征
retnet_features = hook.features
#print(retnet_features.shape)
# 可视化特征(假设retnet_features是一个张量)
retnet_features = retnet_features.permute(0, 2, 1, 3)
#retnet_features = retnet_features.transpose(1, 2)
#print(retnet_features.shape)
retnet_features = torch.cat([retnet_features[i] for i in range(10)], dim=2)
#print(retnet_features.shape)

# 可视化批次中第一个样本的特定通道
plt.imshow(retnet_features.sum(1).detach().cpu().numpy(), cmap='viridis', origin='lower')   #[高,通道, 宽]
# plt.imshow(retnet_features.detach().cpu().numpy(), cmap='viridis', origin='lower')   #[高,宽]
plt.show()
相关推荐
聆风吟º1 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
User_芊芊君子1 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能2 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
人工不智能5772 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
h64648564h2 小时前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
心疼你的一切2 小时前
解密CANN仓库:AIGC的算力底座、关键应用与API实战解析
数据仓库·深度学习·aigc·cann
学电子她就能回来吗4 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github
爱吃泡芙的小白白4 小时前
突破传统:CNN卷积层(普通/空洞)核心技术演进与实战指南
人工智能·神经网络·cnn·卷积层·空洞卷积·普通卷积
iWZXQxBO4 小时前
运动控制卡 倒R角程序 G代码 halcon联合运动控制卡联合相机 运动控制卡内容
音视频
Coder_Boy_5 小时前
TensorFlow小白科普
人工智能·深度学习·tensorflow·neo4j