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

汕头企业网站建设流程wordpress 关于页面

汕头企业网站建设流程,wordpress 关于页面,wordpress技术文章,ppt怎么做流程图文章目录 PyTorch示例——使用Transformer写古诗1. 前言2. 版本信息3. 导包4. 数据与预处理数据下载先看一下原始数据开始处理数据#xff0c;过滤掉异常数据定义 词典编码器 Tokenizer定义数据集类 MyDataset测试一下MyDataset、Tokenizer、DataLoader 5. 构建模型位置编码器… 文章目录 PyTorch示例——使用Transformer写古诗1. 前言2. 版本信息3. 导包4. 数据与预处理数据下载先看一下原始数据开始处理数据过滤掉异常数据定义 词典编码器 Tokenizer定义数据集类 MyDataset测试一下MyDataset、Tokenizer、DataLoader 5. 构建模型位置编码器 PositionalEncoding古诗 Transformer 模型 6. 开始训练7. 推理直接推理为推理添加随机性 8. 更多学习资料 PyTorch示例——使用Transformer写古诗 1. 前言 很早、很早以前在TensorFlow2 学习——RNN生成古诗词_rnn古诗生成头词汇是 “ 日 、 红 、 山 、 夜 、 湖、 海 、 月 。-CSDN博客中已使用TensorFlowRNN的方式实现过写古诗的功能现在来个PytorchTransformer的示例数据处理逻辑和前面博文中大致相似本文中就不再赘述Kaggle Notebook地址: PyTorch示例-使用Transformer写古诗x 2. 版本信息 PyTorch: 2.1.2Python: 3.10.13 3. 导包 import math import numpy as np from collections import Counter import torch from torch import nn from torch.utils.data import TensorDataset from torch.utils.data import DataLoader import tqdm import random import sysprint(Pytorch 版本, torch.__version__) print(Python 版本, sys.version)Pytorch 版本 2.1.2 Python 版本 3.10.13 | packaged by conda-forge | (main, Dec 23 2023, 15:36:39) [GCC 12.3.0]4. 数据与预处理 数据下载 度盘 https://pan.baidu.com/s/1HIROi4mPMv0RBWHIHvUDVg提取码b2ppKagglehttps://www.kaggle.com/datasets/alionsss/poetry 先看一下原始数据 # 数据路径 DATA_PATH /kaggle/input/poetry/poetry.txt# 先看下原始数据每一行格式为诗的标题:诗的内容 with open(DATA_PATH, r, encodingutf-8) as f:lines f.readlines()for i in range(0, 5):print(lines[i])print(forigin_line_count {len(lines)})首春:寒随穷律变春逐鸟声开。初风飘带柳晚雪间花梅。碧林青旧竹绿沼翠新苔。芝田初雁去绮树巧莺来。初晴落景:晚霞聊自怡初晴弥可喜。日晃百花色风动千林翠。池鱼跃不同园鸟声还异。寄言博通者知予物外志。初夏:一朝春夏改隔夜鸟花迁。阴阳深浅叶晓夕重轻烟。哢莺犹响殿横丝正网天。珮高兰影接绶细草纹连。碧鳞惊棹侧玄燕舞檐前。何必汾阳处始复有山泉。度秋:夏律昨留灰秋箭今移晷。峨嵋岫初出洞庭波渐起。桂白发幽岩菊黄开灞涘。运流方可叹含毫属微理。仪鸾殿早秋:寒惊蓟门叶秋发小山枝。松阴背日转竹影避风移。提壶菊花岸高兴芙蓉池。欲知凉气早巢空燕不窥。origin_line_count 43030开始处理数据过滤掉异常数据 # 单行诗最大长度 MAX_LEN 64 MIN_LEN 5 # 禁用的字符拥有以下符号的诗将被忽略 DISALLOWED_WORDS [, , (, ), __, 《, 》, 【, 】, [, ], , ]# 一首诗一行对应一个列表的元素 poetry []# 按行读取数据 poetry.txt with open(DATA_PATH, r, encodingutf-8) as f:lines f.readlines() # 遍历处理每一条数据 for line in lines:# 利用正则表达式拆分 标题 和 内容fields line.split(:)# 跳过异常数据if len(fields) ! 2:continue# 得到诗词内容后面不需要标题content fields[1]# 过滤数据跳过内容过长、过短、存在禁用符的诗词if len(content) MAX_LEN - 2 or len(content) MIN_LEN:continueif any(word in content for word in DISALLOWED_WORDS):continuepoetry.append(content.replace(\n, )) # 最后要记得删除换行符for i in range(0, 5):print(poetry[i])print(fcurrent_line_count {len(poetry)})寒随穷律变春逐鸟声开。初风飘带柳晚雪间花梅。碧林青旧竹绿沼翠新苔。芝田初雁去绮树巧莺来。 晚霞聊自怡初晴弥可喜。日晃百花色风动千林翠。池鱼跃不同园鸟声还异。寄言博通者知予物外志。 夏律昨留灰秋箭今移晷。峨嵋岫初出洞庭波渐起。桂白发幽岩菊黄开灞涘。运流方可叹含毫属微理。 寒惊蓟门叶秋发小山枝。松阴背日转竹影避风移。提壶菊花岸高兴芙蓉池。欲知凉气早巢空燕不窥。 山亭秋色满岩牖凉风度。疏兰尚染烟残菊犹承露。古石衣新苔新巢封古树。历览情无极咫尺轮光暮。 current_line_count 24375过滤掉出现频率较低的字符串后面统一当作 UNKNOWN # 最小词频 MIN_WORD_FREQUENCY 8# 统计词频利用Counter可以直接按单个字符进行统计词频 counter Counter() for line in poetry:counter.update(line) # 过滤掉低词频的词 tokens [token for token, count in counter.items() if count MIN_WORD_FREQUENCY]# 打印一下出现次数前5的字 for i, (token, count) in enumerate(counter.items()):print(token, -,count)if i 4:break;寒 - 2612 随 - 1036 穷 - 482 律 - 118 变 - 286定义 词典编码器 Tokenizer class Tokenizer:词典编码器UNKNOWN unknownPAD padBOS bos EOS eos def __init__(self, tokens):# 补上特殊词标记开始标记、结束标记、填充字符标记、未知词标记tokens [Tokenizer.UNKNOWN, Tokenizer.PAD, Tokenizer.BOS, Tokenizer.EOS] tokens# 词汇表大小self.dict_size len(tokens)# 生成映射关系self.token_id {} # 映射: 词 - 编号self.id_token {} # 映射: 编号 - 词for idx, word in enumerate(tokens):self.token_id[word] idxself.id_token[idx] word# 各个特殊标记的编号id方便其他地方使用self.unknown_id self.token_id[Tokenizer.UNKNOWN]self.pad_id self.token_id[Tokenizer.PAD]self.bos_id self.token_id[Tokenizer.BOS]self.eos_id self.token_id[Tokenizer.EOS]def id_to_token(self, token_id):编号 - 词return self.id_token.get(token_id)def token_to_id(self, token):词 - 编号取不到时给 UNKNOWNreturn self.token_id.get(token, self.unknown_id)def encode(self, tokens):词列表 - bos编号 编号列表 eos编号token_ids [self.bos_id, ] # 起始标记# 遍历词转编号for token in tokens:token_ids.append(self.token_to_id(token))token_ids.append(self.eos_id) # 结束标记return token_idsdef decode(self, token_ids):编号列表 - 词列表(去掉起始、结束标记)tokens []for idx in token_ids:# 跳过起始、结束标记if idx ! self.bos_id and idx ! self.eos_id:tokens.append(self.id_to_token(idx))return tokensdef __len__(self):return self.dict_size定义数据集类 MyDataset class MyDataset(TensorDataset):def __init__(self, data, tokenizer, max_length64):self.data dataself.tokenizer tokenizerself.max_length max_length # 每条数据的最大长度def __getitem__(self, index):line self.data[index]word_ids self.encode_pad_line(line)return torch.LongTensor(word_ids)def __len__(self):return len(self.data)def encode_pad_line(self, line):# 编码word_ids self.tokenizer.encode(line)# 如果句子长度不足max_length填充PADword_ids word_ids [tokenizer.pad_id] * (self.max_length - len(word_ids))return word_ids测试一下MyDataset、Tokenizer、DataLoader 使用 MyDataset、Tokenizer # 实例化 Tokenizer tokenizer Tokenizer(tokens) print(tokenizer_len: ,len(tokenizer))# 实例化MyDataset my_dataset MyDataset(poetry, tokenizer) one_line_id my_dataset[0].tolist() print(one_line_id: , one_line_id)# 解码 poetry_line tokenizer.decode(one_line_id) print(poetry_line: ,.join([w for w in poetry_line if w ! Tokenizer.PAD]))tokenizer_len: 3428 one_line_id: [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 9, 21, 22, 23, 24, 25, 15, 26, 27, 28, 29, 30, 9, 31, 32, 33, 34, 35, 15, 36, 37, 16, 38, 39, 9, 40, 41, 42, 43, 44, 15, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] poetry_line: 寒随穷律变春逐鸟声开。初风飘带柳晚雪间花梅。碧林青旧竹绿沼翠新苔。芝田初雁去绮树巧莺来。使用 DataLoader # 读取一批数据并解码 temp_dataloader DataLoader(datasetmy_dataset, batch_size8, shuffleTrue)one_batch_data next(iter(temp_dataloader))for poetry_line_id in one_batch_data.tolist():poetry_line tokenizer.decode(poetry_line_id)print(.join([w for w in poetry_line if w ! Tokenizer.PAD]))曲江春草生紫阁雪分明。汲井尝泉味听钟问寺名。墨研秋日雨茶试老僧unknown。地近劳频访乌纱出送迎。 旧隐无何别归来始更悲。难寻白道士不见惠禅师。草径虫鸣急沙渠水下迟。却将波浪眼清晓对红梨。 举世皆问人唯师独求己。一马无四蹄顷刻行千里。应笑北原上丘坟乱如蚁。 海燕西飞白日斜天门遥望五侯家。楼台深锁无人到落尽春风第一花。 良人犹远戍耿耿夜闺空。绣户流宵月罗帷坐晓风。魂飞沙帐北肠断玉关中。尚自无消息锦衾那得同。 天涯片云去遥指帝乡忆。惆怅增暮情潇湘复秋色。扁舟宿何处落日羡归翼。万里无故人江鸥不相识。 宝鸡辞旧役仙凤历遗墟。去此近城阙青山明月初。 夜帆时未发同侣暗相催。山晓月初下江鸣潮欲来。稍分扬子岸不辨越王台。自客水乡里舟行知几回。5. 构建模型 位置编码器 PositionalEncoding class PositionalEncoding(nn.Module):def __init__(self, d_model, dropout, max_len2000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(pdropout)# 初始化Shape为(max_len, d_model)的PE (positional encoding)pe torch.zeros(max_len, d_model)# 初始化一个tensor [[0, 1, 2, 3, ...]]position torch.arange(0, max_len).unsqueeze(1)# 这里就是sin和cos括号中的内容通过e和ln进行了变换div_term torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))# 计算PE(pos, 2i)pe[:, 0::2] torch.sin(position * div_term)# 计算PE(pos, 2i1)pe[:, 1::2] torch.cos(position * div_term)# 为了方便计算在最外面在unsqueeze出一个batchpe pe.unsqueeze(0)# 如果一个参数不参与梯度下降但又希望保存model的时候将其保存下来这个时候就可以用register_bufferself.register_buffer(pe, pe)def forward(self, x):x 为embedding后的inputs例如(1,7, 128)batch size为1,7个单词单词维度为128# 将x和positional encoding相加。x x self.pe[:, : x.size(1)].requires_grad_(False)return self.dropout(x)古诗 Transformer 模型 class PoetryModel(nn.Module):def __init__(self, num_embeddings 4096, embedding_dim128):super(PoetryModel, self).__init__()# Embedding层self.embedding nn.Embedding(num_embeddingsnum_embeddings, embedding_dimembedding_dim)# 定义Transformerself.transformer nn.Transformer(d_modelembedding_dim, num_encoder_layers3, num_decoder_layers3, dim_feedforward512)# 定义位置编码器self.positional_encoding PositionalEncoding(embedding_dim, dropout0)# 线性层输出需要和原始词典的字符编号范围对应self.predictor nn.Linear(embedding_dim, num_embeddings)def forward(self, src, tgt):# 生成 Masktgt_mask nn.Transformer.generate_square_subsequent_mask(tgt.size()[-1]).to(DEVICE)src_key_padding_mask PoetryModel.get_key_padding_mask(src).to(DEVICE)tgt_key_padding_mask PoetryModel.get_key_padding_mask(tgt).to(DEVICE)# 编码src self.embedding(src)tgt self.embedding(tgt)# 增加位置信息src self.positional_encoding(src)tgt self.positional_encoding(tgt)# 喂数据给 Transformer# permute(1, 0, 2) 切换成 批次 在中间维度的形式因为没有设置batch_firstout self.transformer(src.permute(1, 0, 2), tgt.permute(1, 0, 2),tgt_masktgt_mask,src_key_padding_masksrc_key_padding_mask,tgt_key_padding_masktgt_key_padding_mask)# 训练和推理时的行为不一样在该模型外再进行线性层的预测return outstaticmethoddef get_key_padding_mask(tokens):key_padding_mask torch.zeros(tokens.size())key_padding_mask[tokens Tokenizer.PAD] float(-inf)return key_padding_mask6. 开始训练 准备参数、数据、模型 # 参数配置 EPOCH_NUM 50 BATCH_SIZE 64 # 内存不够的话就把BATCH_SIZE调小点 DICT_SIZE len(tokenizer) DEVICE torch.device(cuda:0 if torch.cuda.is_available() else cpu)# 数据 my_dataset MyDataset(poetry, tokenizer) train_dataloader DataLoader(datasetmy_dataset, batch_sizeBATCH_SIZE, shuffleTrue)# 模型 model PoetryModel(num_embeddingsDICT_SIZE).to(DEVICE) criteria nn.CrossEntropyLoss() optimizer torch.optim.Adam(model.parameters(), lr5e-4)print(model)PoetryModel((embedding): Embedding(3428, 128)(transformer): Transformer((encoder): TransformerEncoder((layers): ModuleList((0-2): 3 x TransformerEncoderLayer((self_attn): MultiheadAttention((out_proj): NonDynamicallyQuantizableLinear(in_features128, out_features128, biasTrue))(linear1): Linear(in_features128, out_features512, biasTrue)(dropout): Dropout(p0.1, inplaceFalse)(linear2): Linear(in_features512, out_features128, biasTrue)(norm1): LayerNorm((128,), eps1e-05, elementwise_affineTrue)(norm2): LayerNorm((128,), eps1e-05, elementwise_affineTrue)(dropout1): Dropout(p0.1, inplaceFalse)(dropout2): Dropout(p0.1, inplaceFalse)))(norm): LayerNorm((128,), eps1e-05, elementwise_affineTrue))(decoder): TransformerDecoder((layers): ModuleList((0-2): 3 x TransformerDecoderLayer((self_attn): MultiheadAttention((out_proj): NonDynamicallyQuantizableLinear(in_features128, out_features128, biasTrue))(multihead_attn): MultiheadAttention((out_proj): NonDynamicallyQuantizableLinear(in_features128, out_features128, biasTrue))(linear1): Linear(in_features128, out_features512, biasTrue)(dropout): Dropout(p0.1, inplaceFalse)(linear2): Linear(in_features512, out_features128, biasTrue)(norm1): LayerNorm((128,), eps1e-05, elementwise_affineTrue)(norm2): LayerNorm((128,), eps1e-05, elementwise_affineTrue)(norm3): LayerNorm((128,), eps1e-05, elementwise_affineTrue)(dropout1): Dropout(p0.1, inplaceFalse)(dropout2): Dropout(p0.1, inplaceFalse)(dropout3): Dropout(p0.1, inplaceFalse)))(norm): LayerNorm((128,), eps1e-05, elementwise_affineTrue)))(positional_encoding): PositionalEncoding((dropout): Dropout(p0, inplaceFalse))(predictor): Linear(in_features128, out_features3428, biasTrue) )训练 for epoch in range(1, EPOCH_NUM 1):model.train()total_loss 0data_progress tqdm.tqdm(train_dataloader, descTrain...)for step, data in enumerate(data_progress, 1):data data.to(DEVICE)# 随机选一个位置拆分src和tgte random.randint(1, 20)src data[:, :e]# tgt不要最后一个tokentgt_y不要第一个的tokentgt, tgt_y data[:, e:-1], data[:, e 1:]# 进行Transformer的计算再将结果送给最后的线性层进行预测out model(src, tgt)out model.predictor(out)# 使用view时前面的数据必须是在内存连续的即is_contiguous()为true# 使用permute后会导致数据不是内存连续的即is_contiguous()为false需要先调用contiguous()才能继续使用viewloss criteria(out.view(-1, out.size(-1)), tgt_y.permute(1, 0).contiguous().view(-1))optimizer.zero_grad()loss.backward()optimizer.step()total_loss loss.item()# 更新训练进度data_progress.set_description(fTrain... [epoch {epoch}/{EPOCH_NUM}, loss {(total_loss / step):.5f}])Train... [epoch 1/50, loss 3.66444]: 100%|██████████| 381/381 [00:1000:00, 35.40it/s] Train... [epoch 2/50, loss 3.35216]: 100%|██████████| 381/381 [00:0900:00, 39.61it/s] Train... [epoch 3/50, loss 3.27860]: 100%|██████████| 381/381 [00:0900:00, 39.44it/s] Train... [epoch 4/50, loss 3.15286]: 100%|██████████| 381/381 [00:0900:00, 39.10it/s] Train... [epoch 5/50, loss 3.05621]: 100%|██████████| 381/381 [00:0900:00, 39.32it/s] Train... [epoch 6/50, loss 2.97613]: 100%|██████████| 381/381 [00:0900:00, 39.42it/s] Train... [epoch 7/50, loss 2.91857]: 100%|██████████| 381/381 [00:0900:00, 38.83it/s] Train... [epoch 8/50, loss 2.88052]: 100%|██████████| 381/381 [00:0900:00, 39.59it/s] Train... [epoch 9/50, loss 2.78789]: 100%|██████████| 381/381 [00:0900:00, 39.19it/s] Train... [epoch 10/50, loss 2.77379]: 100%|██████████| 381/381 [00:0900:00, 38.24it/s] ...... Train... [epoch 41/50, loss 2.25991]: 100%|██████████| 381/381 [00:0900:00, 39.89it/s] Train... [epoch 42/50, loss 2.24437]: 100%|██████████| 381/381 [00:0900:00, 39.72it/s] Train... [epoch 43/50, loss 2.23779]: 100%|██████████| 381/381 [00:0900:00, 39.09it/s] Train... [epoch 44/50, loss 2.25092]: 100%|██████████| 381/381 [00:0900:00, 39.16it/s] Train... [epoch 45/50, loss 2.23653]: 100%|██████████| 381/381 [00:0900:00, 39.90it/s] Train... [epoch 46/50, loss 2.20175]: 100%|██████████| 381/381 [00:0900:00, 39.51it/s] Train... [epoch 47/50, loss 2.22046]: 100%|██████████| 381/381 [00:0900:00, 39.83it/s] Train... [epoch 48/50, loss 2.20892]: 100%|██████████| 381/381 [00:0900:00, 39.84it/s] Train... [epoch 49/50, loss 2.22276]: 100%|██████████| 381/381 [00:0900:00, 39.35it/s] Train... [epoch 50/50, loss 2.20212]: 100%|██████████| 381/381 [00:0900:00, 39.75it/s]7. 推理 直接推理 model.eval() with torch.no_grad():word_ids tokenizer.encode(清明时节)src torch.LongTensor([word_ids[:-2]]).to(DEVICE)tgt torch.LongTensor([word_ids[-2:-1]]).to(DEVICE)# 一个一个词预测直到预测为eos或者达到句子最大长度for i in range(64):out model(src, tgt)# 预测结果只需最后一个词predict model.predictor(out[-1:])# 找出最大值的indexy torch.argmax(predict, dim2)# 和之前的预测结果拼接到一起tgt torch.cat([tgt, y], dim1)# 如果为eosif y tokenizer.eos_id:breaksrc_decode .join([w for w in tokenizer.decode(src[0].tolist()) if w ! Tokenizer.PAD])print(fsrc {src}, src_decode {src_decode})tgt_decode .join([w for w in tokenizer.decode(tgt[0].tolist()) if w ! Tokenizer.PAD])print(ftgt {tgt} tgt_decode {tgt_decode})src tensor([[ 2, 403, 235, 293]], devicecuda:0), src_decode 清明时 tgt tensor([[ 197, 9, 571, 324, 571, 116, 14, 15, 61, 770, 158, 514,934, 9, 228, 293, 493, 1108, 44, 15, 3]],devicecuda:0) tgt_decode 节一夜一枝开。不是无人见何时有鹤来。为推理添加随机性 def predict(model, src, tgt):out model(src, tgt)# 预测结果只需最后一个词# 取3:表示预测结果不要UNKNOWN、PAD、BOS_probas model.predictor(out[-1:])[0, 0, 3:]_probas torch.exp(_probas) / torch.exp(_probas).sum() # softmax让概率高的变得更高便于待会儿按概率抽取时更容易抽取到概率高的# 取前10再按概率分布抽取1个提高诗词随机性values, indices torch.topk(_probas, 10, dim0)target_index torch.multinomial(values, 1, replacementTrue)y indices[target_index]# 3因为之前移除掉了UNKNOWN、PAD、BOSreturn y 3def generate_random_poem(tokenizer, model, text):随机生成一首诗、自动续写if text None or text :text tokenizer.id_to_token(random.randint(4, len(tokenizer)))model.eval()with torch.no_grad():word_ids tokenizer.encode(text)src torch.LongTensor([word_ids[:-2]]).to(DEVICE)tgt torch.LongTensor([word_ids[-2:-1]]).to(DEVICE)# 一个一个词预测直到预测为eos或者达到句子最大长度for i in range(64):y predict(model, src, tgt)# 和之前的预测结果拼接到一起tgt torch.cat([tgt, y.view(1, 1)], dim1)# 如果为eosif y tokenizer.eos_id:break# src_decode .join([w for w in tokenizer.decode(src[0].tolist()) if w ! Tokenizer.PAD])# print(fsrc {src}, src_decode {src_decode})# tgt_decode .join([w for w in tokenizer.decode(tgt[0].tolist()) if w ! Tokenizer.PAD])# print(ftgt {tgt} tgt_decode {tgt_decode})result torch.cat([src, tgt], dim1)result_decode .join([w for w in tokenizer.decode(result[0].tolist()) if w ! Tokenizer.PAD])return result_decodefor i in range(0, 5):poetry_line generate_random_poem(tokenizer, model, 清明)print(poetry_line)清明日已长安不独为君一病身。唯有诗人知处在更愁人夜月明。 清明月在何时夜久山川有谁。今日不知名利处一枝花落第花枝。 清明月上风急水声。山月随人远天河度陇平。水深秋月在江远夜砧迎。莫问东楼兴空怀不可情。 清明夜夜月秋月满池塘。夜坐中琴月空阶下菊香。风回孤枕月月冷一枝香。惆怅江南客明朝是此中。生成藏头诗的代码请参考之前写的文章 TensorFlow2 学习——RNN生成古诗词_rnn古诗生成头词汇是 “ 日 、 红 、 山 、 夜 、 湖、 海 、 月 。-CSDN博客 8. 更多学习资料 相关文章 https://blog.csdn.net/zhaohongfei_358/article/details/126019181https://blog.csdn.net/zhaohongfei_358/article/details/122861751https://zhuanlan.zhihu.com/p/554013449 相关视频 https://www.bilibili.com/video/BV1Wv411h7kN?p38https://www.bilibili.com/video/BV1Wv411h7kN/?p49 PyTorch官方 https://pytorch.org/tutorials/beginner/transformer_tutorial.html
http://www.pierceye.com/news/495156/

相关文章:

  • 网站搜索优化官网网站建设在电子商务中的作用的看法
  • 网站推广费用价格html大屏展示模板
  • 编辑网站用什么软件网站开发人员职责
  • 网站搜索引擎提交wordpress发布站点
  • 阳春网站建设天水网站seo
  • 仙桃市建设局网站wordpress链接前面的图标
  • 温州市城乡建设建档案馆网站公司装修费用可以一次性入账吗
  • 房地产开发公司网站宠物网页设计模板
  • 网站备案信息可以改吗中国做二手房最大的网站
  • 设计 企业网站罗湖网站-建设深圳信科
  • 太原自助模板建站手机版电脑qq登录入口
  • 公司网站建设哪家比较好app 网站
  • 建设银行个人网站打不开个人主页模板下载
  • 山西建设公司网站wordpress视频适应手机端
  • 原型样网站做一般的公司门户网站投资额
  • 南宁百度网站公司电话网站配置优化
  • 德州网站建设的公司免费注册公司怎么注册
  • 成都开发网站建设中国建设规划采购网站
  • 企业网站建设应避免数据孤岛深圳东莞网站建设
  • pk10网站怎么做郑州seo费用
  • 菏泽市建设局网站电话网站建设服务咨询
  • 购物网站模版广州外贸网络推广
  • 高碑店网站网站建设手机软件开发的模式
  • 公司网站开发国内外现状网络营销外包团队哪些好
  • 淘客网站怎么建立如何用api做网站
  • 合肥网站建设ahyedawordpress主题安全
  • 网站建设实训室介绍东莞seo广告宣传
  • 公职人员可以做公益网站吗aws网站建设
  • 什么叫高端网站定制广州建筑公司
  • 全新网站如何做百度竞价网站制作现状解决方案