Seq2Seq(Sequence-to-Sequence,序列到序列)工作原理

TensorFlow中Sequence-to-Sequence样例代码详解 在NLP领域,sequence to sequence模型有很多应用,比如机器翻译、自动应答机器人等。在看懂了相关的论文后,我开始研读TensorFlow提供的源代码,刚开始看时感觉非常晦涩,现在基本都弄懂了,我在这里主要介绍Sequence-to-Sequence Models用到的理论,然后对源代码进行详解,也算是对自己这两周的学习进行一下总结,如果也能够对您有所帮助的话,那就再好不过了~seq 阅读详情

Seq2Seq(Sequence-to-Sequence,序列到序列) 是一种基于 Encoder-Decoder(编码器-解码器) 架构的深度学习模型,核心是将任意长度的输入序列转换为任意长度的输出序列,主要用于机器翻译、文本摘要、对话生成等序列生成任务。

B站动画讲解seq2seq 包教包会

一、Encoder-Decoder 通用结构图

1. 整体架构总图(标准Seq2Seq)
输入序列 x₁ x₂ x₃ ... xₘ
        ↓
   ┌──────────┐
   │  Encoder │  编码器(RNN/LSTM/GRU/Transformer)
   │  编码压缩 │
   └────┬─────┘
        │
   上下文语义向量 C
        │
   ┌────┴─────┐
   │  Decoder │  解码器(RNN/LSTM/GRU/Transformer)
   │ 逐步生成 │
   └────┬─────┘
        ↓
输出序列 y₁ y₂ y₃ ... yₙ

2. 带细节完整版结构图(含时序、隐藏态、起止符)
<SOS> = 起始符  <EOS> = 结束符

输入: x₁ → x₂ → x₃ → … → xₘ
       ↓    ↓    ↓        ↓
     ┌──────────────────────┐
     │    Encoder 编码器     │
     │  逐时刻更新隐藏状态   │
     └──────────┬───────────┘
                │
         最终语义向量 C
                │
     ┌──────────┴───────────┐
     │    Decoder 解码器     │
<SOS>│    自回归逐词生成      │→ y₁
y₁ →→│                      │→ y₂
y₂ →→│                      │→ y₃
y₃ →→│                      │→ yn
y₃ →→│                      │→ <EOS>
     └──────────┬───────────┘

3.加Attention 注意力版结构图

解决固定语义向量瓶颈

输入序列 x₁ x₂ x₃ ... xm
        ↓
   ┌──────────┐
   │ Encoder  │ → 输出所有时刻隐藏态 h₁,h₂...hm
   └────┬─────┘
        │
   ┌────┴─────┐
   │ Attention│  计算权重,动态聚焦输入每个位置
   └────┬─────┘
        │
   ┌────┴─────┐
   │ Decoder  │  每生成一个词,都看输入最相关部分
   └────┬─────┘
        ↓
   输出 y₁ y₂ ... yn

4.一句话总结
  1. Encoder:吃进去变长输入序列,提炼全局语义,输出表征向量/全部隐藏态
  2. 中间层:普通版是固定上下文向量C;Attention版是加权语义上下文
  3. Decoder:接收语义信息,从<SOS>开始自回归,逐个生成输出,直到<EOS>

二、核心组件

1. 编码器 (Encoder)
  • 功能:读取并理解输入序列,将其压缩为一个固定长度的上下文向量 (Context Vector),也叫“语义向量”或“思想向量”。
  • 结构:通常由循环神经网络(RNN、LSTM、GRU,)或者transform 构成。
  • 工作过程
    1. 将输入序列(如句子 [我, 爱, 中, 国])的每个元素转为词向量 (Word Embedding)。
    2. 按顺序输入编码器,逐时间步更新隐藏状态 (Hidden State)。
    3. 处理完所有输入后,最后一个时间步的隐藏状态即为上下文向量 c。
2. 解码器 (Decoder)
  • 功能:基于上下文向量 c,逐词生成输出序列。
  • 结构:由循环神经网络(RNN、LSTM、GRU,)或者transform 构成。
  • 推理/真实预测(自回归生成) 训练使用的是Teacher Forcing
    1. 初始化:将编码器的上下文向量 c 作为解码器的初始隐藏状态。
    2. 起始:以特殊符号 <SOS> (Start of Sentence) 作为第一个输入。
    3. 循环生成:
      • 输入:上一步生成的词 y t − 1 y_{t-1} yt−1​ + 当前隐藏状态 h t − 1 ′ h_{t-1}' ht−1′​
      • 输出:预测下一个词 y t y_t yt​,并更新隐藏状态 h t ′ h_t' ht′​
    4. 结束:当预测到特殊符号 <EOS> (End of Sentence) 时停止。
3.自回归生成
          [Decoder 解码器]
                ↓
         [全局上下文语义向量]

<SOS> ────▶ 解码器 ────▶ 输出 y₁
                           │
                           ▼
y₁    ────▶ 解码器 ────▶ 输出 y₂
                           │
                           ▼
y₂    ────▶ 解码器 ────▶ 输出 y₃
                           │
                           ▼
y₃    ────▶ 解码器 ────▶ 输出 <EOS> 停止

自回归 本质一句话图

生成一个词 → 传回给自己 → 再生成下一个

三、训练机制:Teacher Forcing

1.什么是 Teacher Forcing

Teacher Forcing(教师强制/强制教学)是 Seq2Seq 模型训练时 的一种输入策略:

  • 训练时:不使用模型上一步的预测结果作为输入,而是直接使用真实标签 (Ground Truth) 作为输入。
  • 目的:防止早期错误累积,加速训练收敛。
二、先看懂:不使用 Teacher Forcing 会怎样?
<SOS> → 模型预测 y1
y1 →  模型再预测 y2
y2 →  模型再预测 y3
……直到 <EOS>

问题:前面预测错一个词,后面全部跟着错 → 误差逐级累积,越错越离谱。

训练早期模型很菜,动不动就预测错,错误一路往后传,
模型很难收敛、训练极慢、还容易不稳定。


三、使用 Teacher Forcing 训练流程(核心)

先约定符号

  • <SOS>:句子起始符

  • y 1 , y 2 , y 3 y_1,y_2,y_3 y1​,y2​,y3​:真实标准答案

  • y ^ 1 , y ^ 2 , y ^ 3 \hat y_1,\hat y_2,\hat y_3 y^​1​,y^​2​,y^​3​:模型自己预测的结果

设真实正确句子:y1 y2 y3 <EOS>

训练时 Decoder 输入是:

解码器每一步输入用【真实标签】
<SOS> ────→ 预测 ŷ1
 y1(真实) ─→ 预测 ŷ2
 y2(真实) ─→ 预测 ŷ3
 y3(真实) ─→ 预测 <EOS>

一句话:
训练时喂给解码器的是“标准答案”,不是模型自己的“猜测答案”。


四、Teacher Forcing 实例

输入:中文 我爱吃苹果
真实英文标签:I like eating apple <EOS>

  1. Decoder 输入 <SOS> → : I(预测)
  2. Decoder 输入 (真实) I → : love(预测)
  3. Decoder 输入 (真实) like → : drink(预测)
  4. Decoder 输入 (真实)eating → :banana(预测)
  5. Decoder 输入 (真实) apple → : <EOS>(预测)

全程用标准答案当输入,不用模型自己预测的词。


Teacher Forcing 核心优点
  1. 加速模型收敛
    每一步都给正确上下文,模型学得快、梯度更新更准。

  2. 避免误差累积
    不会因为前一步预测错误,带偏后面所有训练步骤。

  3. 训练更稳定、梯度更干净
    输入都是真实标签,噪声小,容易训练深层Seq2Seq、Transformer。

五、自回归推理 vs Teacher Forcing 训练

先约定符号

  • <SOS>:句子起始符
  • y 1 , y 2 , y 3 y_1,y_2,y_3 y1​,y2​,y3​:真实标准答案
  • y ^ 1 , y ^ 2 , y ^ 3 \hat y_1,\hat y_2,\hat y_3 y^​1​,y^​2​,y^​3​:模型自己预测的结果

Teacher Forcing(训练用) 特点每一步输入都给正确答案,不看模型猜得怎么样;无错误传递,训练快、收敛稳。

解码器每一步输入用【真实标签】
<SOS> ────→ 预测 ŷ1
 y1(真实) ─→ 预测 ŷ2
 y2(真实) ─→ 预测 ŷ3
 y3(真实) ─→ 预测 <EOS>

普通自回归(推理/预测时、不用TF) 特点自己猜的当下一步输入;前面错一个,后面全跑偏 → 误差累积。

解码器每一步输入用【自己上一步的预测】
<SOS> ────→ 预测 ŷ1
ŷ1(模型猜的) ─→ 预测 ŷ2
ŷ2(模型猜的) ─→ 预测 ŷ3
ŷ3(模型猜的) ─→ 预测 <EOS>

六、典型应用

1.机器翻译(最经典Seq2Seq案例)

场景:中文句子 → 英文句子

  • Encoder(编码器):输入中文整句,逐词读进去,把整句话语义压缩成一个向量。
  • Decoder(解码器):拿着Encoder的语义向量,逐词生成英文,直到生成结束符。
    工作流程:
  1. 输入:我今天很开心 进 Encoder
  2. Encoder 提炼整句含义
  3. Decoder 从 <SOS> 开始,一个词一个词吐出:I → am → very → happy → <EOS>

2.智能对话机器人

场景:用户问句 → 机器人回答

  • Encoder:理解用户发的一句话「今天天气怎么样?」
  • Decoder:根据理解的语义,自动生成回复「今天晴天,适合出门」

3.文本摘要(长文→短摘要)

场景:长篇新闻文章 → 一两句话摘要

  • Encoder:读完整篇长新闻,抓取核心事件、人物、时间。
  • Decoder:浓缩核心信息,自动生成简短摘要。

4.语音识别(语音→文字)

场景:语音声波序列 → 汉字文本

  • Encoder:输入音频波形/频谱特征,把语音特征编码成语义表征。
  • Decoder:把语音表征解码,逐字输出汉字。

5.语音合成 TTS(文字→语音)

场景:文字 → 人声音频

  • Encoder:输入文本句子,理解语义、语气、断句。
  • Decoder:根据文本语义,逐帧生成语音波形,合成人声。

6.图片描述 Image Caption(看图说话)

场景:一张图片 → 自动生成一句话描述

  • Encoder:用CNN/ViT把图片特征编码,理解图里有什么(人、狗、草坪)。
  • Decoder:基于图像特征,生成文字:一个小孩在草地上遛狗。

7.代码生成(自然语言→代码)

场景:文字需求 → 自动写Python代码

  • Encoder:理解自然语言需求「写一个求和函数」。
  • Decoder:逐行逐字符生成Python代码。

8.时间序列预测(股票/气温预测)

场景:过去7天温度 → 预测未来3天温度

  • Encoder:编码历史时间序列数据,捕捉趋势、周期。
  • Decoder:一步步输出未来连续预测值。

LiteratureReading:[2014] Sequence to Sequence Learning with Neural Networks 所属机构:Google电子邮件:ilyasu@google.comIlya Sutskever 是一位著名的人工智能研究员,他在深度学习和神经网络领域做出了重要贡献。他是OpenAI的联合创始人之一,并且在Google担任重要职位。所属机构:Google电子邮件:vinyals@google.comOriol Vinyals 是一位在机器学习和自然语言处理领域有显著贡献的研究员。他在Google的研究团队中工作,专注于开发先进的算法和技术。Quoc V. Le所属机构:Google。 阅读详情

相关推荐

序列到序列模型(Sequence to sequence)

序列到序列模型(Sequence to sequence) Sequence to sequence. paper:Sequence to Seq

AI天才研究院 1036

Seq2Seq 模型详解

在NLP任务中,我们通常会遇到不定长的语言序列,比如机器翻译任务中,输入可能是一段不定长的英文文本,输出可能是不定长的中文或者法语序列。当遇到输入和输出都是不定长的序列时,可以使用编码器-解码器(encoder-decoder)模型或者seq2seq模型。其基本思想是编码器用来分析输入序列,解码器用来生成输出序列。 首先,来简单介绍下RNN(循环神经网络)结构: 1. RNN 结构 RNN结构 RNN中,每个单元接受两个输入,一个是当前时间步输入的信息 XtX_tXt​,另一个是上一个单元的隐藏层状态 H

Angus的学习笔记 2万+

序列到序列(Sequencetosequence, Seq2Seq)模型的使用:Using Sequencet

作者:禅与计算机程序设计艺术 1.简介 在这篇文章中,我将会从深度学习模型的基础知识、 Seq2Seq 模型的原理、实践应用以及未来的挑战等方面阐述 Seq2Seq 模型的基本原理及应用方法。本文适合具有一定机器学习、深度学习基础的人群阅读。由于 Seq2Seq 模型是一个很新的模型,其中涉及到的各类算

AI天才研究院 3774

深度学习——seq2seq2笔记和代码

它直到真正的翻译是什么样子的,所以解码器的输入(每个RNN时刻 的输出)所使用的实际上是真正的目标句子的输入,即使是训练的时候翻译错了。所以说真实的标签很长,预测的长度很短的话,会导致前面的指数项比较小,因为预测的长度很短的话,就会越容易命中真实的标签(比如只有标签“A”,预测随便一个就命中了),所以前半部分的指数项是为了惩罚较短的预测序列,防止预测的长度过短。①pn表示n-grams的精度,它是两个数量的比值:第一个是预测序列与标签序列中匹配的n元语法的数量,第二个是预测序列中n元语法的数量的比率。

jbkjhji的博客 1063

【NLP】一文理解Seq2Seq

Seq2Seq技术,全称Sequence to Sequence,该技术突破了传统的固定大小输入问题框架,开通了将经典深度神经网络模型(DNNs)运用于在翻译,文本自动摘要和机器人自动问答以及一些回归预测任务上,并被证实在英语-法语翻译、英语-德语翻译以及人机短问快答的应用中有着不俗的表现。

sikh_0529的博客 1万+

自然语言处理之文本摘要:Sequence-to-Sequence(Seq2Seq)模型详解

序列模型在处理序列数据时特别有效,如文本、语音和时间序列数据。在NLP中,序列模型如循环神经网络(RNN)、长短时记忆网络(LSTM)和门控循环单元(GRU)被广泛用于文本生成、机器翻译和文本摘要等任务。这些模型能够记住序列中的历史信息,从而在处理长序列时保持上下文的一致性。在自然语言处理中,模型是一种用于处理序列到序列任务的强大架构,如机器翻译、文本摘要、对话系统等。其核心思想是使用两个循环神经网络(RNN):一个用于编码输入序列,另一个用于解码输出序列。

zhubeibei168的博客 1005

NLP之Seq2Seq

参考文档: ①Seq2Seq简介1 ②Seq2Seq简介2 ③莫烦python NLP1 Seq2seq1.1 最简单的Seq2Seq结构1.2 具体例子1.3 损失函数1.4 优化(Beam Search)1.4.1 贪婪搜索1.4.2 穷举搜索1.4.3 束搜索2 Attention(注意力机制)2.1 注意力机制的引入2.2 注意力机制2.3 背景变量的计算3 展望 1 Seq2seq Seq2Seq,又名编码器-解码器(Encoder-Decoder),是一种输入为序列,输出也是序列的网络结构。 .

Ton的博客 2612

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

深度学习笔记之Seq2seq(二)基于Seq2seq注意力机制的动机

上一节介绍了Seq2seq网络常用的基本结构以及在机器翻译任务中,关于目标函数与预测概率的描述。本节依然以机器翻译任务为例,对Seq2seq中的注意力机制(Attention)进行描述。

静静的学习就好 1360

STM32+HX711实战:5分钟搞定拉力传感器数据采集(附完整代码)

本文详细介绍了如何使用STM32微控制器和HX711模数转换器快速搭建高精度拉力测量系统。通过硬件连接指南、驱动实现代码和校准方法,帮助开发者在5分钟内完成拉力传感器数据采集,适用于工业自动化和消费电子等场景。

y7z8a9的博客 877

STM32新手必看:3分钟搞定ST官网资料下载(附F0系列手册+外设库下载技巧)

本文为STM32开发新手提供高效获取ST官网技术资料的完整指南,重点介绍如何快速下载STM32F0系列数据手册和外设库。通过系统性的资源分类解析和实用下载技巧,帮助开发者快速定位所需文档,建立本地知识库,提升开发效率。

ujm5678901的博客 270

实战深度学习之Seq2Seq(6)

Seq2Seq with attention decoder attention Decoder的流程图如上图所示,与参考论文中不同的一点是,我把hidden_state之后Dense_layer之前的maxoutlayer去掉了,因为看到google Seq2Seq的实现中也没有maxoutlayer,与朋友讨论的结果是可能maxoutlayer会增加更多的计算量。还有就是最后的softmax直接变成argmax了。 上图中拿掉右边方框内的的Attention机制就是一个基本的decoder,基本的

leva的博客 224

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

深度学习-序列到序列学习seq2seq

嵌入层:将词索引转换为词向量# GRU层:用于处理序列数据继承自(可能是一个基础编码器类)初始化参数说明:vocab_size:词汇表大小(不同词的总数)embed_size:词向量的维度:GRU 隐藏层的维度num_layers:GRU 的层数dropout: dropout 正则化参数网络层组成:Embedding将整数表示的词(词索引)转换为固定维度的向量GRU层:处理序列数据的循环神经网络层模型超参数embed_size:词嵌入维度(将词汇表中的词转换为向量的维度)。

guoke_tg的博客 1047

GEE:提取研究区 NDVI/LST/RVI 并进行时间序列线性插值填补缺失像素和Savitsky-Golay(SG)滤波平滑处理

养乐多_本文将介绍使用Landsat数据集,构建时间序列,并使用线性插值算法填补缺失数据,或者去云空洞,并进一步对完整的时间序列数据进行SG滤波处理。

养乐多的博客 3200

使用pyqt5实现可勾选的测试用例界面

使用pyqt5实现可勾选的测试用例界面

天赐好车的博客 629

Seq2Seq(Sequence-to-Sequence)模型详解

Seq2Seq模型通过编码器-解码器结构,实现了序列到序列的映射。注意力机制显著提升了模型对长序列的处理能力。该模型在机器翻译、文本摘要等任务中表现出色,是自然语言处理领域的核心模型之一。

2401_86968005的博客 2835

Laser-Marking 激光振镜打标机的开源代码 - 下载 - 搜珍网

为了方便开发者的使用和定制化需求,我们在这里提供激光振镜打标机的开源代码,并附带详细的描述。首先,让我们来了解一下激光振镜打标机的基本原理。振镜系统由两个可移动的反射镜组成,可以控制激光束在水平和垂直方向上的偏转角度,从而实现对工件的精确控制。通过这段开源代码,开发者可以根据自己的需求对激光振镜打标机进行二次开发和定制化。你可以修改振镜角度、打标速度等参数,也可以添加其他功能,例如自动识别和追踪等。首先,我们创建了一个串口对象,用于与激光振镜打标机进行通信。函数实现了对用户输入文本的打标操作。

TechProX的博客 1279

NLP 的 Sequence-to-Sequence(Seq2Seq)模型

Sequence-to-Sequence 模型

看正好六个字的博客 1765

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv11轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 6003

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Sequence-to-Sequence模型原理

1. 前言 本文讲解Sequence-to-Sequence(Seq2Seq)模型和机器翻译原理。 本人全部文章请参见:博客文章导航目录 本文归属于:NLP模型原理与应用系列 前文:循环神经网络的改进:多层RNN、双向RNN与预训练 ...

RuizhiHe 5715

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【每周一文】Sequence to Sequence Learning with Neural Networks(2014)

概述 DNN已经被成功用于多种AI任务,并取得很多可喜的成绩,例如语音识别、图片分类等。然而它们都不能处理序列到序列的任务,该文提出了一个端到端的(End To End)模型处理序列到序列的任务。 本文主要介绍: 1.Seq2Seq任务描述 2.Seq2Seq模型介绍 任务描述 在自然语言处理中有很多任务都可以归约为序列到序列的任务,例如: 1.机器翻译问题 2.语音识

互联网广告从业者,长期关注AI、计算广告以及搜广推相关技术,致力于广告投放、广告策略以及底层技术透明可视,太阳底下没有新鲜事,人人可懂可会 3883

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习:Sequence-to-sequence(Seq2seq)详解

Sequence-to-sequence(Seq2seq)模型是一类用于处理序列数据的神经网络模型框架,特别是在需要将输入序列转换为输出序列的情况下,例如机器翻译、语音识别和问答系统。这类模型的主要优势在于其能够处理可变长度的输入和输出序列。以下是对Seq2seq模型的详尽解释,包括其结构、工作原理、关键技术组件及其在训练过程中的应用。

m0_73640344的博客 1052

python自然语言处理—Seq2Seq(sequence-to-sequence)

sequence-to-sequence 一、sequence-tosequence(Seq2Seq)模型简介 突破了传统的固定大小输入问题框架; 开创了将 DNN运用于翻译、聊天(问答)这类序列型任务的先河; 在各主流语言之间的相互翻译,语音助手中人机短问快答的应用中有非常好的表现。 模型可用于: 语音识别;机器翻译;实体名称/主...

weixin_38477351的博客 4639

卷积序列到序列模型的学习(Convolutional Sequence to Sequence Learning)

文章目录Introduction数据预处理搭建模型EncoderConvolutional BlocksEncoder的实现DecoderDecoder Convolutional BlocksDecoder的实现Seq2Seq训练模型推断BELU完整代码 在本笔记本中,我们将实现论文Convolutional Sequence to Sequence Learning模型。 Introduction 这个模型与之前笔记中使用的先前模型有很大的不同。根本没有使用任何循环的组件。相反,它使用通常用于图像处理

赵小白的博客 2951

深度学习:序列到序列自动编码器(Sequence-to-Sequence Autoencoder, Seq2Seq Autoencoder)详解

序列到序列自动编码器是一种强大的深度学习工具,适用于多种序列生成和转换任务。通过其编码器-解码器结构,Seq2Seq自动编码器能够有效地学习复杂的序列内部表示,使其在处理自然语言和其他类型的序列数据时表现出色。

m0_73640344的博客 1039
上一篇: RNN 反向传播数学推导(BPTT 时间反向传播)
下一篇: 时序模型血泪史:GRU 门控拆解 + 数学推导,看完直接避开梯度消失大坑
王_teacher
博客等级 码龄9年 118粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值