理解循环神经网络

news2024/10/6 12:27:17

理解循环神经网络

之前有一篇文章已经初步介绍过RNN的原理(https://forchenxi.github.io/2021/04/23/nlp-rnn/),里面其实已经介绍的比较清晰易懂了,这篇文章再来回顾和拓展一下.

首先要知道RNN是一个带有内部环的神经网络,上面的这篇文章中的图描述的更形象,这里再来简单回顾下,使用tensorflow来实现(实际也是用keras来实现的)。

SimpleRNN

RNN基本计算过程

在这里插入图片描述

在这里插入图片描述

这张图中为了让大家看到RNN网络的计算过程,没有展现出RNN网络的内部循环,但是各个参数的含义表示的非常清楚。

import tensorflow as tf

# 这里随机生成一个3*2的矩阵,前面的1表示样本数量(表示本批次只有一个样本)
# 输出数据的第一维与这里样本数量一致
# 3*2可以理解为一个文本句子的向量表示,有三个单词,每个单词的的向量长度为2
x = tf.random.normal((1, 3, 2))

# 这里的4可以理解为权重向量的长度(上面的图上有标注出来),最后输出张量的尺寸也与此参数有关
layer = tf.keras.layers.SimpleRNN(4, input_shape=(3, 2))
output = layer(x)

print(output.shape)

print(output)

(1, 4)
tf.Tensor([[0.8968392  0.53277504 0.07782626 0.42022803]], shape=(1, 4), dtype=float32)

这里最后输出只有一个长度为4的向量,而RNN在实际计算时是每个单词都计算了一遍,所以实际计算过程得到了3个长度为4的向量,上篇文章中也有提到是通过return_sequences这个参数来控制的。

RNN的输出

RNN的输出分为多对一(N vs 1)、多对多(N vs N)和一对多(1 vs N)三种

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

上面的代码是单输出形式,多输出的代码如下:

x = tf.random.normal((1, 3, 2))

layer = tf.keras.layers.SimpleRNN(4, input_shape=(3, 2), return_sequences=True)
output = layer(x)

print(output.shape)

(1, 3, 4)

代码理解图

在这里插入图片描述

上面仅是得到了每个时间步的张量,还可以通过添加输层出来获取输出

model = tf.keras.Sequential()
model.add(tf.keras.layers.SimpleRNN(4, input_shape=(3, 2), 
                    return_sequences=True))
model.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(4, activation='softmax')))

在这里插入图片描述

另外也可以将多个RNN层叠加在一起

model = tf.keras.Sequential()
model.add(tf.keras.layers.SimpleRNN(4, input_shape=(3, 2), return_sequences=True))
model.add(tf.keras.layers.SimpleRNN(4))

在这里插入图片描述

添加embedding层

这里的词向量是随机矩阵,直接输入到RNN中,其实还可以再此之前插入一个embedding层

model = tf.keras.Sequential()
# embedding层的shape与RNN的输入shape保持一致
model.add(tf.keras.layers.Embedding(3, 2))
model.add(tf.keras.layers.SimpleRNN(4, input_shape=(3, 2)))

关于embedding层的原理和使用方法,在这篇博客中也有介绍

https://forchenxi.github.io/2021/03/15/nlp-vectorize/

双向RNN

在这里插入图片描述

双向的RNN实际上就是将一个前向的RNN和一个后向的RNN在每个时间步得到的状态值拼接在一起作为总的状态。

model = tf.keras.Sequential()
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(10, return_sequences=True), input_shape=(5, 10)))
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(10)))
model.add(tf.keras.layers.Dense(5))
model.add(tf.keras.layers.Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

这里实际是用的LSTM网络

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

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

相关文章

港科夜闻|香港科大(广州)校长倪明选教授出席江门双碳实验室第一届理事会一次会议...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大(广州)校长倪明选教授出席江门双碳实验室第一届理事会一次会议。11月21日下午,江门双碳实验室召开第一届理事会一次会议,审议通过有关文件,完善实验室组织架构,谋划下…

Python之条件语句逻辑运算符

目录 一、逻辑运算符 1.基本运算符 2.比较运算符 3.赋值运算符 二、 if条件语句 三、循环语句 一、逻辑运算符 1.基本运算符 2.比较运算符 3.赋值运算符 # 条件语句逻辑运算符 print((5 / 2)) print((5 // 2)) print((3 ** 2)) #3的2次方# 递增 # a1 # a1 # print(a) # a,b…

主流的深度学习推理架构有哪些(NCNNN)

AI 技术在具体落地应用方面,和其他软件技术一样,也需要具体的部署和实施。部署对于不同的平台设备上的部署方法和不同的架构工具。目前在人工智能的落地部署方面,各大平台机构都退出了自家的部署平台。 目前市场上应用最广泛的部署工具主要有…

用DIV+CSS技术设计的网上书城网页与实现制作(大一Web课程设计)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Java项目:JSP中华传统美食网站平台管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前台与后台&…

【网页设计】基于HTML+CSS+JavaScript学生网上报到系统响应式网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

计算机网络---万维网(WWW)

(一)WWW的概念与组成结构 万维网(World Wide Web,WWW)是一个分布式、联机式的信息存储空间,在这个空间中:一样有用的事物称为一样“资源”,并由一个全域“统一资源定位符”(URL)标识。这些资源通…

Scala的简单语法介绍

文章目录变量声明语句块if语句for循环while、do while数组Map映射tuple元组变量声明 //在Scala中val用于定义常量,var用于定义变量 var var_i 1 var_i 1val val_i 1 val_i 1 val_i 2运行结果如下: 可以看到,常量是初始复制就确定了&am…

Hello Erupt

前言 本系列将直接以Erupt的分布式方案为路线进行更新。本文的定位是Erupt的HelloWorld。目标,跑起来,让我们看看它是什么样的。 运行起来 准备一个数据库 第一步还是先运行起来。由于最近接触的公司项目都是在使用mysql的驱动,这里我也就…

python+人脸识别+opencv实现真实人脸驱动的阿凡达(上)

目录一、前言二、技术路线三、主要技术点分析(1) 人脸识别模块特征点的漂移(2) 柔性运动与刚性运动的处理setp1 基于人脸特征点的三角剖分setp2 基于三角映射的仿射变换(3) 正脸转侧脸的处理四、小结一、前言 我们在此前的名叫pythonopencv实现人脸微整形博文里已经简单地实现…

Java GUI图形编程 使用awt和swing 制作简易计算器的工具包含源码和讲解 / java练习项目

系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录系列文章目录前言一、常规配置1. 设置窗口大小2. 获取当前屏幕的尺寸3. 窗口居中4. 设置窗口名称5. 添加监听器,关闭窗口6. 设置窗口可见性7. 设置文本框不可编辑8. 设置文本框提示9. 设…

OpenGL原理与实践——核心模式(六):光照贴图、光源分类以及多光源场景主要源码实现

本章主要以代码为主,理论理解即可。详细分析代码 目录 光照贴图 光源分类 平行光 点光源 shader——点光源 聚光灯 聚光灯边缘优化——光强递减 源码解析 main 全局变量、句柄 main函数主体逻辑 createModel() createTexture(const char* _filename) …

骨感传导蓝牙耳机怎么样,骨感传导耳机对于我们耳道是否有保护

在现在数码产品普及生活的时代,耳机也成为了我们每天的标准,以往佩戴的都是入耳式的耳机,但长时间佩戴下会出现耳朵疼痛,严重的更会导致听力障碍的问题发生,针对这一现象,一种新型的骨感传导耳机来到了我们…

后台默默付出的劳动者,四大组件之服务(Service)

后台默默付出的劳动者,四大组件之服务Service前言十、后台默默付出的劳动者,四大组件之服务(Service)10.1 服务是啥?10.2 Android异步消息处理机制10.2.1 Android异步消息处理机制介绍10.2.2 基于Android异步消息处理机…

Packet Tracer - 排除多区域 OSPFv2 故障

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 ISP GigabitEthernet0/0 209.165.200.17 255.255.255.240 不适用 ASBR GigabitEthernet0/0 209.165.200.18 255.255.255.240 不适用 Serial0/0/0 10.1.1.2 255.255.255.252 不适用 Serial0/0/1 10.2.2…

制作一个企业网站——html华为官网购物商城项目的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

【Redis】使用 Java 客户端连接 Redis

一、三种客户端比较 Jedis : 学习成本低,以 Redis 命令作为方法名称,但是其线程不安全 lettuce:基于 Netty 实现,支持同步、异步、响应式编程(SpringBoot),并且线程安全。支持 Redis 的哨兵模…

【附源码】计算机毕业设计JAVA幼儿健康管理系统

【附源码】计算机毕业设计JAVA幼儿健康管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA my…

Nacos入门

文章目录一、安装nacos二、nacos项目环境配置一、安装nacos 压缩包下载地址: https://github.com/alibaba/nacos/releases 压缩包解压: nacos 中修改端口(8848 端口被占用需要修改): 进入 conf 进入 application.properties 端口位置 启…

【springboot进阶】摆脱 if/else 的高级应用 - 策略模式

目录 一、策略模式的介绍 二、策略模式的使用场景 三、策略模式的应用 1、入参和出参类 2、策略接口 3、策略具体实现 4、策略测试 三、一些使用技巧 四、总结 对于一个逻辑相对复杂的功能应用中,难免需要做很多的逻辑判断,需要写一堆的 if/els…