基于keras的seq2seq中英文翻译实现

语音翻译常用数据集 语音翻译常用数据集 Fisher and CALLHOME Spanish-English Speech Translation 【基本信息】 Fisher and CALLHOME Spanish-English Speech Translation数据集是由约翰霍普金斯大学开发的,包含英语参考翻译和语音识别器各种形式的输出,补充了LDC Fisher Spanish (LDC2010T04) 和CALLHOME Spanish音频和转录版本 (LDC96T17)。两者一起组成了一个四向平行的数据集, 阅读详情
AI摘要

本文介绍Seq2Seq模型原理及其实现,通过中英文翻译实战案例,详细讲解数据处理、模型搭建与评估方法。

本文详细代码见https://github.com/pjgao/seq2seq_keras/blob/master/seq2seq_keras.ipynb

1. seq2seq概述

1.1 seq2seq简介

seq2seq,全称Sequence to sequence,是RNN结构的一个变形,来自于Cho 在 2014 年提出的 Encoder–Decoder 结构,https://arxiv.org/pdf/1406.1078.pdf。
传统的RNN输入和输出长度要一致,而seq2seq在RNN的基础上进行改进,实现了变长序列的输入和输出,广泛的应用在了机器翻译、对话系统、文本摘要等领域。
【seq2seq同时可作为一种特征提取器来提取特征,可参考论文A method for estimating process maliciousness with Seq2Seq model】

seq2seq与Encoder-Decoder:
Encoder-decoder是模拟人类认知的一个过程, encoder记忆和理解信息,并提炼信息通常会形成一个低维向量,decoder回忆与运用这些信息,再将加工后的信息输出来。
Encoder和Decoder部分可以是任意的文字,语音,图像,视频数据,模型可以采用CNN,RNN,Bi-RNN、LSTM、GRU等等。当encoder和decoder处理的都是序列时称为seq2seq。

1.2 seq2seq结构

seq2seq由encoder和decoder组成。
encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码,如下图,获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。
decoder则负责根据语义向量生成指定的序列,这个过程也称为解码。如下图,这是一种简单的seq2seq,最简单的方式是将encoder得到的语义变量作为初始状态输入到decoder的RNN中,得到输出序列。可以看到上一时刻的输出会作为当前时刻的输入,而且其中语义向量C只作为初始状态参与运算,后面的运算都与语义向量C无关。
这里写图片描述

2. 中英文翻译实战

本文使用中英文翻译数据集,来实现字符级的seq2seq模型的训练。
该文件来自于http://www.manythings.org/anki/,包含了20133条中英文翻译。
这里写图片描述

2.1 数据处理

首先要将数据处理成Keras中模型接受的三维向量。这里需要处理3个向量,分别是encoder的输入encoder_input,decoder的输入和输出decoder_input, decoder_output

 #读取cmn-eng.txt文件
data_path = 'data/cmn.txt'
df = pd.read_table(data_path,header=None).iloc[:NUM_SAMPLES,:,]
df.columns=['inputs','targets']
#讲每句中文句首加上'\t'作为起始标志,句末加上'\n'作为终止标志
df['targets'] = df['targets'].apply(lambda x: '\t'+x+'\n')

input_texts = df.inputs.values.tolist()#英文句子列表
target_texts = df.targets.values.tolist()#中文句子列表

#确定中英文各自包含的字符。df.unique()直接取sum可将unique数组中的各个句子拼接成一个长句子
input_characters = sorted(list(set(df.inputs.unique().sum())))
target_characters = sorted(list(set(df.targets.unique().sum())))

每条句子经过对字母转换成one-hot编码后,生成了LSTM需要的三维输入[n_samples, timestamp, one-hot feature]

#encoder输入、decoder输入输出初始化为三维向量
encoder_input = np.zeros((NUM_SAMPLES,INUPT_LENGTH,INPUT_FEATURE_LENGTH))
decoder_input = np.zeros((NUM_SAMPLES,OUTPUT_LENGTH,OUTPUT_FEATURE_LENGTH))
decoder_output = np.zeros((NUM_SAMPLES,OUTPUT_LENGTH,OUTPUT_FEATURE_LENGTH))

其中:

  • NUM_SAMPLES,样本条数,这里是输入的句子条数
  • INPUT_LENGTH,输入数据的时刻t的长度,这里为最长的英文句子长度
  • OUTPUT_LENGTH,输出数据的时刻t的长度,这里为最长的中文句子长度
  • INPUT_FEATURE_LENGTH,每个时刻进入encoder的lstm单元的数据 xt x t 的维度,这里为英文中出现的字符数
  • OUTPUT_FEATURE_LENGTH,每个时刻进入decoder的lstm单元的数据 xt x t 的维度,这里为中文中出现的字符数

对句子进行字符级one-hot编码,将输入输出数据向量化:


#encoder的输入向量one-hot
for seq_index,seq in enumerate(input_texts):
    for char_index, char in enumerate(seq):
        encoder_input[seq_index,char_index,input_dict[char]] = 1
#decoder的输入输出向量one-hot,训练模型时decoder的输入要比输出晚一个时间步,这样才能对输出监督
for seq_index,seq in enumerate(target_texts):
    for char_index,char in enumerate(seq):
        decoder_input[seq_index,char_index,target_dict[char]] = 1.0
        if char_index > 0:
            decoder_output[seq_index,char_index-1,target_dict[char]] = 1.0

这里,查看获得的三个向量如下:

In[0]:  ''.join([input_dict_reverse[np.argmax(i)] for i in encoder_input[0] if max(i) !=0])
Out[0]: 'Hi.'

In[1]:  ''.join([input_dict_reverse[np.argmax(i)] for i in decoder_output[0] if max(i) !=0])
Out[1]: '嗨。\n'

In[2]:  ''.join([input_dict_reverse[np.argmax(i)] for i in decoder_input[0] if max(i) !=0])
Out[2]: '\t嗨。\n'

其中input_dict和target_dict为中英文字符与其索引的对应词典;input_dict_reverse和target_dict_reverse与之相反,索引为键字符为值:

input_dict = {char:index for index,char in enumerate(input_characters)}
input_dict_reverse = {index:char for index,char in enumerate(input_characters)}
target_dict = {char:index for index,char in enumerate(target_characters)}
target_dict_reverse = {index:char for index,char in enumerate(target_characters)}

2.2 encoder-decoder模型搭建

我们预测过程分为训练阶段和推理阶段,模型也分为训练模型和推断模型,这两个模型encoder之间deocder之间权重共享。
为什么要这么划分的?我们仔细考虑训练过程,会发现训练阶段和预测阶段的差异。
在训练阶段,encoder的输入为time series数据,输出为最终的隐状态,decoder的输出应该是target序列。为了有监督的训练,decoder输入应该是比输入晚一个时间步,这样在预测时才能准确的将下一个时刻的数据预测出来。
在训练阶段,每一时刻decoder的输入包含了上一时刻单元的状态 ht−1 h t − 1 和 ct−1 c t − 1 ,输出则包含了本时刻的状态 h h 和c以及经过全连接层之后的输出数据。
训练时的流程:
这里写图片描述
预测时的流程:
这里写图片描述

2.2.1 用于训练的模型


    #encoder
    encoder_input = Input(shape = (None, n_input))
    #encoder输入维度n_input为每个时间步的输入xt的维度,这里是用来one-hot的英文字符数
    encoder = LSTM(n_units, return_state=True)
    #n_units为LSTM单元中每个门的神经元的个数,return_state设为True时才会返回最后时刻的状态h,c(详见参考文献5,6)
    _,encoder_h,encoder_c = encoder(encoder_input)
    encoder_state = [encoder_h,encoder_c]
    #保留下来encoder的末状态作为decoder的初始状态

    #decoder
    decoder_input = Input(shape = (None, n_output))
    #decoder的输入维度为中文字符数
    decoder = LSTM(n_units,return_sequences=True, return_state=True)
    #训练模型时需要decoder的输出序列来与结果对比优化,故return_sequences也要设为True
    decoder_output, _, _ = decoder(decoder_input,initial_state=encoder_state)
    #在训练阶段只需要用到decoder的输出序列,不需要用最终状态h.c
    decoder_dense = Dense(n_output,activation='softmax')
    decoder_output = decoder_dense(decoder_output)
    #输出序列经过全连接层得到结果

    #生成的训练模型
    model = Model([encoder_input,decoder_input],decoder_output)
    #第一个参数为训练模型的输入,包含了encoder和decoder的输入,第二个参数为模型的输出,包含了decoder的输出    

训练模型:
其中英文字符(含数字和符号)共有73个,中文中字符(含数字和符号)共有2623个。
训练模型

2.2.2 用于推理的模型

 #推断模型-encoder,预测时对序列predict,生成的state给decoder
 encoder_infer = Model(encoder_input,encoder_state)

encoder推断模型
这里写图片描述


#推断模型-decoder
decoder_state_input_h = Input(shape=(n_units,))
decoder_state_input_c = Input(shape=(n_units,))    
decoder_state_input = [decoder_state_input_h, decoder_state_input_c] #上个时刻的状态h,c   

decoder_infer_output, decoder_infer_state_h, decoder_infer_state_c = decoder(decoder_input,initial_state=decoder_state_input)
decoder_infer_state = [decoder_infer_state_h, decoder_infer_state_c]#当前时刻得到的状态
decoder_infer_output = decoder_dense(decoder_infer_output)#当前时刻的输出
decoder_infer = Model([decoder_input]+decoder_state_input,[decoder_infer_output]+decoder_infer_state)

decoder推断模型
这里写图片描述

把模型创建整理成一个函数:

def create_model(n_input,n_output,n_units):
    #训练阶段
    encoder_input = Input(shape = (None, n_input))
    encoder = LSTM(n_units, return_state=True)
    _,encoder_h,encoder_c = encoder(encoder_input)
    encoder_state = [encoder_h,encoder_c]

    #decoder
    decoder_input = Input(shape = (None, n_output))
    decoder = LSTM(n_units,return_sequences=True, return_state=True)
    decoder_output, _, _ = decoder(decoder_input,initial_state=encoder_state)
    decoder_dense = Dense(n_output,activation='softmax')
    decoder_output = decoder_dense(decoder_output)

    #生成的训练模型
    model = Model([encoder_input,decoder_input],decoder_output)

    #推理阶段,用于预测过程
    encoder_infer = Model(encoder_input,encoder_state)

    decoder_state_input_h = Input(shape=(n_units,))
    decoder_state_input_c = Input(shape=(n_units,))    
    decoder_state_input = [decoder_state_input_h, decoder_state_input_c]#上个时刻的状态h,c   

    decoder_infer_output, decoder_infer_state_h, decoder_infer_state_c = decoder(decoder_input,initial_state=decoder_state_input)
    decoder_infer_state = [decoder_infer_state_h, decoder_infer_state_c]#当前时刻得到的状态
    decoder_infer_output = decoder_dense(decoder_infer_output)#当前时刻的输出
    decoder_infer = Model([decoder_input]+decoder_state_input,[decoder_infer_output]+decoder_infer_state)

    return model, encoder_infer, decoder_infer

2.3 模型评价

def predict_chinese(source,encoder_inference, decoder_inference, n_steps, features):
    #先通过推理encoder获得预测输入序列的隐状态
    state = encoder_inference.predict(source)
    #第一个字符'\t',为起始标志
    predict_seq = np.zeros((1,1,features))
    predict_seq[0,0,target_dict['\t']] = 1

    output = ''
    #开始对encoder获得的隐状态进行推理
    #每次循环用上次预测的字符作为输入来预测下一次的字符,直到预测出了终止符
    for i in range(n_steps):#n_steps为句子最大长度
        #给decoder输入上一个时刻的h,c隐状态,以及上一次的预测字符predict_seq
        yhat,h,c = decoder_inference.predict([predict_seq]+state)
        #注意,这里的yhat为Dense之后输出的结果,因此与h不同
        char_index = np.argmax(yhat[0,-1,:])
        char = target_dict_reverse[char_index]
        output += char
        state = [h,c]#本次状态做为下一次的初始状态继续传递
        predict_seq = np.zeros((1,1,features))
        predict_seq[0,0,char_index] = 1
        if char == '\n':#预测到了终止符则停下来
            break
    return output

对100个值进行预测:

for i in range(1000,1210):
    test = encoder_input[i:i+1,:,:]#i:i+1保持数组是三维
    out = predict_chinese(test,encoder_infer,decoder_infer,OUTPUT_LENGTH,OUTPUT_FEATURE_LENGTH)
    print(input_texts[i])
    print(out)

我们发现预测的都很准(废话,训练集能不准嘛!)
翻译结果:
这里写图片描述

3 致谢

本文参照了以下文章:
[1] keras/examples/lstm_seq2seq.py, https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py
[2] A ten-minute introduction to sequence-to-sequence learning in Keras, https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html
[3] How to Develop an Encoder-Decoder Model for Sequence-to-Sequence Prediction in Keras, https://machinelearningmastery.com/develop-encoder-decoder-model-sequence-sequence-prediction-keras/
[4] Keras-9 实现Seq2Seq, https://blog.youkuaiyun.com/weiwei9363/article/details/79464789
[5] 理解LSTM在keras API中参数return_sequences和return_state, https://blog.youkuaiyun.com/u011327333/article/details/78501054
[6] Keras关于LSTM的units参数,还是不理解? https://blog.youkuaiyun.com/xiewenbo/article/details/79452843

【人工智能】Python中的序列到序列(Seq2Seq)模型:实现机器翻译 序列到序列(Seq2Seq)模型是自然语言处理(NLP)中一项核心技术,广泛应用于机器翻译、语音识别、文本摘要等任务。本文深入探讨Seq2Seq模型的结构和工作原理,结合Python和TensorFlow/Keras实现一个简单的机器翻译系统。我们首先介绍Seq2Seq模型的基本概念,包括编码器、解码器、注意力机制等关键要素。接着,我们使用一个小型数据集,逐步实现一个基于LSTM(长短期记忆网络)的Seq2Seq模型,进行法语到英语的机器翻译。文章中将详细讲解代码实现过程,并通过注释和解释帮助读者理解每一步 阅读详情

相关推荐

中英翻译数据集处理

【代码】中英翻译数据集处理。

东方佑 768

中文机器翻译数据集

Dataset WMT2018 AI challenger(英中翻译规模最大的口语领域英中双语对照数据集) UM-Corpus: A Large English-Chinese Parallel Corpus OpenSubtitles2016 MultiUN Methods AI Challenger 2017 奇遇记 机器翻译如何解决数据量小的问题? ...

Just for fun的专栏 1万+

【NLP】一文理解Seq2Seq

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

sikh_0529的博客 1万+

语音翻译任务常用数据集介绍

此外,随着技术的不断进步和新的数据资源的出现,语音翻译任务的数据集也在不断更新和扩展。尽管它主要用于语音识别任务,但由于其丰富的语言种类和大规模的数据量,Common Voice也可以作为语音翻译任务的有益补充。:虽然LibriSpeech主要用于语音识别任务,但由于其庞大的英文语音数据规模,它也可以作为语音翻译任务的辅助数据集。尽管它主要关注语音到文本的翻译,但其中的语音数据对于语音翻译任务同样具有价值。语音翻译任务常用的数据集包括多种类型,它们提供了丰富的语音和翻译资源,用于训练和优化语音翻译模型。

2301_78524903的博客 1567

英文-中文机器翻译数据集

中英文翻译数据集: Anyone can do that. 任何人都可以做到。 How about another piece of cake? 要不要再來一塊蛋糕? She married him. 她嫁给了他。 I don't like learning irregular verbs. 我不喜欢学习不规则动词。 It's a whole new ball game for me. 這對我來說是個全新的球類遊戲。 He's sleeping like a baby. 他正睡着,像个婴儿一样。 He can play both tennis and baseball. 他既会打网球,又会打棒球。 We should cancel the hike. 我們應該取消這次遠足。 He is good at dealing with children. 他擅長應付小孩子。

中英文翻译数据集百万数据集合

中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合中英文翻译数据集百万数据集合

NLP----句向量

句向量的产生 我们需要找到一种方法,将离散的词向量,加工成句向量。有一种简单粗暴的方法,直接将所有词向量相加。不过我们依旧是在词向量的空间上理解句子,如果句子和词语是有本质区别的事物,那么他们所属的空间应该也不同。直接使用加法,没有办法创造出一个全新的空间。 ...

weixin_43955530的博客 1314

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2015

Keras实现英文到中文机器翻译 seq2seq+LSTM

该模型实现的是英文到中文的翻译,下图为了更好展示模型架构用的大佬的图: 整体由encoder和decoder两大部分组成,每部分都有一个LSTM网络,其中encoder输入原始的句子,decoder输入的是含有开始符号的翻译后的句子,输出是带有结尾标志福德目标句子。 一、处理文本数据 这一步骤包含对原数据进行分割获得翻译前、后的句子,生成字符的字典,最后对翻译前后的句子进行One-Hot编码,便于处理数据。 1.获得翻译前后的句子 先看一下原数据的样式: 首先导入需要的库 impor

qq_44635691的博客 6445

数字化转型是什么?核心又是什么呢?

01到底什么是数字化转型? 这时候你或许要问笔者了,既然你说使用新兴技术不是数字化转型,那使用新的商业模式总该是数字化转型了吧?你比如阿里巴巴,作为我们中国人最熟悉的开展电子商务的公司,它可以说是新的商业模式最大的开创者了:阿里巴巴是世界上最大的零售商,却没有任何一家实体店和任何库存;再比如优步(Uber),我们非常熟悉的一个线上打车平台,它可以算是世界上最大的出租车公司了,但是它不拥有一辆出租车。还有近些年来,我们经常使用的的旅游房屋租赁社区爱彼迎(Airbnb),它可以为消费者提供多样的住宿信息..

weixin_58342023的博客 4043

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3918

python用于NLP的seq2seq模型实例:用Keras实现神经机器翻译

原文链接:http://tecdat.cn/?p=8438在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。我们将使用seq2seq通过Python的Keras库创建我们的语言翻译模型。假定您对循环神经网络(尤其是LSTM)有很好的了解。本文中的代码是使用Keras库用Python编写的。库和配置设置首先导入所需的库:import os, sys from ker...

拓端研究室TRL 237

Vivaldi天线HFSS建模实战:从参数化曲线到辐射优化的完整流程

本文详细介绍了Vivaldi天线在HFSS中的建模与优化全流程,涵盖参数化曲线绘制、馈电系统设计及性能验证等关键步骤。通过实战案例分享,帮助工程师掌握超宽带天线的HFSS建模技巧,提升雷达探测和通信系统设计效率。重点解析了指数渐变曲线建模、微带馈电优化等核心技术要点。

weixin_29228781的博客 274

Seq2Seq详解及实现

1.Seq2Seq是什么?   Seq2Seq学习是训练一个模型,将来自一个领域的序列(例如英语语句)转换为另一个领域的序列(例如法语)。 "the cat sat on the mat" -> [Seq2Seq model] -> "le chat etait assis sur le tapis"   Seq2Seq模型可以用于机器翻译或者自由问答(在给定自然语言问题的情况下生成自然语言答案)。通常,它可以在任何需要生成文本的情况下使用。   我们可以使用多种方法来处理Seq2Seq任务,

大雄没有叮当猫的博客 7051

MultiOTP Credential Provider避坑指南:从安装到RDP双因素认证的全流程解析

本文详细解析了MultiOTP Credential Provider从安装到实现RDP双因素认证(MFA)的全流程,重点分享了Docker部署、Active Directory集成及网络级认证(NLA)兼容性等环节的实战避坑经验,旨在帮助运维人员高效、稳定地部署离线双因素认证方案,提升Windows远程桌面安全性。

weixin_29255731的博客 642

CST 仿真_NFC仿真

在CST中实现NFC天线单体的仿真

qq_43706810的博客 3961

十分钟教程:用Keras实现seq2seq学习

原文:A ten-minute introduction to sequence-to-sequence learning in Keras 作者:Francois Chollet 译者:雁惊寒 摘要:序列到序列学习(seq2seq)是一种把序列从一个域(例如英语中的句子)转换为另一个域中的序列(例如把相同的句子翻译成法语)的模型训练方法。目前有多种方法可以用来处理这个任务,可以...

博客 6946

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

tensorflow2.0(Keras)实现seq2seq+Attention模型的对话系统--实战篇(序列生成)

本文目录结构 序列生成的两种方法比较 seq2seq模型介绍 Keras实现seq2seq+Atttention模型 序列生成的两种方法比较: 序列生成任务主要有两种方案实现,一种是传统的seq2seq(lstm+attention),一种是基于self-attention的transformer模型实现。(具体实现方法参考另一篇博客https://blog.youkuaiyun.com/qq_35549634/article/details/106549346),本文将介绍第一种方法。 问:attention与sel

qq_35549634的博客 1万+

多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码

本文将为大家介绍基于BP、ELM、LSTM、BiLSTM和SAELSTM多种算法的数据预测,并提供相应的Matlab源码。SAELSTM算法是一种结合自动编码器和LSTM神经网络的深度学习方法,用于时间序列数据预测。ELM算法是一种单层前向神经网络,在单次训练过程中直接产生输出权重,从而具有快速学习和良好推广性能。多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码。总体来看,采用多种算法进行数据预测可以提高预测准确率,并可根据不同场景选择适合的算法。

qq_39605374的博客 862

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

项目上的时间都去哪儿了?

19/06/10 星期一 确定了测试的指标:PV、带宽、并发连接数、QPS;发现JMeter只能模仿HTTP Rest请求,无法模仿后端模块之间调用的请求格式;决定编写python/shell脚本监控系统性能;疑问:1、怎么提高并发数;2、怎么提高CPU、内存、IO、网络的利用率; 19/06/11 星期二 思考测试的目的和方向,通过基准测试寻找拐点,加强对组件的并发测试;在本地电脑安装Anac...

weixin_30699465的博客 220

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Keras-9 实现Seq2Seq

A ten-minute introduction to sequence-to-sequence learning in Keras 简单介绍如何用Keras实现Seq2Seq模型 原文链接 https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html 该博客的完整...

记录学习的过程 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 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")

Keras实现seq2seq

【代码】Keras实现seq2seq

lymake的博客 964

keras的seq2seq

前面讲到seq2seq,网上有很多seq2seq的例子,今天具体解析一下keras的seq2seq(character-level)例子,代码是keras的github上的地址: https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py 前言 ''' Keras(字符级)中的序列到序列示例。这个脚本演示了...

hufei_neo的博客 772

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

原文链接:http://tecdat.cn/?p=8438 在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。我们将使用seq2seq体系结构通过Python的Keras库创建我们的语言翻译模型。 假定您对循环神经网络(尤其是LSTM)有很好的了解。本文中的代码是使用Keras库用Python编写的。 库和配置设置 首先导入所需的库: import o......

大数据部落 1681

Keras实现Seq2Seq机器翻译模型全解析

序列到序列(Seq2Seq)模型是自然语言处理中的核心架构,通过编码器-解码器结构处理变长序列转换任务。其核心原理是将输入序列编码为上下文向量,再解码为目标序列,这种架构特别适合机器翻译场景。基于深度学习的神经机器翻译(NMT)相比传统方法,能自动学习语言间的复杂映射关系。Keras作为高层深度学习框架,简化了LSTM和注意力机制等关键组件的实现。在实际工程中,正确处理序列时序依赖、优化词汇表大小与序列长度的平衡是提升翻译质量的关键。本文以法语-英语翻译为例,详细展示了从数据预处理到模型推理的完整实现流程,

weixin_33717117的博客 441
上一篇: 图解LSTM
下一篇: python爬取长春长生2016-2018所有被批准疫苗批次
PIPIXIU
博客等级 码龄10年 68粉丝 43原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值