[LSTM学习笔记7]How to Develop Encoder-Decoder LSTMs

基于LSTM encoder-decoder模型实现英文转中文的翻译机器 介绍了如何构建一个基于pytorch lstm的机器翻译模型。 阅读详情
一.结构

Encoder-Decoder LSTM是为了解决NLP问题开发的,在统计机器翻译领域展示出强大的性能。
在这里插入图片描述
这种架构常用于:

  • Machine Translation
  • Learning to Execute
  • Conversational Modeling
  • Movement Classification

示例:

model = Sequential()
model.add(LSTM(..., input_shape=(...)))
model.add(RepeatVector(...))
model.add(LSTM(..., return_sequences=True))
model.add(TimeDistributed(Dense(...)))

注意:
1.encoder的输出要求是固定大小的向量,代表了输入序列的内部状态,encoder LSTM的memory cells数目决定了向量的长度。
2.TimeDistributed封装使同样的输出层能被输出序列的每一个元素复用。
3.Encoder LSTM输出是2维,Decoder LSTM输入要求是3维(samples,steps,features),因此不能直接将其连接,需要使用RepeatVector层,将2D输入简单的复制多次转变为3维。

二.加法预测问题

1.问题描述:给定输出的两个字符,计算加法输出:

Input: [ '1' ,'0', '+' ,' 6' ]
Output: [ '1' ,' 6' ]

该问题是一个Seq2Seq问题:
在这里插入图片描述
为简化问题,将该问题分为以下几步:

  • Generate Sum Pairs
  • Integer to Padded Strings
  • Integer Encoded Sequence
  • One hot Encoded Sequences
  • Sequence Generation Pipeline
  • Decode Sequence

(1)Generate Sum Pairs


from random import seed
from random import randint

# generate lists of random integers and their sum
def random_sum_pairs(n_examples, n_numbers, largest):
    X, y = list(), list()
    for i in range(n_examples):
        in_pattern = [randint(1,largest) for _ in range (n_numbers)]
        out_pattern = sum (in_pattern)
        X.append(in_pattern)
        y.append(out_pattern)
    return X, y

#seed(1)
n_samples = 1
n_numbers = 2
largest = 10
# generate pairs
X, y = random_sum_pairs(n_samples, n_numbers, largest)
print (X, y)

输出:[[5, 10]] [15]

(2)Integer to Padded Strings

from math import ceil
from math import log10
# convert data to strings
def to_string(X, y, n_numbers, largest):
    #输入数字表达式转换为字符串的最大长度计算,考虑数字之间的加号
    #如n_numbers=3,largest=10,最大字符串长度为8[‘1’,‘0’,‘+’,‘1’,‘0’,‘+’,‘1’,‘0’],如果不满需要补足8位 
    max_length = n_numbers * ceil(log10(largest+1)) + n_numbers - 1
    Xstr = list()
    for pattern in X:
        strp ='+' .join([ str (n) for n in pattern])
        #填充空格符,以保证输入和输出长度相等,这里采用左侧填充,数据字符串在右侧
        strp ='' .join([' '  for _ in range(max_length- len (strp))]) + strp
        Xstr.append(strp)
        
    #输出数字表达式转换为字符串的最大长度计算,输出的结果中没有符号
    max_length = ceil(log10(n_numbers * (largest+1)))
    ystr = list()
    for pattern in y:
        strp = str(pattern)
        #填充空格符,以保证输入和输出长度相等,这里采用左侧填充,数据字符串在右侧
        strp ='' .join([' ' for _ in range(max_length- len (strp))]) + strp
        ystr.append(strp)
    return Xstr, ystr
seed(1)
n_samples = 1
n_numbers = 3
largest = 10
# generate pairs
X, y = random_sum_pairs(n_samples, n_numbers, largest)
print(X, y)
#print(len(X[0]))
# convert to strings
X, y = to_string(X, y, n_numbers, largest)
print(X, y)
#print(len(X[0]),len(y[0]))

输出:
在这里插入图片描述

(3)Integer encode strings

def integer_encode(X, y, alphabet):
    char_to_int = dict ((c, i) for i, c in enumerate (alphabet))
    Xenc = list()
    for pattern in X:
        integer_encoded = [char_to_int[char] for char in pattern]
        Xenc.append(integer_encoded)
    yenc = list()
    for pattern in y:
        integer_encoded = [char_to_int[char] for char in pattern]
        yenc.append(integer_encoded)
    return Xenc, yenc

seed(1)
n_samples = 1
n_numbers = 2
largest = 10
# generate pairs
X, y = random_sum_pairs(n_samples, n_numbers, largest)
print(X, y)
# convert to strings
X, y = to_string(X, y, n_numbers, largest)
print (X, y)
# integer encode
alphabet = ['0','1','2','3','4','5','6','7','8','9','+',' ']
X, y = integer_encode(X, y, alphabet)
print (X, y)

在这里插入图片描述
(4)one hot encode

def one_hot_encode(X, y, max_int):
    Xenc = list()
    for seq in X:
        pattern = list()
        for index in seq:
            vector = [0 for _ in range(max_int)]
            vector[index] = 1
            pattern.append(vector)
        Xenc.append(pattern)
    yenc = list()
    for seq in y:
        pattern = list()
        for index in seq:
            vector = [0 for _ in range(max_int)]
            vector[index] = 1
            pattern.append(vector)
        yenc.append(pattern)
    return Xenc, yenc

seed(1)
n_samples = 1
n_numbers = 2
largest = 10
# generate pairs
X, y = random_sum_pairs(n_samples, n_numbers, largest)
print (X, y)
# convert to strings
X, y = to_string(X, y, n_numbers, largest)
# integer encode
alphabet = ['0','1','2','3','4','5','6','7','8','9','+',' ']
X, y = integer_encode(X, y, alphabet)
print(X, y)
# one hot encode
X, y = one_hot_encode(X, y, len (alphabet))
print (X, y)

在这里插入图片描述
将以上过程封装为数据产生函数:

from numpy import array
# generate an encoded dataset
def generate_data(n_samples, n_numbers, largest, alphabet):
    # generate pairs
    X, y = random_sum_pairs(n_samples, n_numbers, largest)
    # convert to strings
    X, y = to_string(X, y, n_numbers, largest)
    # integer encode
    X, y = integer_encode(X, y, alphabet)
    # one hot encode
    X, y = one_hot_encode(X, y, len (alphabet))
    # return as NumPy arrays
    X, y = array(X), array(y)
    return X, y
    
# invert encoding
def invert(seq, alphabet):
    int_to_char = dict ((i, c) for i, c in enumerate (alphabet))
    strings = list()
    for pattern in seq:
        string = int_to_char[argmax(pattern)]
        strings.append(string)
    return ''.join(strings)

(5)定义模型

from numpy import argmax
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import TimeDistributed
from keras.layers import RepeatVector
# define LSTM
model = Sequential()
model.add(LSTM(75, input_shape=(n_in_seq_length, n_chars)))
model.add(RepeatVector(n_out_seq_length))
model.add(LSTM(50, return_sequences=True))
model.add(TimeDistributed(Dense(n_chars, activation='softmax')))
model.compile(loss='categorical_crossentropy' , optimizer='adam', metrics=['accuracy'])
print (model.summary())

在这里插入图片描述
(6)训练模型

# fit LSTM
X, y = generate_data(75000, n_terms, largest, alphabet)
model.fit(X, y, epochs=1, batch_size=32)

在这里插入图片描述
(7)评估模型

# evaluate LSTM
X, y = generate_data(100, n_terms, largest, alphabet)
loss, acc = model.evaluate(X, y, verbose=0)
print ('Loss : %f, Accuracy: %f' % (loss, acc*100))

在这里插入图片描述
(8)使用模型进行新数据预测

# predict
for _ in range(10):
    # generate an input- output pair
    X, y = generate_data(1, n_terms, largest, alphabet)
    # make prediction
    yhat = model.predict(X, verbose=0)
    # decode input, expected and predicted
    in_seq = invert(X[0], alphabet)
    out_seq = invert(y[0], alphabet)
    predicted = invert(yhat[0], alphabet)
    print( '网络输出为:% s = % s ( 正确答案为: % s )' % (in_seq, predicted, out_seq))

在这里插入图片描述

【2020人工智能培训课】笔记八:深度学习之RNN、LSTM、encoder-decoder模型 Gensim 工具包 Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。 它支持包括TF-IDF、LSA、LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 三大经典深度学习网络:CNN GAN RNN 语言模型与RNN 语言模型就是指给定一个一句话前面的部分,预测接下来最有可能的一个词是什么。 语言模型是对一种语言的特征进行建模,它有很多很多用处。 比如在语音. 阅读详情

相关推荐

LLM架构解析:编码器-解码器架构(Encoder-Decoder Architecture)(第四部分)—— 从基础原理到实践应用的深度探索

本文围绕编码器-解码器架构展开。先介绍其产生背景,源于处理序列数据挑战,核心组件为编码器和解码器。阐述其在机器翻译、图像字幕生成等多领域应用,分析了缺点如记忆有限、训练困难。提及改进方法,如添加嵌入层、使用深度LSTM等。还通过PyTorch实践展示了构建Seq2Seq模型过程,最后以问答形式巩固对该架构相关知识的理解。

硅基创想家的博客 2250

深度学习笔记(六):Encoder-Decoder模型和Attention模型

这两天在看attention模型,看了下知乎上的几个回答,很多人都推荐了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感觉非常的不错,里面还大概阐述了encoder-decoder(编码)模型的概念,以及传统的RNN实现。然后还阐述了自己的attention模型。我看了一下,自己做了一些摘

Multiangle's Notepad 12万+

DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(2)——CRNN+CTC_Loss理论

文章目录一、CRNN(卷积递归神经网络)1.1 CRNN介绍与网络结构1.1.1 网络结构二、网络结构详解2.1 CNN2.2 Map-to-Sequence2.3 RNN2.3 CTC Loss2.3.1 序列合并机制2.3.2 训练阶段2.3.3 划分标准2.3.4 CRNN总结结 一、CRNN(卷积递归神经网络) 1.1 CRNN介绍与网络结构 CRNN模型,即将CNN与RNN网络结合,共同训练。主要用于在一定程度上实现端到端(end-to-end)地对不定长的文本序列进行识别,不用先对单个文字进行切

wa1tzy的博客 3503

Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案

1.RNN Encoder-Decoder      所谓的Sequence2Sequence主要是泛指一些Sequence到Sequence的映射问题,Sequence在这里可以理解为一个字符串序列 / 图像序列(视频),当我们在给定一个字符串序列后,希望得到与之对应的字符串序列(如 翻译、如语义对应的)时,这个任务就可以称为Sequence2Sequence了。       在现在的深度学习领...

沈春旭的博客 8707

encoder-decoder-lstm:使用编解码器LSTM进行序列预测

编码-解码器-lstm 使用keras,numpy和panda的LSTM模型进行序列到序列的预测。 笔记 该项目是使用PyScaffold 3.0.3设置的。 有关PyScaffold的详细信息和使用信息,请参见 。

解密微信DAT图片:一键转换JPG/PNG/GIF的实用指南

本文详细解析微信DAT图片的加密机制及转换方法,提供从定位文件到使用WeijieSoft工具一键转换JPG/PNG/GIF的完整指南。涵盖新旧版微信存储路径差异、批量处理技巧及常见问题解决方案,帮助用户高效恢复重要图片并释放存储空间。

weixin_29305337的博客 2829

生成式LSTM网络,Encoder-Decoder LSTM网络,CNN LSTM(LRCN)网络建模介绍——长短期记忆(LSTM)系列_LSTM的建模方法(1)

导读 文中介绍了三种LSTM的建模应用,分别是生成式LSTM网络,Encoder-Decoder LSTM网络,CNN LSTM(LRCN)网络。 大致介绍了一下每种网络的建模方法和应用场景,这里仅做了解即可 原文链接: 生成性长短期记忆网络 编码器 - 解码器长短期存储器网络 CNN LSTM网络 生成式长短期记忆网络的介绍 生成模型 LSTM可以用作生成模型。 给定大量序列数...

AI量化交易实验室 1万+

Cube.js 安装避坑指南:从零到一键启动

本文是一份详细的Cube.js安装避坑指南,旨在帮助开发者从零开始顺利启动Cube.js。文章重点强调了安装前的环境准备,包括Node.js版本、包管理工具和项目路径等关键“地基”,并深入解析了使用npx安装的优势、数据库类型选择以及数据库连接配置的核心步骤与常见陷阱,确保您能高效完成安装并成功启动服务。

weixin_29218509的博客 429

Encoder-Decoder LSTM Model模型对家庭用电进行多步时间序列预测

在本节中,我们可以更新普通的LSTM以使用编解码器模型。这意味着模型不会直接输出向量序列。相反,该模型将由两个子模型组成,用于读取和编码输入序列的编码器,以及读取编码的输入序列并对输出序列中的每个元素进行一步预测的解码器。这种差别很细微,因为实际上这两种方法都可以预测序列输出。重要的不同之处在于,解码器使用了LSTM模型,这使得解码器既可以知道前一天在序列中预测了什么,又可以在输出序列时积累内部状...

颠沛的小丸子 3501

物理学建模及仿真平台Chrono安装

Chrono是一个基于物理学的建模和仿真基础设施,它是在C++中实现的独立于平台的开源设计。一个projectchrono库可以嵌入到一个软件项目中,例如在可变形地形上运行的轮式和履带式车辆、机器人、机械电子系统、顺应性机构和流体固体相互作用现象。系统可以由刚性和柔性/顺应性部件组成,并带有约束、电机和接触;部件可以具有三维形状,以便进行碰撞检测。然而安装还是出现了一些问题,所以在此总结。已经装好visual studio。

Already8888的博客 6500

SpringBoot项目整合达梦数据库(MYSQL 转换 达梦数据库)

注意:当迁移过程中出现下面问题时,如有触发器或者外键,需要先关掉触发器和外键,然后进行迁移,不然会导致迁移失败。(2)dm.ini修改【#compatibility】的【COMPATIBLE_MODE】=4。3、添加用户:如果导入的DM数据库需要和MYSQL的用户一样,添加ROOT用户。方法一:服务器配置:设置系统兼容性(DM控制台工具),兼容MySQL。服务器配置又该有两种方式:①DM控制台工具修改;MYSQL的数据表转换成DM的数据表时,点击转换按钮。在这里操作:MYSQL数据库迁移至DM数据库。

m0_74824635的博客 2013

LSTM 07:Keras实现Encoder-Decoder LSTM

本文介绍了编码器-解码器LSTM架构以及如何在Keras中实现它。

全性保真,不以物累形。 7971

FAST-LIO2:论文和算法解析

本文介绍了FAST-LIO2算法:一种快速、鲁棒、通用的激光雷达-惯性里程计框架。FAST-LIO2基于高效的紧密耦合迭代卡尔曼滤波器,具有两个关键的新颖之处,可实现快速,稳健和准确的激光雷达导航(和测绘)。第一种方法是直接将原始点注册到地图上然后更新地图,而不提取特征。这样可以利用环境中的细微特征,从而提高准确性。消除手工设计的特征提取模块,也使其能够适应不同扫描模式的新兴激光雷达;

超爱吃小蛋糕的66的博客 1万+

pytorch 实现 LSTM AutoEncoder 与案例

文章目录LSTM AutoEncoder简介LSTM AutoEncoder 实现基本LSTM AutoEncoder网络结构LSTM+Fc AutoEncoder网络结构案例代码 LSTM AutoEncoder简介 基础的AutoEncoder可以参考:https://blog.youkuaiyun.com/weixin_35757704/article/details/118457110 而LSTM AutoEncoder是将原始的全连接变成了LSTM,然后构造出来的AutoEncoder模型,输入与输出是一样的

呆萌的代Ma 9335

关键!C#工业上位机界面设计终极指南:WinForm/WPF怎么选?【工业实战完整版,无废话选型+避坑+落地技巧】

工业上位机UI选型指南:WinForm与WPF核心对比 摘要: 本文基于工业实战视角,对比WinForm与WPF在工业上位机开发中的适用性。WinForm凭借GDI+原生渲染、极致兼容性(完美支持Win7/XP)、低资源占用和硬件底层调用优势,成为老旧工控机、简单监控系统和7×24小时运行设备的首选。WPF则依托DirectX硬件加速、MVVM架构和强大可视化能力,更适合复杂可视化大屏、3D模拟等高端场景及需要长期迭代的大型项目。核心选型原则是:优先考虑稳定性与兼容性,WinForm解决"能不能用

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 727

3D视觉实战之双目相机物体尺寸实时测量

视差图滤波能够将稀疏视差转变为稠密视差,并在一定程度上降低视差图噪声,改善视差图的视觉效果,但是比较依赖初始视差图的质量。的目标是获得左右两个相机的内参、外参和畸变系数,其中内参包括左右相机的fx,fy,cx,cy,外参包括左相机相对于右相机的旋转矩阵和平移向量,畸变系数包括径向畸变系数(k1, k2,k3)和切向畸变系数(p1,p2)以及其他一些畸变类型。:相比于昂贵的专业设备,便宜的双目摄像头可以显著降低成本,使得实时点云生成技术更加普及和经济实惠。

qq_53545309的博客 2098

Encoder+Decoder+LSTM 预测图像帧

Git代码地址:https://github.com/wdf19961118/LSTM 问题描述: 在这里基于卷积循环神经网络,做一个图像序列的预测。输入连续的16张图像帧,图像大小(3,128,128)。利用卷积网络对每连续的16张图像进行Encoder特征提取,然后将提取的特征序列输入到循环神经网络(LSTM)中,之后通过Decoder反卷积成原图像大小的troch(3,12,8,...

PMPWDF的博客 1万+

7.91版本unidbg调用方式

【代码】xhs最新7.91版本unidbg调用方式。

Codeooo 博客 1106

GRU,LSTM,encoder-decoder架构,seq2seq的相关概念

GRU模型有专门的机制来确定应该何时更新隐状态,以及应该何时重置隐状态。这些机制是可学习的。计算门控循环单元模型中的隐状态。

qq_46348508的博客 2173

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

10分钟理解RNN、LSTM、Transformer结构原理!

RNN、LSTM、Transformer 经典结构解析!

不积跬步,无以至千里! 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

论文学习——LSTM Encoder-Decoder方法预测设备剩余使用寿命

文章目录1 摘要2 结语3 引言 写在前面:《交通运输工程学报》;主办单位:长安大学;双月刊;中文核心 1 摘要 方法: LSTM Encoder- Decoder 数据集:C-MAPSS 过程:① 对获取的传感器数据进行预处理,利用LSTM-Encoder 进行编码得到了设备状态的特征信息;② 利用 LSTM Decoder 进行解码,利用解码后的信息预测 “剩余使用寿命” 对比试验: LSTM D-LSTM 2 结语 通过将Encoder Decoder 框架与LSTM 相结合,可以得到更加准确

#仙女不扎马尾#的博客 2197

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【亲测免费】 LSTM Encoder-Decoder 项目使用教程

LSTM Encoder-Decoder 项目使用教程 1. 项目目录结构及介绍 LSTM_encoder_decoder/ ├── data/ │ ├── processed/ │ └── raw/ ├── models/ │ ├── __init__.py │ ├── encoder.py │ ├── decoder.py │ └── encoder_decoder.p...

gitblog_00569的博客 989

Encoder-Decoder扩展学习笔记

来源网络资源整合,如有侵权联系删除

m0_59605893的博客 1062

神经网络算法 :一文搞懂 Encoder-Decoder(编码器-解码器)

本文将从Encoder-Decoder的本质、Encoder-Decoder的原理、Encoder-Decoder的应用三个方面,带您一文搞懂Encoder-Decoder(编码器-解码器)。

2401_84033492的博客 5万+

轰炸理解深度学习里面的encoder-decoder模型

微信公众号 Encoder-Decoder(编码-解码)是深度学习中非常常见的一个模型框架,比如无监督算法的auto-encoding就是用编码-解码的结构设计并训练的;比如这两年比较热的image caption的应用,就是CNN-RNN的编码-解码框架;再比如神经网络机器翻译NMT模型,往往就是LSTM-LSTM的编码-解码框架。因此,准确的说,Encoder-Decoder并不是一个具体...

Microstrong 5万+

Seq2Seq(keras)的理解:关于encoder_model和decoder_model

Seq2Seq_keras:关于encoder_model和decoder_model一、三个model(一)Seq2Seq之前的keras model:1、创建模型2、模型预测(二)Seq2Seq的keras model二、再次遇见seq2seq难点一:lstm难点二:return_sequences和return_state难点三:三个模型三、seq2seq全部代码 一、三个model (一)Seq2Seq之前的keras model: 1、创建模型 # 多层感知机(MLP)模型 from keras.

python__reported的博客 2187
上一篇: [LSTM学习笔记6]How to Develop Stacked CNN LSTMs
下一篇: [LSTM学习笔记8]How to Develop Bidirectional LSTMs
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值