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

news2024/11/18 21:41:13

文章目录

  • 一、什么是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,可以把这次的模型保存出来,作为预测模型。
在这里插入图片描述
修改代码如下:
在这里插入图片描述
得到结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FTP协议——BFTPD基本操作(Ubuntu+Win)

1、描述 本机(Win10)与虚拟机(Ubuntu22.04.4)上的BFTPD服务器建立FTP连接,执行一些基本操作。BFTPD安装教程:FTP协议——BFTPD安装(Linux)-CSDN博客 2、 步骤 启动BFTPD。启动文件…

BGP选路规则

配置地址,AS123使用ospf保证通讯,修改接口类型保证ospf学习环回20.0,30.0,100.0 地址时,是以24位掩码学习,R1,R2,R3都处于BGP边界,各自都需要宣告三者的私网环回 1, [R4]ip ip-prefi…

Radware Alteon负载均衡-配置证书组

证书组:可以使用证书组将多个服务器证书与虚拟服务相关联。这提供了对服务器名称指示(Server Namelndication,SNI)的支持,允许在相同的IP和端口后面托管多个主机名。使用SNI,浏览器发送请求的主机名,使服务器能够在进行…

【机器学习300问】96、怎么理解卷积神经网络CNN中的卷积操作?

卷积操作是卷积神经网络(CNN)中的一种核心组件。要讲清楚卷积操作,我们只需要回答以下四个问题:什么是卷积核?卷积运算的规则是什么?padding是什么?stride是什么? 下面让我以图像处理…

嵌入式进阶——蜂鸣器

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 蜂鸣器原理图测试发声乐理知识乐理应用PWM测试发声PWM驱动封装 蜂鸣器 蜂鸣器是一种能够产生固定频率的声音的电子元件。它通常由…

没有电商经验的人去操作抖音小店,难度大不大?好操作吗?

大家好,我是电商小V 很多新手小伙伴想去操作抖音小店项目,咨询的最多的问题就是我没有电商运营的经验可以去操作吗? 当然是可以操作的,抖音小店项目对于新手来说是一个非常友好的项目,很多小伙伴都是感觉没有电商经验去…

产品经理-流程图结构图(四)

1. 流程图 1.1 概念 为了达到特定的目标而进行的一系列有逻辑性的操作步骤,由两个及以上的步骤,完成一个完整的行为的过程,可称之为流程 1.2 产品经理为什么需要绘制流程图? 保证产品的使用逻辑合理顺畅向项目组其他成员清晰的…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

QT常量中有换行符

头文件添加&#xff1a; #pragma execution_character_set("utf-8")

深入理解计算机系统 家庭作业4.52

练习题4.3 p.254 \sim\seq\seq-full.hcl文件内已经说的很清楚了哪些不能更改,哪些是题目要求更改的控制逻辑块. 依据家庭作业4.51的答案,在seq-full.hcl文件内更改对应的HCL描述即可 以下答案注释了#changed的就是更改部分 #/* $begin seq-all-hcl */ ######################…

CCF CAT- 全国算法精英大赛(2024第二场)往届真题练习 3 | 珂学家

前言 这是2024年第一场CCF初赛的题&#xff0c; 其实整场比赛&#xff0c;感觉不是特别难&#xff0c;就是码量大&#xff0c;偏模拟和数学。 对于A题&#xff0c;摩斯密码&#xff0c;很容易抄错&#xff0c;我一直在想有什么好办法可以规避它&#xff0c;是真的苦涩。 真题…

Linux系统启动原理

Linux系统启动原理及故障排除 Centos6系统启动过程 修改系统启动级别 vim /etc/inittabCentos7启动流程 加载BIOS信息&#xff0c;进行硬件检测 根据BIOS设定读取设备中的MBR&#xff0c;加载Boot loader 加载内核&#xff0c;内核初始化以后以模块的形式动态加载硬件 并且加…

死锁及线程与队列之间的等待关系

死锁及线程与队列之间的等待关系 死锁及线程与队列之间的等待关系案例一案例二案例三案例四案例五 结语 死锁及线程与队列之间的等待关系 我想要补充一下我之前GCD学习中没能理解清楚的死锁及线程与队列之间的等待关系&#xff0c;因为在看锁的博客时&#xff0c;有人给出了一…

如何在 Elasticsearch 中选择精确 kNN 搜索和近似 kNN 搜索

作者&#xff1a;来自 Elastic Carlos Delgado kNN 是什么&#xff1f; 语义搜索&#xff08;semantic search&#xff09;是相关性排名的强大工具。 它使你不仅可以使用关键字&#xff0c;还可以考虑文档和查询的实际含义。 语义搜索基于向量搜索&#xff08;vector search&…

Gradient-checkpointing的原理

原文&#xff1a; 将更大的网络安装到内存中。|by 雅罗斯拉夫布拉托夫 |张量流 |中等 (medium.com) 前向传播时&#xff0c;隔几层就保留一层activation数据&#xff0c;其余层的activation都释放掉&#xff1b; 反向传播时&#xff0c;从最近的checkpoint去重新跑forward&…

Docker部署SpringBoot项目(jar包+Mysql)

部署Java项目 项目准备准备Java项目镜像准备配置网络 部署项目细节展示 项目准备 准备Java项目 hmall项目是一个maven聚合项目&#xff0c;使用IDEA打开hmall项目&#xff0c;查看项目结构如图&#xff1a; 我们要部署的就是其中的hm-service&#xff0c;其中的配置文件采用…

前 9 名最佳视频转换器软件完全免费

前 9 名免费视频转换器是什么&#xff1f;在此视频转换器评论中&#xff0c;我们收集了一些有用的提示并列出了顶级免费视频转换器软件&#xff0c;并找出适合所有级别&#xff08;从初学者到专家&#xff09;的最佳免费视频转换器。 顶级视频转换器列表 在这一部分中&#xf…

go 爬虫之 colly 简单示例

1. 背景 colly 是 Go 实现的比较有名的一款爬虫框架&#xff0c;而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速&#xff0c;设计非常优雅&#xff0c;并且分布式的支持也非常简单&#xff0c;易于扩展。 2. 官方文档 https://go-col…

【简单易用,新人友好】一个轻量级生物信息学流程框架,从此解决99%的生物信息学流程搭建问题...

生物信息学数据分析流程的搭建是一项繁重而复杂的工作。随着行业的发展&#xff0c;各种生信流程框架层出不穷&#xff0c;比如有: NextflowSnakemakeCWLWDL 各种标准&#xff0c;各种规则&#xff0c;令人眼花缭乱。选择太多&#xff0c;往往令人无所适从。特别是新进入行业的…

03自动辅助导航驾驶NOP其实就是NOA

蔚来NOP是什么意思&#xff1f;蔚来NOP是啥 蔚来NOP的意思就是NavigateonPilot智能辅助导航驾驶&#xff0c;也就是大家俗称的高阶辅助驾驶&#xff0c;在车主设定好导航路线&#xff0c;并且符合开启NOP条件的前提下&#xff0c;蔚来NOP可以代替驾驶员完成从A点到B点的智能辅助…