首页 > 其他分享 >机器学习笔记:编码器与解码器

机器学习笔记:编码器与解码器

时间:2024-08-09 15:52:31浏览次数:12  
标签:__ 编码器 self 笔记 init 解码器 def

目录

介绍

组成结构

代码实现

编码器

解码器

合并编码器-解码器

思考


介绍

在机器翻译中,输入的序列与输出的序列经常是长度不相等的序列,此时,像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此,我们引入一个新的结构,称之为“编码器-解码器”(Encoder-Decoder),通过这种结构,来实现输入输出长度不均等的问题。

在这一节内容,只介绍这一结构的总体架构,不进行具体实践。

组成结构

编码器-解码器结构图

如图所示,本结构主要由一个编码器和一个解码器组成,首先输入源字符串序列,通过编码器进行编码,输出一个状态。随后,解码器对状态进行解码,根据状态进行输出,输出结果即为翻译所得目标语言字符串。解码的这个过程还需要其他输入,比如源字符串序列的有效长度(valid_length)。

代码实现

编码器和解码器的代码都由抽象类进行实现。

编码器

编码器类的前向计算为抽象方法,返回NotImplementedError。具体使用时需要重写该方法。

from mxnet.gluon import nn

class Encoder(nn.Block):
    def __init__(self, **kwargs):
        super(Encoder, self).__init__(**kwargs)

    def forward(self, X, *args):
        raise NotImplementedError

解码器

解码器有前向计算和状态两个抽象函数。init_state()用于将编码器的输出(enc_outputs)转换为编码后的状态。*args表明其可能需要额外的输入,这有可能是输入序列的有效长度(valid_length)。

class Decoder(nn.Block):
    def __init__(self, **kwargs):
        super(Decoder, self).__init__(**kwargs)

    def init_state(self, enc_outputs, *args):
        raise NotImplementedError

    def forward(self, X, state):
        raise NotImplementedError

合并编码器-解码器

显然,还是一个抽象类,只不过将前两个代码给合并了。

总而言之,“编码器-解码器”架构包含了一个编码器和一个解码器, 并且还拥有可选的额外的参数。 在前向传播中,编码器的输出用于生成编码状态, 这个状态又被解码器作为其输入的一部分。

#@save
class EncoderDecoder(nn.Block):

    def __init__(self, encoder, decoder, **kwargs):
        super(EncoderDecoder, self).__init__(**kwargs)
        self.encoder = encoder
        self.decoder = decoder

    def forward(self, enc_X, dec_X, *args):
        enc_outputs = self.encoder(enc_X, *args)
        dec_state = self.decoder.init_state(enc_outputs, *args)
        return self.decoder(dec_X, dec_state)

思考

  1. 假设我们使用神经网络来实现“编码器-解码器”架构,那么编码器和解码器必须是同一类型的神经网络吗?

  2. 除了机器翻译,还有其它可以适用于”编码器-解码器“架构的应用吗?

标签:__,编码器,self,笔记,init,解码器,def
From: https://blog.csdn.net/2301_79335566/article/details/141063478

相关文章

  • 医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割
    1、TransUnet介绍TransUnet是一种用于医学图像分割的深度学习模型。它是基于Transformer模型的图像分割方法,由AI研究公司HuggingFace在2021年提出。医学图像分割是一项重要的任务,旨在将医学图像中的不同结构和区域分离出来,以便医生可以更好地诊断和治疗疾病。传统的医学......
  • Redis笔记
    Redis(Remotedictionaryserver)开源的基于内存的数据存储系统可用于数据库、缓存、队列等各种场景。支持key-value的储存形式,底层是用C语言编写的。基于key-value形式的数据字典,结构非常简单,没有数据表的概念,之间用键值对的形式完成数据的管理。SQL NoSQL数据结构结构......
  • 网课-组合数学学习笔记2
    插板法\(n\)个无标号物品分成\(m\)个有标号组。非空:\[\dbinom{n-1}{m-1}\]空:\[\dbinom{n+m-1}{m-1}\]构造一一对应的转化:现有两个集合\(A,B\)。如果所有\(A\)中的元素都能够映射到\(B\)中,则\(|A|\le|B|\);反之,如果\(B\)能映射到\(A\),则\(|B|\le|A|\)......
  • Linux源码阅读笔记20-PCI设备驱动详解
    PCI基础PCI总线为高性能局部总线,主要解决外部设备之间以及外部设备与主机之间高速数据传输。在数字图形、图像等处理,以及告诉实时数据采集与处理等队数据传输速率要求高的应用中,采用PCI总线进行数据传输。PCI规范能够实现32位并行数据传输,工作频率为33MHz或66MHz,最大吞吐率......
  • 开关电源设计学习笔记
    在学习开关电源设计之前,我们应该思考一下学习的初心和目标,初心是能在你想要放弃的时候坚持下去的动力,目标是怎样才能算完成了对于硬件的认识和学习,是对于学习成果的检验。我们所学的知识想要转化为技能和能力都需要在实践中进行的,所以,在学习中我们的目标设立在运用所学知识设......
  • Linux-USB驱动笔记-Gadget Function驱动
    1、前言在Linux-USB驱动笔记(四)–USB整体框架中有説到GadgetFunction驱动,下面我们来具体看一下。GadgetFunction就是指设备的功能,比如作为U盘,需要文件存储的功能,则需要FileStorage驱动,这个驱动也称为Function驱动。2、GadgetFunction驱动Function驱动只是利用通用的API,并......
  • C语言学习笔记 Day8(函数)
    Day8 内容梳理:目录Chapter6 函数6.0概述6.1 定义函数6.2 调用函数(1)实参&形参(2)调用无参函数(3)调用有参函数6.3 声明函数6.4 终止函数(exit&return)6.5多文件编程(1)设置主文件(2)创建头文件(3)导入头文件Chapter6 函数6.0概述函数的分类(2种):   ......
  • 计算机网络考研手写笔记_物理层
    1通信基础概念1)信源、信宿、信号、信道2)码元3)速率4)噪声2编码和调制3数据转为信号4传输介质1)导向型(双绞线、同轴电缆、光纤)2)非导向型(无线电波、微波通信)3)物理层接口的特性(机械、电气、功能、过程)5物理层设备1)中继器2)集线器......
  • Linux-USB驱动笔记--设备控制器(UDC)驱动
    1、前言在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下。2、设备控制器(UDC)USB设备控制器(UDC)驱动指的是作为其他USB主机控制器的USB硬件设备上的底层控制器驱动。该硬件和驱动负责将一个USB设备依附于一个USB主机控制器上。UDC驱......
  • 做题笔记(二)
    [CSP-S2023]消消乐题目传送门[CSP-S2023]消消乐思路考虑DP。显然,设\(f_i\)表示以位置\(i\)结尾的可消除序列的个数,我们对每一个可消除序列考虑模型,大概就是这个样子:\(\text{a}\cdots\text{ab}\cdots\text{b}\)。那么我们当前位置为\(i\),前一个可以与\(i\)匹配的......