Matlab和Python环境下的深度学习小项目(第二篇)
moboyou 2025-04-22 00:43 14 浏览
使用深度学习方法对脑部MRI进行年龄分类
算法程序讲解如何应用迁移学习调整预训练深层神经网络 (ResNet-18),以对大脑 MRI 数据集进行年龄分类。数据集包含从 155 名研究参与者处获得的脑部MRI数据,为了使用2D图像数据预训练的轻量级深层网络模型 (ResNet-18) ,使用2D 轴向中间切片图像。共三个年龄组类别:3-5岁,7-12,18 岁以上。
首先大致浏览下所使用的数据集
读取数据集
%Read OpenNEURO Dataset
mriRootDataFolder = 'ds000228-1.1.0-subset';
mriDataFolder = fullfile(mriRootDataFolder, 'derivatives', 'preprocessed_data');
可视化3D Volumetric 数据
vol = niftiread(fullfile(mriDataFolder,"sub-pixar001","sub-pixar001_normed_anat.nii.gz"));
mask = niftiread(fullfile(mriDataFolder,"sub-pixar001","sub-pixar001_analysis_mask.nii.gz"));
vol = int16(vol) .* int16(mask); % Apply skull-stripping
numSlices = size(vol,3);
imshow(vol(:,:,round(numSlices/2)));
opengl hardware
volshow(vol(:,:,1:round(numSlices/2)),'CameraViewAngle',7.5);
读取受试者数据
提取轴向切片示例
加载预训练网络
netName = 'resnet18';
net = resnet18();
netInputSize = net.Layers(1).InputSize;
inputImageSize = netInputSize(1:2);
img = imread(fullfile(classifierDataFolder, 'Adults', 'image_033.png'));
imgLabel = classify(net, imresize(img, inputImageSize)); % resize 2D brain image to match network's input image size
figure('Position',[10 10 200 200]);
imshow(img);
title([netName ' prediction: ' char(imgLabel)]);
测试结果的混淆矩阵
通过Occlusion方法得到网络所学习到的一些重要特征(对应的高亮区域)
此外,再继续可视化为两个年龄较大的类别
Matlab环境下基于深度学习的心电信号(ECG信号)识别
使用深度学习进行 ECG信号(心电信号)识别,所用MATLAB版本为R2021B
首先导入ECG信号,并进行短时傅里叶变换和连续小波变换
close all
clear all
% load ecg signal
ecg =load('ecg.mat');
% Graphical Output
% Time Signal
%t = [0:length(ecg.data)-1]/ecg.fs;
t = [0:length(ecg.ecg)-1]/500;
plot(t,ecg.ecg)
% Short Time Fourier Analysis -- Spectrogram
pspectrum(ecg.ecg,500,'spectrogram')
% Wavelet Analysis -- Scalogram
cwt(ecg.ecg,[],500)
所使用的ECG数据集分为3类:心律失常(ARR),充血性心力衰竭 (CHF) ,正常窦性心律(NSR),本项目的目标是使用短时傅里叶变换(STFT)和连续小波变换 (CWT) 以及深层卷积神经网络 (DCNN) 对人体心电图 (ECG) 信号进行分类。共使用了来自3个 PhysioNet 数据库的 162 条心电图记录:MIT-BIH 心律失常数据库、MIT-BIH 正常窦性心律数据库和 BIDMC 充血性心力衰竭数据库,共96 个心律失常患者的数据,30 个充血性心力衰竭患者的数据,以及 36 个正常窦性心律患者的数据。共使用两个深层CNN模型:GoogLeNet 和 SqueezeNet,经过预训练用于图像识别。
使用Score-CAM方法解释深度学习的分类结果
算法程序主要讲解如何使用类激活映射(Score-CAM)研究和解释深层卷积神经网络预测结果,运行环境为MATLAB R2021b。与CAM 和 grad-CAM算法类似,但 Score-CAM 是所谓的一种“无梯度”解释方法,关于Score-CAM的参考文献如下:
Wang, H., Du, M., Yang, F. and Zhang, Z., 2019. Score-CAM: Improved Visual Explanations Via Score-Weighted Class Activation Mapping. arXiv preprint arXiv:1910.01279.
CAM相关的参考文献如下
Zhou, B., Khosla, A., Lapedriza, A., Oliva, A. and Torralba, A., 2016. Learning deep features for discriminative localization. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 2921-2929).
grad-CAM相关的参考文献如下
Selvaraju, R.R., Cogswell, M., Das, A., Vedantam, R., Parikh, D. and Batra, D., 2017. Grad-cam: Visual explanations from deep networks via gradient-based localization. In Proceedings of the IEEE international conference on computer vision (pp. 618-626).
读取目标图像,并调整大小以适合 SqueezeNet 网络,并计算网络最后一个卷积层之后的 ReLU 层图像的激活值。
addpath('testImg\')
im = imread('CatImg.png');
imResized = imresize(im,[inputSize(1:2)]);
图像分类
[PredCategory,scoreBaseLine]=classify(net,imResized);
PredCategory
提取预测类别的索引
classIdx=find((net.Layers(end, 1).Classes==PredCategory)==1);
使用激活函数计算特征图
获取输入图像和调整后的特征图的点积,所获得图像如下
展示score-cam的结果
基于LSTM的NASA涡轮喷气发动机风扇的剩余使用寿命(remaining useful life,RUL)预测
算法程序执行环境为Python,使用Keras深度学习模块,执行基于LSTM的NASA涡轮喷气发动机风扇的剩余使用寿命(remaining useful life,RUL)预测,Lookback=10。
#基于LSTM的NASA涡轮喷气发动机风扇的剩余寿命RUL预测
#导入相关模块
import numpy as np
import pandas as pd
import seaborn as sns
import math
import matplotlib.pyplot as plt
from matplotlib import cm
#机器学习相关模块
from sklearn.decomposition import PCA
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import QuantileTransformer , PowerTransformer
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression
#深度学习相关模块
from keras import optimizers
from keras.models import Sequential
from keras.layers import TimeDistributed, Flatten
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.recurrent import LSTM
from sklearn.metrics import mean_squared_error
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
cmap = cm.get_cmap('Spectral') # Colour map (there are many others)
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import explained_variance_score
from sklearn.metrics import r2_score
from keras.models import load_model
#数据分析
train_file = "train_FD001.txt" #训练数据
test_file = "test_FD001.txt"#测试数据
RUL_file = "RUL_FD001.txt"#剩余寿命数据
#读取文件
df = pd.read_csv(train_file,sep=" ",header=None)
df.head()
#columns = ['unit_number','time_in_cycles','setting_1','setting_2','TRA','T2','T24','T30','T50','P2','P15','P30','Nf',
# 'Nc','epr','Ps3 0','phi','NRf','NRc','BPR','farB','htBleed','Nf_dmd','PCNfR_dmd','W31','W32' ]
#d删除NaN值
df.drop(columns=[26,27],inplace=True)
columns = ["Section-{}".format(i) for i in range(26)]
df.columns = columns
df.head()
#每个参数的数据统计信息
df.describe()
#有关数据的相关信息,包括传感器ID,时间,传感器数据等
#Section-0 is MachineID
#Section-1 is time in, Cycles
#Section-2~4 is Opertional Settings
#Section-5~25 is sensor's data
#Data Set: FD001
#Train trjectories: 100
#Test trajectories: 100
#Conditions: ONE (Sea Level)
#Fault Modes: ONE (HPC Degradation)
#命名
MachineID_name = ["Section-0"]
RUL_name = ["Section-1"]
OS_name = ["Section-{}".format(i) for i in range(2,5)]
Sensor_name = ["Section-{}".format(i) for i in range(5,26)]
# 将数据转换为pandas数据框架
MachineID_data = df[MachineID_name]
RUL_data = df[RUL_name]
OS_data = df[OS_name]
Sensor_data = df[Sensor_name]
#将数据转换为pandas序列
MachineID_series = df["Section-0"]
RUL_series = df["Section-1"]
grp = RUL_data.groupby(MachineID_series)
max_cycles = np.array([max(grp.get_group(i)["Section-1"]) for i in MachineID_series.unique()])
print("Max Life >> ",max(max_cycles))
print("Mean Life >> ",np.mean(max_cycles))
print("Min Life >> ",min(max_cycles))
#删除不携带有关单元状态信息的常量值的列
df.drop(columns=["Section-0",
"Section-4", # Operatinal Setting
"Section-5", # Sensor data
"Section-9", # Sensor data
"Section-10", # Sensor data
"Section-14",# Sensor data
"Section-20",# Sensor data
"Section-22",# Sensor data
"Section-23"] , inplace=True)
MATLAB生成对抗网络系列(11种,对抗自编码器,辅助分类生成对抗网络,条件生成对抗网络,Pix-to-Pix等)
环境配置
- MATLAB 2021b
- Deep Learning Toolbox
- Parallel Computing Toolbox
目录
- Generative Adversarial Network (GAN)
- Least Squares Generative Adversarial Network (LSGAN)
- Deep Convolutional Generative Adversarial Network (DCGAN)
- Conditional Generative Adversarial Network (CGAN)
- Auxiliary Classifier Generative Adversarial Network (ACGAN)
- InfoGAN
- Adversarial AutoEncoder (AAE)
- Pix2Pix
- Wasserstein Generative Adversarial Network (WGAN)
- Semi-Supervised Generative Adversarial Network (SGAN)
- CycleGAN
- DiscoGAN
基于小波分析和深度学习的时间序列分类并可视化相关特征
算法程序运行环境为MATLAB R2021B。加载预训练的 GoogLeNet网络的时候,如果未安装 Deep Learning ToolboxTM Model for GoogLeNet Network 支持包,软件将在附加功能资源管理器中提供所需支持包的链接
该算法使用连续小波变换 (CWT) 和深度卷积神经网络 (CNN) 对人体心电图 (ECG) 信号进行分类,并进行特征可视化便于以后的深入分析。由于从头训练深度 CNN 的计算成本很高,并且需要大量的训练数据,在很多应用中并没有足够数量的训练数据可用,因此采用迁移学习方法GoogLeNet 对ECG波形的CWT时频谱图进行分类。
使用的ECG数据分为3种:心律失常(ARR)、充血性心力衰竭(CHF) 和正常窦性心律(NSR),分别来自MIT-BIH Arrhythmia数据库、MIT-BIH Normal Sinus Rhythm数据库和BIDMC Congestive Heart Failure数据库,首先看一下这3种波形的样子。
创建CWT时频谱图
显示网络的层次图
修改网络并进行训练
可视化第一个卷积层的网络滤波器权重
查看第一个卷积层 'conv1-7x7_s2' 的输出激活区域
将最强通道与原始图像进行比较
5种深度学习可解释性方法:LIME,GradientAttribution,Occlusion,GradCam等方法
算法程序运行环境为MATLAB R2021b
大佬说了,最简单可以将可解释性分为两类,第一类是全局性解释,第二类是局域性解释。
全局性解释 试图可视化神经网络每个神经元学到了什么。
局域性解释 只关注输入空间中在这个图片周围的很小区域。
以Local Interpretable Model-Agnostic Explanations(LIME)算法为例,进行可视化。
重要特征展示
使用卷积神经网络CNN进行涡轮风扇发动机的剩余使用寿命(remaining useful life,RUL)估计
注意:该程序运行环境为MATLAB R2021B
算法程序主要讲解如何使用卷积神经网络 CNN)来预测涡轮风扇发动机的的剩余使用寿命(remaining useful life,RUL)。 深度学习的优势在于模型无需通过手动特征提取或特征选择来预测 RUL。 此外,基于深度学习的 RUL 预测模型不需要信号处理的先验知识。
MATLAB环境下基于支持向量机、孤立森林和LSTM自编码器的三轴振动数据的机械状态异常检测
算法程序主要讲解如何使用机器学习和深度学习来进行机械状态异常检测,使用机械振动数据。
数据集包含来自工业机器的三轴振动测量值, 在计划维护之前和维护之后采集数据。 假定在定期维护后采集的数据代表机器的正常运行状况,维护前的数据代表正常或异常情况。 每轴的数据存储在单独的列中,每个文件包含 7000 个测量值。
基于迁移学习的滚动轴承故障诊断
算法程序运行环境为MATLAB R2021B,主要讲解如何使用深度学习(迁移学习)方法对滚动轴承进行故障诊断,讲解如何将一维轴承振动信号转换为二维尺度图图像并使用预训练网络应用迁移学习对轴承故障进行分类。 迁移学习显著减少了传统轴承诊断方法特征提取和特征选择所花费的时间,并在小型数据集中获得了良好的准确性。
面包多代码
https://mbd.pub/o/GeBENHAGEN
相关推荐
- 黄道十二宫杀手密码51年后被破解,来自两位程序员和数学家合作
-
杨净边策发自凹非寺量子位报道|公众号QbitAI黄道十二宫杀手(ZodiacKiller)可能是世界上最知名的高智商连环杀手,52年来从未被抓获。他的事迹已被改编成了多部好莱坞电影。△...
- 深入剖析MediaCodec解码器的基本原理及使用「建议新手收藏」
-
一,MediaCodec工作原理MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMu...
- Retrofit WebService 实践
-
前言作为Android开发,平时和后端聊得最多的除了喝酒就是接口。常用语:Restful和WebService,前者现在聊得多,后者以前聊得多。默认含义分别为:Restful:HTTP协议...
- 建议收藏!175部4K UHD版本经典高分电影洗版参考目录(2015之前)
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:1L789近两年很多经典高分老电影陆续开始重制成4KUHD版本,虽然我早已将这些电影的BD蓝光版收入,但纠结一番后还是花了不少时间将其全部...
- 2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?
-
这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...
- 详解Android官推Kotlin-First的图片加载库
-
前言Coil是一个非常年轻的图片加载库,在2020年10月22日才发布了1.0.0版本,但却受到了Android官方的推广,在AndroidDevelopersBackst...
- webview 渲染机制:硬件加速方式渲染的Android Web
-
webview渲染是什么?webview渲染是用于展现web页面的控件;webview可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于webview模式进行二次开发的w...
- 因为我对Handler的了解,居然直接给我加了5K
-
1Handler是什么?android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主线程进行ui刷新操作。1.1为什么Handler能实现线程切换?在创建Handler的...
- 「经典总结」一个View,从无到有会走的三个流程,你知道吗?
-
前言一个View,从无到有会走三个流程,也就是老生常谈的measure,layout,draw三流程我们都知道Android视图是由一层一层构成的层级结构,直白点说,就是父View包含子View而子V...
- 这些垃圾代码是谁写的?哦,原来小丑竟是我自己
-
程序员是最喜欢自嘲、自黑的群体之一,比如他们常常称自己是“码农”、“程序猿”,再比如他们的工作明明是写代码、修Bug,也有人调侃说:“明明我们是修代码、写Bug!”本文整理了一些程序员“修代码、写...
- 手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇
-
/1前言/平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。/2项目准备工作/首先我们第一步我们要安装...
- 音视频开发需要你懂得 ffmpeg 开源库的编码原理
-
引言音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,startcode以及基本的工作原理,...
- 「8年老 Android 开发」最全最新 Android 面试题系列全家桶(带答案)
-
下面跟大家分享的这些面试题都是互联网大厂真实流出的面试内容,每个问题都附带完整详细的答案,不像网上的那些资料三教九流有的甚至还没答案,这些面试题我也是经过日积月累才整理出来的精品资料。这些面试题主要是...
- 手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇
-
/1前言/上篇文章手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇我们谈及了天堂网站图片抓取的理论,这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取。/2图片网址解...
- PHP 8.1.9 更新发布
-
CLI:修复了内置服务器通过PHP_CLI_server_WORKERS环境变量的潜在溢出。修正了GH-8952(不再可能有意关闭std句柄)。Core:修复了GH-8923的错误(Windows上的...
- 一周热门
- 最近发表
- 标签列表
-
- curseforge官网网址 (16)
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle 数据导出导入 (16)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- c语言编程小知识大全 (17)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)
- php小说爬取源码 (23)