当前位置: 首页 > news >正文

做哪方面的网站湘潭哪里做网站

做哪方面的网站,湘潭哪里做网站,哪个网站做推销产品,漳州网站开发找出博大科技原文链接#xff1a;https://blog.csdn.net/qq_44635691/article/details/106919244 该模型实现的是英文到中文的翻译#xff0c;下图为了更好展示模型架构借用大佬的图(这里没有用到Embeddings)#xff1a; 本文完整代码:Github 目录 一、处理文本数据 1.获得翻译前后的句子…原文链接https://blog.csdn.net/qq_44635691/article/details/106919244 该模型实现的是英文到中文的翻译下图为了更好展示模型架构借用大佬的图(这里没有用到Embeddings) 本文完整代码:Github 目录 一、处理文本数据 1.获得翻译前后的句子  2.创建关于 字符-index 和 index -字符的字典 3.对中文和英文句子One-Hot编码 二、建立模型 三、decoder预测每个字符 四、训练模型 五、展示    整体由encoder和decoder两大部分组成每部分都有一个LSTM网络其中encoder输入原始的句子输出状态向量decoder输入的是含有开始符号的翻译后的句子输出目标句子。         具体步骤为 1.encoder将输入序列进行编码成状态向量 2.decoder从第一个字符开始预测 3.向decoder喂入状态向量(state_h,state_c)和累计包含之前预测字符的独热编码第一次的状态向量来自于encoder,后来预测每            目标序列的每个字符时状态向量来源于decoder,predict出来的状态向量 4.使用argmax预测对下一个字符的位置再根据字典查找到对应的字符 5.将上一步骤中的字符添加到 target sequence中 6.直到预测到我们指定结束字符时结束循环 一、处理文本数据 这一步骤包含对原数据进行分割获得翻译前、后的句子生成字符的字典最后对翻译前后的句子进行One-Hot编码便于处理数据。 1.获得翻译前后的句子 先看一下原数据的样式 首先导入需要的库 代码1.1.1import pandas as pd import numpy as np from keras.layers import Input, LSTM, Dense, merge,concatenate from keras.optimizers import Adam, SGD from keras.models import Model,load_model from keras.utils import plot_model from keras.models import Sequential#定义神经网络的参数 NUM_SAMPLES3000 #训练样本的大小 batch_size 64 #一次训练所选取的样本数 epochs 100 #训练轮数 latent_dim 256 #LSTM 的单元个数 用pandas读取文件然后我们只要前两列内容代码1.1.2data_pathdata/cmn.txt dfpd.read_table(data_path,headerNone).iloc[:NUM_SAMPLES,0:2] #添加标题栏 df.columns[inputs,targets] #每句中文举手加上‘\t’作为起始标志句末加上‘\n’终止标志 df[targets]df[targets].apply(lambda x:\tx\n) 最后是这样的形式最后是这样的形式 代码1.1.3#获取英文、中文各自的列表 input_textsdf.inputs.values.tolist() target_textsdf.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())))#英文字符中不同字符的数量 num_encoder_tokens len(input_characters) #中文字符中不同字符的数量 num_decoder_tokens len(target_characters) #最大输入长度 INUPT_LENGTH max([ len(txt) for txt in input_texts]) #最大输出长度 OUTPUT_LENGTH max([ len(txt) for txt in target_texts])2.创建关于 字符-index 和 index -字符的字典 代码1.2.1input_token_index dict( [(char, i)for i, char in enumerate(input_characters)] ) target_token_index dict( [(char, i) for i, char in enumerate(target_characters)] )reverse_input_char_index dict([(i, char) for i, char in enumerate(input_characters)]) reverse_target_char_index dict([(i, char) for i, char in enumerate(target_characters)]) 3.对中文和英文句子One-Hot编码 代码1.3.1#需要把每条语料转换成LSTM需要的三维数据输入[n_samples, timestamp, one-hot feature]到模型中 encoder_input_data np.zeros((NUM_SAMPLES,INUPT_LENGTH,num_encoder_tokens)) decoder_input_data np.zeros((NUM_SAMPLES,OUTPUT_LENGTH,num_decoder_tokens)) decoder_target_data np.zeros((NUM_SAMPLES,OUTPUT_LENGTH,num_decoder_tokens))for i,(input_text,target_text) in enumerate(zip(input_texts,target_texts)):for t,char in enumerate(input_text):encoder_input_data[i,t,input_token_index[char]]1.0for t, char in enumerate(target_text):decoder_input_data[i,t,target_token_index[char]]1.0if t 0:# decoder_target_data 不包含开始字符并且比decoder_input_data提前一步decoder_target_data[i, t-1, target_token_index[char]] 1.0 二、建立模型 代码2.1#定义编码器的输入encoder_inputsInput(shape(None,num_encoder_tokens))#定义LSTM层latent_dim为LSTM单元中每个门的神经元的个数return_state设为True时才会返回最后时刻的状态h,cencoderLSTM(latent_dim,return_stateTrue)# 调用编码器得到编码器的输出输入其实不需要以及状态信息 state_h 和 state_cencoder_outputs,state_h,state_cencoder(encoder_inputs)# 丢弃encoder_outputs, 我们只需要编码器的状态encoder_state[state_h,state_c]#定义解码器的输入decoder_inputsInput(shape(None,num_decoder_tokens))decoder_lstmLSTM(latent_dim,return_stateTrue,return_sequencesTrue)# 将编码器输出的状态作为初始解码器的初始状态decoder_outputs,_,_decoder_lstm(decoder_inputs,initial_stateencoder_state)#添加全连接层decoder_denseDense(num_decoder_tokens,activationsoftmax)decoder_outputsdecoder_dense(decoder_outputs)#定义整个模型modelModel([encoder_inputs,decoder_inputs],decoder_outputs)model的模型图model的模型图 其中decoder在每个timestep有三个输入分别是来自encoder的两个状态向量state_h,state_c和经过One-Hot编码的中文序列  代码2.2#定义encoder模型得到输出encoder_statesencoder_modelModel(encoder_inputs,encoder_state)decoder_state_input_hInput(shape(latent_dim,))decoder_state_input_cInput(shape(latent_dim,))decoder_state_inputs[decoder_state_input_h,decoder_state_input_c]# 得到解码器的输出以及中间状态decoder_outputs,state_h,state_cdecoder_lstm(decoder_inputs,initial_statedecoder_state_inputs)decoder_states[state_h,state_c]decoder_outputsdecoder_dense(decoder_outputs)decoder_modelModel([decoder_inputs]decoder_state_inputs,[decoder_outputs]decoder_states)plot_model(modelmodel,show_shapesTrue)plot_model(modelencoder_model,show_shapesTrue)plot_model(modeldecoder_model,show_shapesTrue)return model,encoder_model,decoder_modelencoder的模型图 decoder的模型图: 三、decoder预测每个字符 首先encoder根据输入序列生成状态向量states_value 并结合由包含开始字符\t的编码一并传入到decoder的输入层预测出下个字符的位置sampled_token_index 将新预测到的字符添加到target_seq中再进行One-Hot编码,用预测上个字符生成的状态向量作为新的状态向量。 以上过程在while中不断循环直到预测到结束字符\n结束循环返回翻译后的句子。从下图可直观的看出对于decoder部分是一个一个生成翻译后的序列注意蓝线的指向是target_squence,它是不断被填充的。 代码3.1def decode_sequence(input_seq,encoder_model,decoder_model):# 将输入序列进行编码生成状态向量states_value encoder_model.predict(input_seq)# 生成一个size1的空序列target_seq np.zeros((1, 1, num_decoder_tokens))# 将这个空序列的内容设置为开始字符target_seq[0, 0, target_token_index[\t]] 1.# 进行字符恢复# 简单起见假设batch_size 1stop_condition Falsedecoded_sentence while not stop_condition:output_tokens, h, c decoder_model.predict([target_seq] states_value) # print(output_tokens)这里输出的是下个字符出现的位置的概率# 对下个字符采样 sampled_token_index是要预测下个字符最大概率出现在字典中的位置sampled_token_index np.argmax(output_tokens[0, -1, :])sampled_char reverse_target_char_index[sampled_token_index]decoded_sentence sampled_char# 退出条件生成 \n 或者 超过最大序列长度if sampled_char \n or len(decoded_sentence) INUPT_LENGTH :stop_condition True# 更新target_seqtarget_seq np.zeros((1, 1, num_decoder_tokens))target_seq[0, 0, sampled_token_index] 1.# 更新中间状态states_value [h, c]return decoded_sentence 四、训练模型 model,encoder_model,decoder_modelcreate_model() #编译模型 model.compile(optimizerrmsprop,losscategorical_crossentropy) #训练模型 model.fit([encoder_input_data,decoder_input_data],decoder_target_data,batch_sizebatch_size,epochsepochs,validation_split0.2) #训练不错的模型为了以后测试可是保存 model.save(s2s.h5) encoder_model.save(encoder_model.h5) decoder_model.save(decoder_model.h5) 五、展示 if __name__ __main__:introinput(select train model or test model:)if introtrain:print(训练模式...........)train()else:print(测试模式.........)while(1):test() 训练数据用了3000组 大部分是比较短的词组或者单词。效果不能算是太好但是比起英语渣渣还算可以吧。 Reference https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html https://towardsdatascience.com/neural-machine-translation-using-seq2seq-with-keras-c23540453c74
http://www.sadfv.cn/news/372324/

相关文章:

  • 求跳转代码来自百度等搜索引擎访问跳转到另一个网站直接输入域名中国建设银行学习网站
  • 网站建设相关工作总结免费旅游网站源码下载
  • 广东十大网站建设品牌可以举报一个做网络网站发大财吗
  • 网站空间升级通知网站建设对于企业的必要性
  • 足球直播网站怎么做网站设计色彩搭配
  • 中国建设银行网站公积金查询大学制作网站怎么做
  • wordpress网站空白网站的互动功能
  • 上海优秀网站建设公司天津搜索引擎优化
  • 网站建设费如何记账微信平台链接wordpress
  • 毕设做网站太简单网站建设 字体版权
  • 网站开发工程师是干嘛的恶意代码 wordpress
  • 湖北网站建设论文题目要求网站免费正能量直接进入老狼信息
  • 环保行业网站建设网站建设的专业知识
  • 杭州网站设计公司做网站服务器要用多大
  • 网站建设 海豚弯衡阳做网站优化
  • 淄博安监局网站两体系建设做网站的软件叫什么软件
  • 上海有多少家网站建设公司wordpress文本编辑增强
  • gta5手机网站大全iis如何发布asp.net网站
  • 网站开发怎么入账门户网站建设解决方案
  • 深圳电子商城网站建设做seo还要需要做网站吗
  • 网站开发人员岗位职责省好多会员app
  • 赣州网站建设棋牌网站开发工程师
  • 网站域名找回密码 用户名怎么在微信上做公众号
  • 手机 网站制作北京专业网络直播制作
  • 此网站域名三天更换邯郸手机网站开发价格
  • 雷州市住房和城乡规划建设局网站有哪些育儿类网站做的比较好
  • 郴州网站建设的公司忻州 建网站
  • 怎么注册建设公司网站游戏网站模
  • 做设计最好的参考网站济宁网站建设 果壳科技
  • 企业如何建设网站全国最好的加盟网站