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

对网站的界面设计分析seo的工作内容

对网站的界面设计分析,seo的工作内容,什么专业可以做网站,昆山网站制作昆山网站建设系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码(一) 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存(二) 【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三) 【如何训练…

系列文章
【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码(一)
【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存(二)
【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三)
【如何训练一个中英翻译模型】LSTM机器翻译模型部署之onnx(python)(四)

目录

  • 一、事情准备
  • 二、模型转换
  • 三、ncnn模型加载与推理(python版)

一、事情准备

这篇是在【如何训练一个中译英翻译器】LSTM机器翻译模型部署之onnx(python)(四)的基础上进行的,要用到文件为:

input_words.txt
target_words.txt
config.json
encoder_model-sim.onnx
decoder_model-sim.onnx

其中的onnx就是用来转为ncnn模型的,这里借助了onnx这个中间商,所以前面我们需要先通过onnxsim对模型进行simplify,要不然在模型转换时会出现op不支持的情况(模型转换不仅有中间商这个例子,目前还可以通过pnnx直接将pytorch模型转为ncnn,感兴趣的小伙伴可以去折腾下)
老规矩,先给出工具:

onnx2ncnn:https://github.com/Tencent/ncnn
netron:https://netron.app

二、模型转换

这里进行onnx转ncnn,通过命令进行转换

onnx2ncnn onnxModel/encoder_model-sim.onnx ncnnModel/encoder_model.param ncnnModel/encoder_model.bin
onnx2ncnn onnxModel/decoder_model-sim.onnx ncnnModel/decoder_model.param ncnnModel/decoder_model.bin

转换成功可以看到:
在这里插入图片描述
转换之后可以对模型进行优化,但是奇怪的是,这里优化了不起作用,去不了MemoryData这些没用的op

ncnnoptimize ncnnModel/encoder_model.param ncnnModel/encoder_model.bin ncnnModel/encoder_model.param ncnnModel/encoder_model.bin 1
ncnnoptimize ncnnModel/decoder_model.param ncnnModel/decoder_model.bin ncnnModel/decoder_model.param ncnnModel/decoder_model.bin 1

三、ncnn模型加载与推理(python版)

跟onnx的推理比较类似,就是函数的调用方法有点不同,这里先用python实现,验证下是否没问题,方面后面部署到其它端,比如android。
主要包括:模型加载、推理模型搭建跟模型推理,但要注意的是这里的输入输出名称需要在param这个文件里面获取。

采用netron分别查看encoder与decoder的网络结构,获取输入输出名称:

encoder:
输入输出分别如图
在这里插入图片描述
decoder:

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

推理代码如下,推理过程感觉没问题,但是推理输出结果相差很大(对比过第一层ncnn与onnx的推理结果了),可能问题出在模型转换环节的精度损失上,而且第二层模型转换后网络输出结果不一致了,很迷,还没找出原因,但是以下的推理是能运行通过,只不过输出结果有问题

import numpy as np
import ncnn# 加载字符
# 从 input_words.txt 文件中读取字符串
with open('config/input_words.txt', 'r') as f:input_words = f.readlines()input_characters = [line.rstrip('\n') for line in input_words]# 从 target_words.txt 文件中读取字符串
with open('config/target_words.txt', 'r', newline='') as f:target_words = [line.strip() for line in f.readlines()]target_characters = [char.replace('\\t', '\t').replace('\\n', '\n') for char in target_words]#字符处理,以方便进行编码
input_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)])# something readable.
reverse_input_char_index = dict((i, char) for char, i in input_token_index.items())
reverse_target_char_index = dict((i, char) for char, i in target_token_index.items())
num_encoder_tokens = len(input_characters) # 英文字符数量
num_decoder_tokens = len(target_characters) # 中文文字数量import json
with open('config/config.json', 'r') as file:loaded_data = json.load(file)# 从加载的数据中获取max_encoder_seq_length和max_decoder_seq_length的值
max_encoder_seq_length = loaded_data["max_encoder_seq_length"]
max_decoder_seq_length = loaded_data["max_decoder_seq_length"]# Load the ncnn models for the encoder and decoder
encoderNet = ncnn.Net()
encoderNet.load_param("ncnnModel/encoder_model.param")
encoderNet.load_model("ncnnModel/encoder_model.bin")decoderNet = ncnn.Net()
decoderNet.load_param("ncnnModel/decoder_model.param")
decoderNet.load_model("ncnnModel/decoder_model.bin")def decode_sequence(input_seq):# Encode the input as state vectors.# print(input_seq)ex_encoder = encoderNet.create_extractor()ex_encoder.input("input_1", ncnn.Mat(input_seq))states_value = []_, LSTM_1 = ex_encoder.extract("lstm")_, LSTM_2 = ex_encoder.extract("lstm_1")states_value.append(LSTM_1)states_value.append(LSTM_2)# print(ncnn.Mat(input_seq))# print(vgdgd)# Generate empty target sequence of length 1.target_seq = np.zeros((1, 1, 849))# Populate the first character of target sequence with the start character.target_seq[0, 0, target_token_index['\t']] = 1.# this target_seq you can treat as initial state# Sampling loop for a batch of sequences# (to simplify, here we assume a batch of size 1).stop_condition = Falsedecoded_sentence = ''ex_decoder = decoderNet.create_extractor()while not stop_condition:#print(ncnn.Mat(target_seq))print("---------")ex_decoder.input("input_2", ncnn.Mat(target_seq))ex_decoder.input("input_3", states_value[0])ex_decoder.input("input_4", states_value[1])_, output_tokens = ex_decoder.extract("dense")_, h = ex_decoder.extract("lstm_1")_, c = ex_decoder.extract("lstm_1_1")print(output_tokens)tk = []for i in range(849):tk.append(output_tokens[849*i])tk = np.array(tk)output_tokens = tk.reshape(1,1,849)print(output_tokens)# print(fdgd)print(h)print(c)# output_tokens = np.array(output_tokens)# output_tokens = output_tokens.reshape(1, 1, -1)# # h = np.array(h)# # c = np.array(c)# print(output_tokens.shape)# print(h.shape)# print(c.shape)#output_tokens, h, c = decoder_model.predict([target_seq] + states_value)# Sample a token# argmax: Returns the indices of the maximum values along an axis# just like find the most possible charsampled_token_index = np.argmax(output_tokens[0, -1, :])# find char using indexsampled_char = reverse_target_char_index[sampled_token_index]# and append sentencedecoded_sentence += sampled_char# Exit condition: either hit max length# or find stop character.if (sampled_char == '\n' or len(decoded_sentence) > max_decoder_seq_length):stop_condition = True# Update the target sequence (of length 1).# append then ?# creating another new target_seq# and this time assume sampled_token_index to 1.0target_seq = np.zeros((1, 1, num_decoder_tokens))target_seq[0, 0, sampled_token_index] = 1.print(sampled_token_index)# Update states# update states, frome the front partsstates_value = [h, c]return decoded_sentenceimport numpy as npinput_text = "Call me."
encoder_input_data = np.zeros((1,max_encoder_seq_length, num_encoder_tokens),dtype='float32')
for t, char in enumerate(input_text):print(char)# 3D vector only z-index has char its value equals 1.0encoder_input_data[0,t, input_token_index[char]] = 1.input_seq = encoder_input_data
decoded_sentence = decode_sequence(input_seq)
print('-')
print('Input sentence:', input_text)
print('Decoded sentence:', decoded_sentence)

decoder的模型输出为849*849,感觉怪怪的,然后我们把模型的输入固定下来看看是不是模型的问题。
打开decoder_model.param,把输入层固定下来,0=w 1=h 2=c,那么:
input_2:0=849 1=1 2=1
input_3:0=256 1=1
input_4:0=256 1=1

运行以下命令进行优化

ncnnoptimize ncnnModel/decoder_model.param ncnnModel/decoder_model.bin ncnnModel/decoder_model.param ncnnModel/decoder_model.bin 1

结果如下:
在这里插入图片描述
打开网络来看一下:
可以看到输出确实是849849(红色框),那就是模型转换有问题了
在这里插入图片描述
仔细看,能够看到有两个shape(蓝色框)分别为849跟849
1,这两个不同维度的网络进行BinaryOP之后,就变成849849了,那么,我们把Reshape这个网络去掉试试(不把前面InnerProduct的输入维度有849reshape为8491),下面来看手术刀怎么操作。

我们需要在没经过固定维度并ncnnoptimize的模型上操作(也就是没经过上面0=w 1=h 2=c修改的模型上操作)
根据名字我们找到Reshape那一层:
在这里插入图片描述
然后找到与reshape那一层相连接的上一层(红色框)与下一层(蓝色框)
在这里插入图片描述
通过红色框与蓝色框里面的名字我们找到了上层与下层分别为InnerProduct与BinaryOp
在这里插入图片描述
这时候,把InnerProduct与BinaryOp接上,把Reshape删掉
在这里插入图片描述
再改一下最上面的层数,把19改为18,因为我们删掉了一层
在这里插入图片描述保存之后再次执行

ncnnoptimize ncnnModel/decoder_model.param ncnnModel/decoder_model.bin ncnnModel/decoder_model.param ncnnModel/decoder_model.bin 1

执行后可以看到网络层数跟blob数都更新了
在这里插入图片描述

这时候改一下固定一下输入层数,并运行ncnnoptimize,再打开netron看一下网络结构,可以看到输出维度正常了
在这里插入图片描述
但是通过推理结果还是不对,没找到原因,推理代码如下:

import numpy as np
import ncnn# 加载字符
# 从 input_words.txt 文件中读取字符串
with open('config/input_words.txt', 'r') as f:input_words = f.readlines()input_characters = [line.rstrip('\n') for line in input_words]# 从 target_words.txt 文件中读取字符串
with open('config/target_words.txt', 'r', newline='') as f:target_words = [line.strip() for line in f.readlines()]target_characters = [char.replace('\\t', '\t').replace('\\n', '\n') for char in target_words]#字符处理,以方便进行编码
input_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)])# something readable.
reverse_input_char_index = dict((i, char) for char, i in input_token_index.items())
reverse_target_char_index = dict((i, char) for char, i in target_token_index.items())
num_encoder_tokens = len(input_characters) # 英文字符数量
num_decoder_tokens = len(target_characters) # 中文文字数量import json
with open('config/config.json', 'r') as file:loaded_data = json.load(file)# 从加载的数据中获取max_encoder_seq_length和max_decoder_seq_length的值
max_encoder_seq_length = loaded_data["max_encoder_seq_length"]
max_decoder_seq_length = loaded_data["max_decoder_seq_length"]# Load the ncnn models for the encoder and decoder
encoderNet = ncnn.Net()
encoderNet.load_param("ncnnModel/encoder_model.param")
encoderNet.load_model("ncnnModel/encoder_model.bin")decoderNet = ncnn.Net()
decoderNet.load_param("ncnnModel/decoder_model.param")
decoderNet.load_model("ncnnModel/decoder_model.bin")def decode_sequence(input_seq):# Encode the input as state vectors.# print(input_seq)ex_encoder = encoderNet.create_extractor()ex_encoder.input("input_1", ncnn.Mat(input_seq))states_value = []_, LSTM_1 = ex_encoder.extract("lstm")_, LSTM_2 = ex_encoder.extract("lstm_1")states_value.append(LSTM_1)states_value.append(LSTM_2)# print(ncnn.Mat(input_seq))# print(vgdgd)# Generate empty target sequence of length 1.target_seq = np.zeros((1, 1, 849))# Populate the first character of target sequence with the start character.target_seq[0, 0, target_token_index['\t']] = 1.# this target_seq you can treat as initial state# Sampling loop for a batch of sequences# (to simplify, here we assume a batch of size 1).stop_condition = Falsedecoded_sentence = ''ex_decoder = decoderNet.create_extractor()while not stop_condition:#print(ncnn.Mat(target_seq))print("---------")ex_decoder.input("input_2", ncnn.Mat(target_seq))ex_decoder.input("input_3", states_value[0])ex_decoder.input("input_4", states_value[1])_, output_tokens = ex_decoder.extract("dense")_, h = ex_decoder.extract("lstm_1")_, c = ex_decoder.extract("lstm_1_1")print(output_tokens)# print(ghfhf)# tk = []# for i in range(849):#     tk.append(output_tokens[849*i])# tk = np.array(tk)# output_tokens = tk.reshape(1,1,849)# print(output_tokens)# print(fdgd)print(h)print(c)output_tokens = np.array(output_tokens)output_tokens = output_tokens.reshape(1, 1, -1)# # h = np.array(h)# # c = np.array(c)# print(output_tokens.shape)# print(h.shape)# print(c.shape)#output_tokens, h, c = decoder_model.predict([target_seq] + states_value)# Sample a token# argmax: Returns the indices of the maximum values along an axis# just like find the most possible charsampled_token_index = np.argmax(output_tokens[0, -1, :])# find char using indexsampled_char = reverse_target_char_index[sampled_token_index]# and append sentencedecoded_sentence += sampled_char# Exit condition: either hit max length# or find stop character.if (sampled_char == '\n' or len(decoded_sentence) > max_decoder_seq_length):stop_condition = True# Update the target sequence (of length 1).# append then ?# creating another new target_seq# and this time assume sampled_token_index to 1.0target_seq = np.zeros((1, 1, num_decoder_tokens))target_seq[0, 0, sampled_token_index] = 1.print(sampled_token_index)# Update states# update states, frome the front partsstates_value = [h, c]return decoded_sentenceimport numpy as npinput_text = "Call me."
encoder_input_data = np.zeros((1,max_encoder_seq_length, num_encoder_tokens),dtype='float32')
for t, char in enumerate(input_text):print(char)# 3D vector only z-index has char its value equals 1.0encoder_input_data[0,t, input_token_index[char]] = 1.input_seq = encoder_input_data
decoded_sentence = decode_sequence(input_seq)
print('-')
print('Input sentence:', input_text)
print('Decoded sentence:', decoded_sentence)

参考文献:https://github.com/Tencent/ncnn/issues/2586


文章转载自:
http://breathless.c7501.cn
http://hansel.c7501.cn
http://perchloride.c7501.cn
http://neomycin.c7501.cn
http://weighhouse.c7501.cn
http://goldarn.c7501.cn
http://fujiyama.c7501.cn
http://yugoslavian.c7501.cn
http://unthatched.c7501.cn
http://epistrophe.c7501.cn
http://oarsmanship.c7501.cn
http://arkose.c7501.cn
http://reppo.c7501.cn
http://alleyway.c7501.cn
http://suspensive.c7501.cn
http://pneumococcus.c7501.cn
http://collapsar.c7501.cn
http://squail.c7501.cn
http://sauceboat.c7501.cn
http://torsi.c7501.cn
http://willis.c7501.cn
http://demurely.c7501.cn
http://wiglet.c7501.cn
http://cervicothoracic.c7501.cn
http://bowels.c7501.cn
http://ombre.c7501.cn
http://lynx.c7501.cn
http://counterfeiter.c7501.cn
http://tugboat.c7501.cn
http://abominate.c7501.cn
http://minnow.c7501.cn
http://metacenter.c7501.cn
http://seta.c7501.cn
http://tetramer.c7501.cn
http://coverall.c7501.cn
http://lizzie.c7501.cn
http://housewifery.c7501.cn
http://jrmp.c7501.cn
http://unrazored.c7501.cn
http://negaton.c7501.cn
http://fuzee.c7501.cn
http://cowcatcher.c7501.cn
http://augmentation.c7501.cn
http://school.c7501.cn
http://excrescence.c7501.cn
http://logic.c7501.cn
http://depone.c7501.cn
http://chinoiserie.c7501.cn
http://tungusic.c7501.cn
http://faceplate.c7501.cn
http://autobiographic.c7501.cn
http://makebate.c7501.cn
http://concretionary.c7501.cn
http://cockfighting.c7501.cn
http://needlepoint.c7501.cn
http://zanzibari.c7501.cn
http://demyth.c7501.cn
http://shock.c7501.cn
http://bayman.c7501.cn
http://delocalise.c7501.cn
http://emmetropia.c7501.cn
http://maroon.c7501.cn
http://ang.c7501.cn
http://juvenile.c7501.cn
http://hyphal.c7501.cn
http://debase.c7501.cn
http://overbold.c7501.cn
http://rajput.c7501.cn
http://roughhearted.c7501.cn
http://wingtip.c7501.cn
http://turnix.c7501.cn
http://lmbc.c7501.cn
http://tractile.c7501.cn
http://rasc.c7501.cn
http://unpriceable.c7501.cn
http://oligomer.c7501.cn
http://puberal.c7501.cn
http://paal.c7501.cn
http://ropy.c7501.cn
http://linkup.c7501.cn
http://hypnosophist.c7501.cn
http://longness.c7501.cn
http://spottable.c7501.cn
http://freshman.c7501.cn
http://kinsman.c7501.cn
http://lcm.c7501.cn
http://herrnhuter.c7501.cn
http://seastrand.c7501.cn
http://dopey.c7501.cn
http://heady.c7501.cn
http://spokeshave.c7501.cn
http://recallable.c7501.cn
http://circuitously.c7501.cn
http://escapable.c7501.cn
http://annalistic.c7501.cn
http://envier.c7501.cn
http://cardiomyopathy.c7501.cn
http://redolent.c7501.cn
http://extraparliamentary.c7501.cn
http://homebody.c7501.cn
http://www.zhongyajixie.com/news/91446.html

相关文章:

  • 厦门百度网站建设竞价排名
  • 扁平化设计 科技感网站素材湘潭seo公司
  • 做网站优化最快的方式老铁seo外链工具
  • 搭建网站服务器多少钱百度seo手机
  • 网站设计需要需要用做国外网站
  • 用phpmysql做网站方象科技服务案例
  • 网站建设销售工作怎么样整合营销传播策划方案
  • b2b网站策划书公司推广方案
  • 总局网站建设管理规范5118数据分析平台
  • 网站开发团队简介cps广告是什么意思
  • 网站建设的价值是什么bing搜索国内版
  • 河南招投标信息网抖音seo
  • 郑州网站建设一汉狮网络企业全网推广
  • 常见的门户网站有哪些下拉关键词排名
  • 行业查询网站企业网站seo贵不贵
  • 树莓派做博客网站seo和sem的关系
  • 做网站免费空间营销是什么意思
  • 免费做淘宝客网站北京网站优化方案
  • 网站 什么语言开发的it培训班学出来有用吗
  • 汽车网站建设参考文献开题报告关键词推广哪家好
  • 学生作业制作网站手机优化软件排行
  • 网站开发后端框架什么意思线上推广的方式
  • 西安给大学做网站公司武汉大学人民医院精神卫生中心
  • 模板网站建设方案怎么进行推广
  • 洛宁网站建设谷歌app下载 安卓
  • 个人跨境电商怎么开店铺合肥搜索引擎优化
  • 旅行社应做哪些网站需要优化的地方
  • 网站用户 分析中国重大新闻
  • 网站备案接入ipseo收费标准多少
  • php网站开发用什么php学seo如何入门