递归模型的应用场景

在前面的文章中我们看到的多层线性模型能处理的输入数量是固定的,如果一个模型能接收两个输入那么你就不能给它传一个或者三个。而有时候我们需要根据数量不一定的输入来预测输出,例如文本就是数量不一定的输入,“这部片非常好看” 有 7 个字,“这部片很无聊” 有 6 个字,如果我们想根据文本判断是正面评价还是负面评价,那么就需要使用支持不定长度 (即可以接收 6 个又可以接收 7 个) 输入的模型。时序性的数据数量也是不一定的,例如一个运动中的球,从某个时间点开始的第 0 秒在位置 1,第 1 秒在位置 3,第 2 秒在位置 5,那么正确的模型应该可以预测出第 3 秒在位置 7,如下图所示。当然,时序性的数据可以固定一个窗口(例如最近的 5 条数据)来处理,这样输入数量就是一定的,但灵活性就降低了,窗口设置过小可能会导致没有足够的信息用于预测输出,过大则会影响性能。

递归模型 (Recursive Model) 可以用于处理不定长度的输入,用法是一次只传固定数量的输入给模型,可以分多次传,传的次数根据数据而定。以上述例子来说,“这部片非常好看” 每次传一个字需要传 7 次,“这部片很无聊” 每次传一个字需要传 6 次。而递归模型每收到一次输入都会返回一次输出,有的场景只会使用最后一次输出的结果 (例如这个例子),而有的场景则会使用每一次输出的结果。

换成代码可以这样理解:

model = MyRecursiveModel()
model('这')
model('部')
model('片')
model('非')
model('常')
model('好')
last_output = model('看')
print(last_output)

接下来我们看看几个经典的递归模型是怎么实现的。

最简单的递归模型 - RNN (tanh)

RNN tanh (Recurrent Neural Network - tanh) 是最简单的递归模型,计算公式如下,数学不好的第一印象可能会觉得妈呀一看数学公式就头昏脑胀了

写给程序员的机器学习入门 (五) - 递归模型 RNN,LSTM 与 GRU的更多相关文章

  1. 写给程序员的机器学习入门 (八 补充) - 使用 GPU 训练模型

    在之前的文章中我训练模型都是使用的 CPU,因为家中黄脸婆不允许我浪费钱买电脑.终于的,附近一个废品回收站的朋友转让给我一台破烂旧电脑,所以我现在可以体验使用 GPU 训练模型了

  2. 写给程序员的机器学习入门 (二) - pytorch 与矩阵计算入门

    pytorch 简介 pytorch 是目前世界上最流行的两个机器学习框架的其中之一,与 tensoflow 并峙双雄.它提供了很多方便的功能,例如根据损失自动微分计算应该怎样调整参数,提供了一系列的 ...

  3. 写给程序员的机器学习入门 (十) - 对象识别 Faster-RCNN - 识别人脸位置与是否戴口罩

    每次看到大数据人脸识别抓逃犯的新闻我都会感叹技术发展的太快了,国家治安水平也越来越好了

  4. 写给程序员的机器学习入门 (九) - 对象识别 RCNN 与 Fast-RCNN

    因为这几个月饭店生意恢复,加上研究 Faster-RCNN 用掉了很多时间,就没有更新博客了.这篇开始会介绍对象识别的模型与实现方法,首先会介绍最简单的 RCNN 与 Fast-RCNN 模型,下一篇 ...

  5. 写给程序员的机器学习入门 (十一) - 对象识别 YOLO - 识别人脸位置与是否戴口罩

    这篇将会介绍目前最流行的对象识别模型 YOLO,YOLO 的特征是快,识别速度非常快

  6. 写给程序员的机器学习入门 (七) - 双向递归模型 (BRNN) - 根据上下文补全单词

    这一篇将会介绍什么是双向递归模型和如何使用双向递归模型实现根据上下文补全句子中的单词. 双向递归模型 到这里为止我们看到的例子都是按原有顺序把输入传给递归模型的,例如传递第一天股价会返回根据第一天股价 ...

  7. 写给程序员的机器学习入门 (八) - 卷积神经网络 (CNN) - 图片分类和验证码识别

    这一篇将会介绍卷积神经网络 (CNN),CNN 模型非常适合用来进行图片相关的学习,例如图片分类和验证码识别,也可以配合其他模型实现 OCR. 使用 Python 处理图片 在具体介绍 CNN 之前, ...

  8. Java程序员的Golang入门指南(下)

    Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合 ...

  9. Java程序员的Golang入门指南(上)

    Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如 ...

随机推荐

  1. CF1335E Three Blocks Palindrome

    就是我这个菜鸡,赛时写出了 E2 的做法,但是算错复杂度,导致以为自己的做法只能AC E1,就没交到 E2 上,然后赛后秒A..... 题意 定义一种字串为形如:\([\underbrace{a, a ...

  2. Fibonacci相关问题

    公式如下: 递归的解法我就不写了,贴一个递推的. long long Fibonacci(unsigned int n) { ) ; ) ; ; ; long long res; ; i <= ...

  3. Unity 游戏框架搭建 2019 (四十四、四十五) 关于知识库的小结&独立的方法和独立的类

    在上一篇,我们完成了一个定时功能,并且接触了 Action 和委托.lambda 表达式这些概念. 到目前为止,我们的库作为知识收录这个功能来说,已经非常好用了,由于使用了 partial 关键字,所 ...

  4. LTE基站开局流程

    1.全局参数配置 MOD  ENODEB :修改基站 ADD  CNOPERATOR: 添加运营商 ADD  CNOPERATORTA:添加跟踪区(TA) 2.设备参数配置(机柜.机框.RRU.光纤链 ...

  5. Java的Object.wait(long)在等待时间过去后会继续往后执行吗

    Java的Object.wait(long)在等待时间过去后会继续往后执行吗 Object.wait(long)方法相比于wait,多了个等待时长,那么当等待时长过去后,线程会继续往下执行吗? 单个线 ...

  6. 【Hadoop离线基础总结】Hue与Mysql集成

    Hue与Mysql集成 1.修改hue.ini配置文件 这里要去掉#,打开mysql注释,大概在1547行 [[[mysql]]] nice_name="My SQL DB" en ...

  7. vue滑动吸顶以及锚点定位

    Vue项目中需要实现滑动吸顶以及锚点定位功能.template代码如下: <template> <div class="main"> <div id= ...

  8. nodejs开发准备工作(2)

    (1)安装express: (2)安装好express后命令行执行express --version出现express不是内部或外部命令,也不是可运行的程序或批处理文件的问题可能是因为express4 ...

  9. hadoop问题

    如果启动hadoop集群时,无法启动datanode,则可以集群所有节点下dfs.datanode.data.dir的配置值所指示的路径下清空所有文件(夹),然后 hadoop namenode -f ...

  10. Autojs - 用 JavaScript 实现自己的安卓手机自动化工具脚本

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...