【Week-R1】RNN实现心脏病预测,基于tensorflow框架

文章目录

  • 一、什么是RNN?
  • 二、准备环境和数据
    • 2.1 导入数据
  • 三、构建模型
  • 四、训练和预测
  • 五、其他
    • (1)sklearn模块导入报错:`ModuleNotFoundError: No module named 'sklearn'`
    • (2)优化器改为SGD,accuracy=25.81%
    • (3)使用训练acc最高的模型进行预测

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制

一、什么是RNN?

RNN:Recurrent Neural Network,用于处理序列数据。和传统神经网络不同的点在于,当前一层的输出会被当做输入,带到下一个隐藏层中,进行训练,于是除了第一层,RNN中每一个隐藏层的输入都包含两个部分【上一层的输出和当前层的输入】,如教案中给出的简易示意图,每个单词用一种颜色表示,01~05为不同的隐藏层,到达最后一层得到的输出为 05,也是神经网络需要判断的层。
在这里插入图片描述

二、准备环境和数据

环境:tensorflow框架,py312,cpu
编译:VSCode

使用CPU进行编译,就无需再设置GPU

2.1 导入数据

根据给出的数据集文件,分析如下:
在这里插入图片描述
在这里插入图片描述

import tensorflow as tf

gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0]
    tf.config.experimental.set_memory_growth(gpu0,true)
    tf.config.set_visible_devices([gpu0],"GPU")
    print("GPU: ",gpus)
else:
    print("CPU:")


# 2.1 导入数据
import numpy as np
import pandas as pd

df = pd.read_csv("D:\\jupyter notebook\\DL-100-days\\RNN\\heart.csv")
print("df: ", df)

# 2.2 检查是否有空值
df.isnull().sum()
#3.1 划分训练集与测试集
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

x = df.iloc[:, :-1]
y = df.iloc[:, -1]
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.1,random_state=1)
print("x_train.shape: ", x_train.shape)
print("y_train.shape: ", y_train.shape)

# 3.2 标准化: 针对每一列进行标准化
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1)
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], 1)

在这里插入图片描述

三、构建模型

tf官方教程 Keras中的循环神经网络RNN 一文中有提到:
在这里插入图片描述
在这里插入图片描述

本次学习使用的是SimpleRNN内置层,其关键参数说明:

● units: 正整数,输出空间的维度。

● activation: 要使用的激活函数。 默认:双曲正切(tanh)。 如果传入 None,则不使用激活函数 (即 线性激活:a(x) = x)。

● use_bias: 布尔值,该层是否使用偏置向量。

● kernel_initializer: kernel 权值矩阵的初始化器, 用于输入的线性转换 (详见 initializers)。

● recurrent_initializer: recurrent_kernel 权值矩阵 的初始化器,用于循环层状态的线性转换 (详见 initializers)。

● bias_initializer:偏置向量的初始化器 (详见initializers).

● dropout: 在 0 和 1 之间的浮点数。 单元的丢弃比例,用于输入的线性转换。
# 4.1 构建RNN模型
import keras
from keras.models import Sequential
from keras.layers import Dense,LSTM,SimpleRNN

model = Sequential()
model.add(SimpleRNN(200, input_shape=(13,1), activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
print(model.summary())

在这里插入图片描述

四、训练和预测

#4.2 编译模型
opt = tf.keras.optimizers.Adam(learning_rate=1e-4)
model.compile(loss='binary_crossentropy',
              optimizer = opt,
              metrics="accuracy")

# 4.3 训练模型 
epochs = 100
history = model.fit(x_train, y_train,
                    epochs=epochs,
                    batch_size=128,
                    validation_data=(x_test,y_test),
                    verbose=1)
#4.4 评估模型 
import matplotlib.pyplot as plt
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs_range = range(epochs)

plt.figure(figsize=(14,4))
plt.subplot(1,2,1)
plt.plot(epochs_range, acc, label='Training Acuuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training & Validation Accuracy')

plt.subplot(1,2,2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Losss')
plt.legend(loc='upper right')
plt.title('Training & Validation Loss')

plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\result.png")
plt.show()


scores = model.evaluate(x_test,y_test,verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

在这里插入图片描述
请添加图片描述

五、其他

(1)sklearn模块导入报错:ModuleNotFoundError: No module named 'sklearn'

解决办法:在VSCode终端中,cd到.venv/Script路径下,执行.\pip install scikit-learn,等待安装完成,如下:
在这里插入图片描述

(2)优化器改为SGD,accuracy=25.81%

请添加图片描述
在这里插入图片描述

(3)使用训练acc最高的模型进行预测

观察100个epoch输出的训练结果,可以看到最高的val_accuracy=0.9032,可以把这次的模型保存出来,作为预测模型。
在这里插入图片描述
修改代码如下:
在这里插入图片描述
得到结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL--备份恢复

目录 一、备份恢复的工作职责 1.备份的时间周期 2.备份的方式 3.恢复方案 4.检查备份 5.定期恢复演练 6.故障恢复策略 7.迁移升级 二、逻辑备份工具--mysqldump 1.介绍 2.使用场景 3.mysqldump命令的参数介绍 1)全备: 2)单库或…

四轮麦轮平衡车四个轮子安放位置要求,以及编码器测速注意事项(强调,否则无法正常平移)——基于STM32F103ZET6

轮子推荐ABBA,当然BAAB也可以 如图安放: 这两种安防位置可以实现平移效果 若要实现平移则需要先实现PID控制平衡,这里用到520编码电机,相较于370电机他的动力更足,在调节PID时能节约不少时间而且更加容易。 需要注意…

基于离散小波变换(DWT)的心电信号伪影去除及心电信号PQRST波检测(MATLAB R2018)

心电信号是心脏神经,肌肉组织电化学活动的表现形式。这些电化学活动使心脏内部产生一系列非常协调的电刺激脉冲,分别使心房,心室的肌肉细胞兴奋,从而有节律的舒张和收缩。这些生物电活动在体表的不同部位形成不同的电位差变化&…

622.设计循环队列

typedef struct {int* a;int head;int tail;int k; } MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj); bool myCircularQueueIsFull(MyCircularQueue* obj);//初始化 MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj(MyCircularQue…

ARM+FPGA+NVIDIA AI摄像头软硬件定制

拥有资深ISP图像技术团队,是英伟达、地平线等合作伙伴,我们的团队掌握目前市面上大部分车载平台的ISP图像画质服务能力,能自主开发图像ISP和增强算法。我们具有多名经验丰富光学设计专家,掌握车载模组光学设计能力,资深…

Mac上如何安装低版本chrome浏览器

背景 为了排查项目上使用chrome低版本的兼容性问题,需要在本机【mac系统】上安装一个低版本的chrome浏览器。 不同版本的chrome下载地址 https://www.slimjet.com/chrome/google-chrome-old-version.php 下载后要记得你下载的旧版本的版本号,后面修改…

Neural Filters:着色

Ps菜单:滤镜/Neural Filters/颜色/着色 Neural Filters/COLOR/Colorize 着色 Colorize滤镜可以对黑白照片自动着色,也为彩色照片简化色彩提供了有力的支持。 “着色”滤镜利用深度学习技术,对输入的黑白或彩色照片进行分析,识别图…

【云原生】kubernetes声明式管理-----YAML文件

目录 引言 一、声明式管理简介 (一)什么是声明式管理 (二)支持格式 二、YAML文件 (一)YAML文件基本格式 (二)YAML文件实践 三、YAML文件创建方式 (一&#xff0…

rk3568_spinlock

文章目录 前言1、spinlock是什么?2、自旋锁实验2.1源码2.2 结果图总结前言 本文记录在rk3568开发板做的自旋锁实验。通过自旋锁控制state变量来限制只有一个应用程序来打开驱动设备。 1、spinlock是什么? spinlock称为自旋锁,如果获取不到资源,就只能一直傻傻地等待资源被…

B树与B+树区别

B树和B树是常见的数据库索引结构,都具有相较于二叉树层级较少,查找效率高的特点,它们之间有以下几个主要区别: 1.节点存储数据的方式不同 B树的叶子结点和非叶子节点都会存储数据,指针和数据共同保存在同一节点中B树…

一文教你使用stream流轻松解决java项目数据枚举显示问题

本篇文章主要讲解java枚举、vo实体类通过stream流形式输出枚举参数的方法。 日期:2024年5月26日 作者:任聪聪 本文代码实例附件:https://download.csdn.net/download/hj960511/89361611 实际效果 可以看到在枚举参数的基础上,我们…

这或许是国产游戏出海的最佳时机

《刺客信条:影》过于政治正确的选角激怒了全球玩家,而社交媒体上有玩家讨论育碧是否应该因为刻意加入DEI(多元化)而延期《刺客信条:影》时,没想到这得到了X拥有人埃隆马斯克的回复。马斯克表示“DEI&#x…

【Chrono Engine学习总结】6-创建自定义场景-6.2-chrono中的光线设置

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 上一篇文章中,自己【用sketchup重建了三维场景】,但导入chrono中颜色很不正确,几乎都是白色的,但也不是完全白色。经过…

宿舍管理系统代码详解(操作界面)

目录 一、前端代码 1.样式展示 2.代码详解 <1>主页面列表部分 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <2>新增页面 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <3>修改页面…

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入&#xff0c;这样会导致性能上的损失 。 JS提供的…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

构建智慧城市公共服务系统的功能架构设计

随着城市化进程的加速&#xff0c;城市公共服务系统在保障居民生活品质、提升城市管理水平方面扮演着愈发重要的角色。构建智慧城市公共服务系统的功能架构设计至关重要&#xff0c;它不仅需要充分考虑居民需求与城市管理的实际情况&#xff0c;还需要整合先进的科技手段&#…

冷冻式压缩空气干燥机常见几种系统原理图

冷冻式压缩空气干燥机 我们以两种典型的设计流程图为例 1.干式蒸发型&#xff0c;这类冷干机是我们最为常见的设计型式。下图为deltech公司的典型流程图 此类设备各家设计不同的最大区别基本就是在换热器的结构型式上有比较大的区别。换热器主要有&#xff1a;管壳式、铝板换、…

echarts饼图图例右侧纵向排列

如图所示&#xff0c;一开始&#xff0c;我设置了图例的right和top值&#xff0c;还有orient&#xff0c;但图例始终不能纵向排成一排&#xff0c;要么上面两个一行&#xff0c;要么最后两个一行&#xff0c;最后我发现同时设置一下left的值就可以了&#xff0c;如下所示&#…