深度学习之循环神经网络进阶

这一讲我们学习如何实现一个循环神经网络的分类器:

我们要解决的问题是名字分类,我们根据名字找到其对应的国家。

上一讲我们介绍了循环神经网络。

我们在处理自然语言的时候我们通常是以上这种方式,我们在处理单词的时候,通常都要先将其转化为one-hot独热向量。但是独热向量维度太高,而且过于稀疏,所以一般来说我们都要先经过嵌入层将其转化为一个低维稠密的向量,然后经过循环神经网络,RNN一层,隐层的输出不一定与我们要求的目标一致,然后我们再经过线性层将其转化到与我们目标一致。

其实可以用更简单的可视化图表示过程:

下面来看我们今天所学的内容:

我们首先将输入经过嵌入层转化为低维稠密的输出,然后经过GRU层得到输出,再经过线性层转化为我们的目标输出。在我们的例子里面就是18维(数据中包含18个国家)。

我们先对我们的数据进行分析。

以第一个输入麦卡伦为例。我们的输入其实是一个序列,Maclean,其中的每一个字符都是我们序列里面的x1,x2,x3,以此类推。所以我们这里面看起来输入只是一个名字,一个字段,其实它是一个字段,而且我们的序列长度并不统一。有的序列长,有的序列短。我们在处理序列问题的时候,经常遇到的一种情况就是我们在处理序列问题的时候长短不一。

接下来我们来看我们的模型的处理过程。

首先我们来看数据上的准备,我们拿到的是一些字符串,第一件事我们需要将其转化为一个序列。其中每一个元素都是名字之中的一个字符。

接下来我们做词典,用英文字符做词典其实还是比较好做的,用ASCII码表做词典,ASCII码表里面一共有128个字符,我们去求每一个字符对应的ASCII码值,将该值的序列拼成一个序列。这样我们就将其转化成一个数字序列了。

很显然,77并不是说M的值是77,实际上对应的是一个独热向量,这个独热向量有128维,除了第77个元素是1之外,其余所有元素都是0。但是我们对于嵌入层来说,我们只需要告诉我们的Emdeding层,第几个维度是1就行了。

解决完这个问题之后呢,我们还注意到一个问题,这些序列长短不一,而我们的处理层要求维度一致,这个时候需要我们对我们的序列进行统一处理,将其进行扩维(padding),都转化为该序列组中的最高维度,空缺 的部分添加0补上。(因为我们的输入是(Sqlen,batch,input ,output))。要求必须是一个矩阵。张量必须保证所有的元素都要填满。

这样我们就构成了一个张量。

对我们的名字做完处理之后,接下来就是对国家做处理,首先我们需要对国家做分类索引。

代码就先不分析

下面我们来分析双向神经网络,先看我们原本的神经网络。

我们把x1和h0放进来,做线性变换和激活,然后将结果传递到下一项。

接下来按照这个顺序不停的走,然后我们就将隐层和输出都算出来了。

显然得到的结果只考虑过去的信息,(结果包含前面的各种信息)。而实际上有时候我们在自然语言里面我们要考虑未来的信息,就是说以后会发生的事情对它造成的影响。双向的循环神经网络是指什么呢?

我们的Forward是沿着序列的方向走一遍,还有一种backward是反过来算。
当然这个Forward和backward是指序列的正方向和反方向,要和梯度下降里面的Forward和backward区分开,后者是指梯度传播方向。

我们将正向和反向的输出拼接起来。

我们得到的最终的循环网络叫做双向循环神经网络。我们隐层的输出使用红圈圈起来。

当然我们最终的输出包含两部分,一是hidden(用红圈圈住),另一个就是隐层输出output。

所以双向循环网络输出的隐层每一个hn的维度是单向的两倍。

嵌入过程:

我们的每一个元素将来都会变成一个嵌入的向量。图中有些部分不太准确,0应该转化出来的结果都是一样的。

高亮部分应该是一样的数值。

接下来我们解释一下由名字转化为Tensor的过程:

我们需要一个行表示batch列表示sqlen的矩阵,来表示姓名,我们还需要一个表示名字长度的行向量。我们一共需要两个数据。

转化的过程,先把字符串表示成一个一个字符,再把字符转化为一个一个ASCII码值。

之后做填充,填充完之后做转置。

转置之后做排序。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3快速上手(一)使用vite创建项目

一、准备 在此之前,你的电脑,需要安装node.js,我这边v18.19.0 wangdymb 2024code % node -v v18.19.0二、创建 执行npm create vuelatest命令即可使用vite创建vue3项目 有的同学可能卡主不动,可能是npm的registry设置的问题 先看下&#x…

【SpringBoot】策略和模板模式的思考与实践

一、应用场景 之所以会将策略和模板模式放在一起,是因为这两种模式用的最多最广泛,而且基本都是联合使用的。在开始之前,先复习一下模式的定义: 模板模式(Template Pattern) 模板模式是在一个抽象类中定…

day21网页布局

文章目录 块元素和行内元素列表标签表格标签媒体元素页面结构分析iframe内联框架 块元素和行内元素 块元素:无论内容多少,该元素独占一行。(p标签、h1~h6…) 行内元素:内容撑开宽度,左右都是行内元素的可以排在一行。&#xff08…

基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络(CNN) 4.2 损失函数和优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................…

外汇天眼:SIX推出了新的SIX参考利率加密货币和SIX实时加密货币指数

全球金融信息提供商SIX今天宣布推出新的SIX参考利率加密货币和SIX实时加密货币指数。新的SIX参考利率加密货币指数和SIX实时加密货币指数涵盖了主要的加密资产比特币(BTC)和以太坊(ETH),为市场及其表现提供了全面的快照…

Goland控制台日志打印错位

现象:Goland控制台打印日志,调整控制台界面大小后偶发性的日志内容错位 原因:未知(大概是bug) 解决方案: shift shift 进入Registry,取消go.run.process.with.pty勾选即可

《动手学深度学习(PyTorch版)》笔记7.5

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

Qt|实现时间选择小功能

在软件开发过程中,QtDesigner系统给出的控件很多时候都无法满足炫酷的效果,前一段时间需要用Qt实现选择时间的小功能,今天为大家分享一下! 首先看一下时间效果吧! 如果有需要继续往下看下去哟~ 功能 1:开…

Vue-easy-tree封装及使用

1.使用及安装 下载依赖 npm install wchbrad/vue-easy-tree引入俩种方案 1.在main.js中引入 import VueEasyTree from "wchbrad/vue-easy-tree"; import "wchbrad/vue-easy-tree/src/assets/index.scss" Vue.use(VueEasyTree)2.当前页面引入 import VueEa…

PiflowX新增Apache Beam引擎支持

参考资料: Apache Beam 架构原理及应用实践-腾讯云开发者社区-腾讯云 (tencent.com) 在之前的文章中有介绍过,PiflowX是支持spark和flink计算引擎,其架构图如下所示: 在piflow高度抽象的流水线组件的支持下,我们可以…

2024第九届国际发酵培养基应用与发展技术论坛会议通知

会议简介 随着科技的不断发展,发酵技术已逐渐成为生物制造中的重要支撑,发酵技术应用领域更加广泛。发酵培养基是影响生物发酵产业技术水平、环境友好程度的重要因素之一,为进一步推动发酵培养基的科学应用,提升发酵培养基的高效、稳定应用&…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…