首页 > 其他分享 >《动手学深度学习 Pytorch版》 9.6 编码器-解码器架构

《动手学深度学习 Pytorch版》 9.6 编码器-解码器架构

时间:2023-10-20 11:59:47浏览次数:39  
标签:__ 编码器 self Pytorch init 解码器 decoder

为了处理这种长度可变的输入和输出, 可以设计一个包含两个主要组件的编码器-解码器(encoder-decoder)架构:

  • 编码器(encoder):它接受一个长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。

  • 解码器(decoder):它将固定形状的编码状态映射到长度可变的序列。

image

9.6.1 编码器

编码器接口仅指定长度可变的序列作为编码器的输入 X。代码实现需要由继承这个Encoder基类的模型完成。

from torch import nn
#@save
class Encoder(nn.Module):
    """编码器-解码器架构的基本编码器接口"""
    def __init__(self, **kwargs):
        super(Encoder, self).__init__(**kwargs)

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

9.6.2 解码器

在下面的解码器接口中新增的 init_state 函数用于将编码器的输出(enc_outputs)转换为编码后的状态。

为了逐个地生成长度可变的词元序列,解码器在每个时间步都会将输入(例如:在前一时间步生成的词元)和编码后的状态映射成当前时间步的输出词元。

#@save
class Decoder(nn.Module):
    """编码器-解码器架构的基本解码器接口"""
    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

9.6.3 合并编码器和解码器

#@save
class EncoderDecoder(nn.Module):
    """编码器-解码器架构的基类"""
    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,Pytorch,init,解码器,decoder
From: https://www.cnblogs.com/AncilunKiang/p/17776733.html

相关文章

  • 《动手学深度学习 Pytorch版》 9.7 序列到序列学习(seq2seq)
    循环神经网络编码器使用长度可变的序列作为输入,将其编码到循环神经网络编码器固定形状的隐状态中。为了连续生成输出序列的词元,独立的循环神经网络解码器是基于输入序列的编码信息和输出序列已经看见的或者生成的词元来预测下一个词元。要点:“<eos>”表示序列结束词元,一旦输......
  • 使用Pytorch Geometric 进行链接预测代码示例
    PyTorchGeometric(PyG)是构建图神经网络模型和实验各种图卷积的主要工具。在本文中我们将通过链接预测来对其进行介绍。链接预测答了一个问题:哪两个节点应该相互链接?我们将通过执行“转换分割”,为建模准备数据。为批处理准备专用的图数据加载器。在TorchGeometric中构建一个......
  • PyTorch大更新,编译代码速度暴增35倍!视觉模型一键部署,头显Quest 3可用
    前言 最近,在Pytorch发布会上,发布移动端Pytorch解决方案ExecuTorch,实现在移动端设备上大范围地部署AI工具,并推出最新版本Pytorch2.1,推理速度大幅提升。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典......
  • 《动手学深度学习 Pytorch版》 9.5 机器翻译与数据集
    机器翻译(machinetranslation)指的是将序列从一种语言自动翻译成另一种语言,基于神经网络的方法通常被称为神经机器翻译(neuralmachinetranslation)。importosimporttorchfromd2limporttorchasd2l9.5.1下载和预处理数据集“Tab-delimitedBilingualSentencePairs”......
  • 《动手学深度学习 Pytorch版》 9.4 双向循环神经网络
    之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模,然而也存在需要后文预测前文的情况。9.4.1隐马尔可夫模型中的动态规划数学推导太复杂了,略。9.4.2双向模型双向循环神经网络(bidirectionalRNNs)添加了反向传递信息的隐藏层,以便更灵活地处理此类信息。9......
  • LSTM-CRF模型详解和Pytorch代码实现
    在快速发展的自然语言处理领域,Transformers已经成为主导模型,在广泛的序列建模任务中表现出卓越的性能,包括词性标记、命名实体识别和分块。在Transformers之前,条件随机场(CRFs)是序列建模的首选工具,特别是线性链CRFs,它将序列建模为有向图,而CRFs更普遍地可以用于任意图。本文中crf......
  • 《动手学深度学习 Pytorch版》 9.2 长短期记忆网络(LSTM)
    解决隐变量模型长期信息保存和短期输入缺失问题的最早方法之一是长短期存储器(longshort-termmemory,LSTM)。它与门控循环单元有许多一样的属性。长短期记忆网络的设计比门控循环单元稍微复杂一些,却比门控循环单元早诞生了近20年。9.2.1门控记忆元为了记录附加的信息,长短期记......
  • Pytorch-(三)张量
    1、张量支持的数据类型  (1)获取/设置Pytorch默认的张量类型importtorch#2、张量Tensor#2.1、获取/设置Pytorch的默认类型defDefaultType_func():dtype=torch.tensor([1,2,3.4]).dtypeprint("张量Tensor的默认类型为:",dtype)print("") 2、张量生成......
  • pytorch 量化相关参考
    ref:https://blog.csdn.net/znsoft/article/details/130788437importtorchimporttorch.quantizationclassM(torch.nn.Module):def__init__(self):super(M,self).__init__()self.quant=torch.quantization.QuantStub()#静态量化时量化桩......
  • pytorch一些准备工作
    conda常用指令激活以及退出当前虚拟环境condaactivatexxxcondadeactivate创建以及删除condacreate-nxxxpython=3.8condaremove-nxxx查看当前虚拟环境有哪些condainfo--envs查看当前环境中有哪些库condalist安装与更新包condainstallnump......