encode-decode结构

encode-decode结构encode的输入是变长的序列向量,每个向量之间会在batch内填充为固定长度,神经网络限制,不能输入变长的向量。encode输出固定长度的向量,但序列数量和输入数量保持不变,也就是一个输入产生一个输出。每个输出之间是独立的。encode的网络可以不固定,比如常见nlp任务用rnn,。encode将可变序列编码为固定状态,decode将固定状态输入映射为其它可变序列。decode的网络可以不固定,其中ctc结合search策略也可以用来做decode。通用的“编码器-解码器”接口定义:fro.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在这里插入图片描述
encode的输入是变长的序列向量,每个向量之间会在batch内填充为固定长度,神经网络限制,不能输入变长的向量。
encode输出固定长度的向量,但序列数量和输入数量保持不变,也就是一个输入产生一个输出。每个输出之间是独立的。
encode的网络可以不固定,比如常见nlp任务用rnn,。
encode将可变序列编码为固定状态,decode将固定状态输入映射为其它可变序列。
decode的网络可以不固定,其中ctc 结合search策略也可以用来做decode。

通用的“编码器-解码器”接口定义:

from torch import nn
#在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。任何继承这个Encoder基类的模型将完成代码实现。
class Encoder(nn.Module):
    def __init__(self, **kwargs) -> None:
        super(Encoder,self).__init__(**kwargs)

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

class Decoder(nn.Module):
    def __init__(self, **kwargs):
        super(Decoder, self).__init__(**kwargs)
    def init_state(self, enc_outputs, *args):
        raise NotImplementedError
    def forard(self, X, state):
        raise NotImplementedError


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)

模板解释

  • encoder
    在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。任何继承这个Encoder基类的模型将完成代码实现

  • decoder

解码器接口中,我们新增一个init_state函数用于将编码器的输出(enc_outputs)转换为编码后的状态。注意,此步骤可能需要额外的输入,例如:输入序列的有效长度,逐个生成长度可变的标记序列,解码器在每个时间步都可以将输入(例如:在前一时间步生成的标记)和编码后的状态映射成当前时间步的输出标记。

  • encoder-decoder
    最后,“编码器-解码器”结构包含了一个编码器和一个解码器,并且还包含了可选的额外的参数。在前向传播中,编码器的输出产生编码状态,解码器将使用该状态作为其输入之一。

总结

  • “编码器-解码器”结构可以处理长度可变的序列作为输入和输出,因此适用于机器翻译,语音识别等序列转换问题。
  • 编码器将长度可变的序列作为输入,并将其转换为具有形状固定的状态。
  • 解码器将形状固定的编码状态映射为长度可变的序列。

参考:动手学深度学习-编解码结构

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185012.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • burpsuite简单抓包教程[通俗易懂]

    burpsuite简单抓包教程[通俗易懂]一.配置浏览器(以火狐为例)1.打开菜单,找到选项,点击翻到最下面点击设置,将配置的代理服务器改为手动代理配置,HTTP代理设为127.0.0.1,端口设置为8080(为了burpsuite能截到浏览器发送出来的请求),点击确定。二.burpsuite的设置点击proxy选择Options观察图中的IP地址及端口,如果不是127.0.0.1:8080,则点击add,添加端口和IP地…

    2022年6月14日
    122
  • Java基础算法详解

    Java基础算法详解查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会…

    2022年7月8日
    15
  • 《TCP/IP具体解释卷2:实现》笔记–IP:网际协议

    《TCP/IP具体解释卷2:实现》笔记–IP:网际协议

    2022年2月5日
    53
  • wing是什么_计算二叉树的深度和叶子结点数

    wing是什么_计算二叉树的深度和叶子结点数设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1,2,

    2022年8月9日
    6
  • iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo[通俗易懂]

    iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo[通俗易懂]iOS开发中常用的动画(定点缩放弹窗)的应用场景:>1、会员详情的右侧下拉操作菜单>2、浏览器的右侧下拉菜单demo下载地址:https://download.csdn.net/download/u011018979/16092830

    2022年10月8日
    0
  • vue可以和jquery一起用吗_项目中vue和jquery一起如何使用

    vue可以和jquery一起用吗_项目中vue和jquery一起如何使用拿起html的时候,在数据处理上,疯狂怀念数据双向绑定,vue又成了我的必选项,但是有些业务场景其实并不适用vue,所以最终技术选型为vue+jquery混合使用,结合两边的优点,大大提高开发效率。vue和jquery同时引入的时候,jquery操作一定要放在vue后面,要等DOM渲染完成,jquery才能进行DOM事件操作。那么vue+jquery应该如何使用呢?一、首先引入vue文件(cdn或者下载到本地都行),参考vue官方连接https://cn.vuejs.org/v2/guide/ins

    2022年10月15日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号