首页 > 其他分享 >神经网络中间层特征图可视化(输入为音频)(二)

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

时间:2023-11-22 16:23:58浏览次数:36  
标签:features retnet mel torch hook 神经网络 可视化 sr 中间层

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

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()

标签:features,retnet,mel,torch,hook,神经网络,可视化,sr,中间层
From: https://www.cnblogs.com/fly-smart/p/17849609.html

相关文章

  • 可视化大屏时代的工业新风格:硬工业风格可视化大屏
    硬工业风格可视化大屏是一种以工业为主题的大屏展示方式,具有极强的视觉冲击力和直观性。它将大屏展示和硬件设计融为一体,将数据以可视化的方式呈现出来,帮助用户更好地理解数据背后的含义和价值。 硬工业风格可视化大屏如:  硬工业风格可视化大屏的优势硬工业风格可视化......
  • 实时监控、智能控制:智慧芯片可视化大屏的应用前景展望
    随着科技的不断发展,智能芯片作为一种新型的电子元件,被广泛应用于各个领域,其中智慧芯片可视化大屏是一种重要的应用形式。 一、智慧芯片可视化大屏的优势智慧芯片可视化大屏是一种将智能芯片与大屏幕显示技术相结合的产品,山海鲸智慧芯片可视化大屏运用了指标卡、分组柱状图、百......
  • 神经网络梯度爆炸和消失
    神经网络梯度爆炸和消失目录神经网络梯度爆炸和消失现象说明产生原因解决方法优化激活函数权重初始化和正则化BN归一化操作使用残差结构梯度裁剪预训练+微调参考资料层数比较多的神经网络模型在训练的时候会出现梯度消失(gradientvanishingproblem)和梯度爆炸(gradientexplod......
  • 现代科技手段在城市交通领域的应用:地铁列车可视化
    随着城市化进程的不断加速,地铁作为一种便捷、快速的城市交通方式,受到了越来越多人的青睐。地铁列车可视化,作为地铁运营管理中的一项重要工作,不仅可以提高列车运行效率和安全性,还可以为乘客提供更加舒适、便捷的乘车体验。 什么是地铁列车可视化?地铁列车可视化,是指通过现代科技......
  • 可视化学习:利用向量计算点到线段的距离并展示
    本文可配合本人录制的视频一起食用。引言最近我在学可视化的东西,借此来巩固一下学习的内容,向量运算是计算机图形学的基础,这个例子就是向量的一种应用,是利用向量来计算点到线段的距离,这个例子中可视化的展示采用Canvas2D来实现。说起向量,当时一看到这个词,我是一种很模糊的记忆;这......
  • 最热的前端Web组态工具了解下(可视化)
    随着5G、物联网、大数据等技术的高速发展,各领域逐步向数字化、可视化的人工智能(AI)的方向不断迈进。全球进入工业4.0时代,标志着先进的信息技术于制造业紧密结合,将从单纯的生产要素向数据驱动、智能化、高度自动化的方向转型。2023即将结束,紧跟行业发展,小编整理了2023年几款最热......
  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • 数据驱动能源未来:发电厂地区可视化的实用性与优势
    随着全球能源消费的不断增长,电力需求也在不断上升。作为能源行业的重要组成部分,现代发电厂扮演着不可替代的角色。而现代发电厂的数据管理和监控系统,则是确保其安全、高效、稳定运行的重要手段。在这个背景下,现代发电厂地区可视化应运而生,成为了电力行业的新趋势。 什么是现代......
  • 数据可视化报表在银行的应用
    数据可视化报表是指通过图形化的方式展示数据,帮助人们更好地理解和分析数据。在银行业中,数据可视化报表的应用非常广泛,从业务分析到风险管理,都离不开对大量数据的整理、分析和可视化呈现。以下是对数据可视化报表在银行的应用的详细介绍。一、业务分析与决策支持数据可视化报表......
  • Nginx 可视化配置!
    前言nginx-gui这个东西真的要吹一波,太好用了,而且源码公开。对于我这样一个作为Linux菜鸟的Java开发来说,这个可视化配置工具简直是福音!需求nginx可视化管理,例如配置管理性能监控日志监控其他配置方案目前已实现前两条:配置管理和性能监控日志分析监控这块还需要另找方案实现!github......