当前位置: 首页 > news >正文

RNN(一)——循环神经网络的实现

文章目录

  • 一、循环神经网络RNN
    • 1.RNN是什么
    • 2.RNN的语言模型
    • 3.RNN的结构形式
  • 二、完整代码
  • 三、代码解读
    • 1.参数return_sequences
    • 2.调参过程

一、循环神经网络RNN

1.RNN是什么

循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神经网络结构:输入层-隐藏层-输出层)更细腻温情,前面所有的输入产生的结果都对后续输出产生影响,他关注隐层每个神经元在时间维度上的成长。体现在图上,就是表示隐层在不同时刻的状态。RNN在小数据集,低算力的情况下非常有效。

在这里插入图片描述
在这里插入图片描述

2.RNN的语言模型

在这里插入图片描述

3.RNN的结构形式

由于时序上的层级就够,使得RNN在输入输出关系上有很大的灵活性。以下是四种结构形式:

  1. 单入多出的形式:可实现看图说话等功能。
    在这里插入图片描述
  2. N to one:与上面一种刚好相反,输入很多句话,可以输出一张图片。

在这里插入图片描述

  1. N to N:输入输出等长序列。可生成文章、诗歌、代码等。

在这里插入图片描述

  1. N to M(Encoder-Decoder模型或Seq2Seq模型):将输入数据编码成上下文向量,然后输出预测的序列。常用语文本翻译、阅读理解、对话生成等很多领域广泛应用。

二、完整代码

# 一、前期准备
# 1.1 导入所需包和设置GPU
import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'  # 不显示等级2以下的提示信息
import tensorflow as tf
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, SimpleRNN
import matplotlib.pyplot as pltgpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0], "GPU")
print(gpus)#1.2 导入数据
df = pd.read_csv('R1heart.csv')
print(df)df.isnull().sum()  #检查是否有空值#二、数据预处理
#2.1 数据集划分
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, y_train.shape)# 将每一列特征标准化为标准正态分布,注意,标准化是针对每一列而言的
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)#三、构建RNN模型model = Sequential()
model.add(SimpleRNN(128, input_shape= (13,1),return_sequences=True,activation='relu'))
model.add(SimpleRNN(64,return_sequences=True, activation='relu'))
model.add(SimpleRNN(32, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()#四、编译模型
opt = tf.keras.optimizers.Adam(learning_rate=1e-4)
model.compile(loss='binary_crossentropy', optimizer=opt,metrics=['accuracy'])#五、训练模型
epochs = 100
history = model.fit(x_train, y_train,epochs=epochs,batch_size=128,validation_data=(x_test, y_test),verbose=1)
#六、模型评估
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 Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()scores = model.evaluate(x_test,y_test,verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

打印结果:
在这里插入图片描述

三、代码解读

1.参数return_sequences

当return_sequences=True时,无论输入序列的长度如何,输出都将是一个三维数组,其形状为[batch_size, sequence_length, output_dim]。这在处理序列数据时非常有用,特别是当你需要在多个时间步上使用层的输出时。

当return_sequences=False(默认值)时,只有序列中的最后一个时间步的输出会被返回,输出形状为[batch_size, output_dim]。

2.调参过程

尝试将RNN层分别增加到三层和四层,层数越多精确度越高,其中前n-1层都需要加参数return_sequences=True,意味着它的输出将保留整个序列的信息,可以被下一个RNN层使用,否则就会出现维度不匹配的情况,比如simple_rnn_2 层期望的输入数据维度是3(即,一个三维张量),但实际接收到的输入数据维度是2,就会出现报错。
也可尝试对全连接层的层数进行调整,也可对激活函数activation进行调整。但效果都不如调整RNN层数精确度高。

小记:
距离新疆之旅还有半个月,已经有点浮躁了,因为此次旅行有点不太一样,一家四口整整齐齐的分别从各自呆的城市“一起出发”,汇聚到同一趟车上,神奇吧!此行并不是突发奇想的说走就走的旅行,这个所谓的蓄谋已久持续了4年,多少还是有点期待的。那就在畅玩之前先整个“两周畅学卡”吧!

参考:
【循环神经网络】5分钟搞懂RNN,3D动画深入浅出

相关文章:

RNN(一)——循环神经网络的实现

文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神…...

php 根据位置的经纬度计算距离

在开发中,我们要经常和位置打交道,要计算附近的位置、距离什么的。如下: 一.sql语句 SELECT houseID,title,location,chamber,room,toward,area,rent,is_verify,look_type,look_time, traffic,block_name,images,tag,create_time,update_time, location->&g…...

17 Python常用内置函数——基本输入输出

input() 和 print() 是 Python 的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。无论用户输入什么内容,input() 一律作为字符串对待,必要时可以使用内置函数 int()、…...

【Web】LitCTF 2024 题解(全)

目录 浏览器也能套娃? 一个....池子? 高亮主题(划掉)背景查看器 百万美元的诱惑 SAS - Serializing Authentication exx 浏览器也能套娃? 随便试一试,一眼ssrf file:///flag直接读本地文件 一个....池子? {…...

家政项目小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,家政人员管理,家政服务管理,咨询信息管理,咨询服务管理,家政预约管理,留言板管理,系统管理 微信端账号功能…...

electron TodoList网页应用打包成linux deb、AppImage应用

这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…...

【C语言】 使用fgets和fputs完成两个文件的拷贝

目录 1、使用fgets和fputs完成两个文件的拷贝 2、使用fgets统计给定文件的行号 fgets和fputs的使用方法函数原型:int fputs(const char *s,FILE *stream); char *fgets(char *s,int size,FILE *stream);fupts…...

使用PyTorch导出JIT模型:C++ API与libtorch实战

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…...

Python——异常捕获,传递及其抛出操作

01. 异常的概念 1. 程序在运行时,如果 python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常。 2. 程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise…...

【Maven】 的继承机制

Maven是一个强大的项目管理工具,主要用于Java项目的构建和管理。它以其项目对象模型(POM)为基础,允许开发者定义项目的依赖、构建过程和插件。Maven的继承机制是其核心特性之一,它允许子项目继承和复用父项目的配置&am…...

微信小程序结合后端php发送模版消息

前端&#xff1a; <view class"container"><button bindtap"requestSubscribeMessage">订阅消息</button> </view> // index.js Page({data: {tmplIds: [UTgCUfsjHVESf5FjOzls0I9i_FVS1N620G2VQCg1LZ0] // 使用你的模板ID},requ…...

sqlalchemy报错sqlalchemy.orm.exc.DetachedInstanceError

解决方案&#xff1a; 在初始化数据库的代码中&#xff0c;将 maker sessionmaker(bindeng)修改为 maker sessionmaker(bindeng, expire_on_commitFalse)为什么要添加 expire_on_commitFalse 参数&#xff1f; expire_on_commit 可以用来更改 SQLAlchemy 的对象刷新机制&…...

华为网络模拟器eNSP安装部署教程

eNSP是图形化网络仿真平台&#xff0c;该平台通过对真实网络设备的仿真模拟&#xff0c;帮助广大ICT从业者和客户快速熟悉华为数通系列产品&#xff0c;了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力&#xff0c;从而帮助企业构建更高效&#xff0…...

【React】详解样式控制:从基础到进阶应用的全面指南

文章目录 一、内联样式1. 什么是内联样式&#xff1f;2. 内联样式的定义3. 基本示例4. 动态内联样式 二、CSS模块1. 什么是CSS模块&#xff1f;2. CSS模块的定义3. 基本示例4. 动态应用样式 三、CSS-in-JS1. 什么是CSS-in-JS&#xff1f;2. styled-components的定义3. 基本示例…...

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…...

C语言 ——— 数组指针的定义 数组指针的使用

目录 前言 数组指针的定义 数组指针的使用 前言 之前有编写过关于 指针数组 的相关知识 C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 指针数组 顾名思义就是 存放指针的数组 那什么是数组指针呢&#xff1f; 数组指针的定义 何为数组指针&#xf…...

opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言 AIS_ManipulatorOwner是OpenCascade中的一个类&#xff0c;主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类&#xff0c;允许用户通过可视化工具&#xff08;如旋转、平移、缩放等&#xff09;来操纵几何对象。 以下是AIS_ManipulatorOwner的基…...

如何防止用户通过打印功能复制页面文字

简单防白嫖&#xff0c;要让打印出来的页面是空白&#xff0c;通常的做法是在打印时隐藏页面上的所有内容。这可以通过CSS的媒体查询&#xff08;Media Queries&#xff09;来实现&#xff0c;特别是针对media print的查询。 在JavaScript中&#xff0c;你通常不会直接控制打印…...

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …...

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示&#xff0c;运维团队可以迅速发现异常&#xff0c;优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…...

保姆级教程:从NCBI下载序列到MEGA7构建进化树(附拟南芥SPL15基因实战)

生物信息学实战&#xff1a;从基因检索到进化树构建的全流程解析 在分子生物学研究中&#xff0c;系统进化分析是理解基因家族演化关系的重要工具。对于刚接触生物信息学的学生来说&#xff0c;从零开始完成一个完整的进化树分析项目往往面临诸多挑战——如何获取目标基因序列…...

该不该现在买房?AI浪潮下,你的房贷是资产还是负债?

该不该现在买房&#xff1f;AI浪潮下&#xff0c;你的房贷是资产还是负债&#xff1f; 开篇&#xff1a;一个普通家庭的决策困境 深夜&#xff0c;东莞某小区的灯光次第熄灭。你刚刚哄睡一岁半的孩子&#xff0c;打开手机看到甲骨文最新一轮裁员的新闻&#xff0c;又瞥了一眼房…...

桌面端酷安社区体验:Coolapk UWP 完整使用指南

桌面端酷安社区体验&#xff1a;Coolapk UWP 完整使用指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾经希望在电脑大屏幕上舒适地浏览酷安社区&#xff0c;摆脱手机小屏幕的…...

在Windows上安装安卓应用的终极指南:APK安装器完整使用教程

在Windows上安装安卓应用的终极指南&#xff1a;APK安装器完整使用教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想要在Windows电脑上直接运行安卓应用吗&#x…...

技术管理者最痛:如何让团队从“要我做”变成“我要做”?

在软件测试领域&#xff0c;技术管理者常常陷入一种无形的焦虑&#xff1a;测试用例的执行越来越像机械的流水线&#xff0c;回归测试变成了纯粹的体力劳动&#xff0c;而探索性测试和深度质量分析这些真正有价值的活动&#xff0c;却总是无人主动认领。你尝试过推行自动化覆盖…...

luceda ipkiss实战:利用MZI Lattice Filter实现可调谐波分复用器

1. MZI晶格滤波器基础与可调谐波分复用原理 马赫曾德干涉仪&#xff08;MZI&#xff09;晶格结构是集成光子学中最经典的多功能器件之一。我第一次接触这种结构时&#xff0c;就被它优雅的对称性和强大的可重构性所吸引。本质上&#xff0c;它通过级联多个MZI单元形成周期性结构…...

仅限本周开放|DeepSeek Chat V3.2功能测试黄金 checklist(含17个边界Case+响应时延基线数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Chat V3.2功能测试黄金 checklist 发布说明 DeepSeek Chat V3.2 已正式面向开发者开放灰度测试&#xff0c;本次版本聚焦多模态理解增强、长上下文稳定性优化及企业级安全策略集成。为保障测试…...

基于LLM的AI新闻智能体:自动化信息采集与周报生成实战

1. 项目概述&#xff1a;一个能自动追踪AI新闻的智能体 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 ai-news-weekly-agent 。光看名字&#xff0c;你大概能猜到它是个和AI新闻相关的自动化工具。没错&#xff0c;它的核心目标就是扮演一个“AI新闻周刊编辑”的角色…...

为Adafruit CLUE开发板设计超薄可拆卸3D打印外壳:从建模到装配全指南

1. 项目概述&#xff1a;为你的CLUE开发板“量体裁衣”如果你手头有一块Adafruit CLUE开发板&#xff0c;大概率会和我有同样的感受&#xff1a;这块板子功能强大&#xff0c;集成了屏幕、按钮、一堆传感器&#xff0c;但裸露的电路板和元器件总让人有点“心疼”&#xff0c;怕…...

核心代码编程-社交网络相同爱好好友查询-200分

题目描述&#xff1a;在一个社交网络中&#xff0c;用户之间通过"关注"关系形成有向图。每个用户有两个属性 &#xfe63;用户ID&#xff08;整数字符串&#xff09; &#xfe63;兴趣标列表&#xff08;字符串数组&#xff09; 现在需要实现一个函数&#xff0c;查询…...