凤冈县住房和城乡建设局网站,网上申请营业执照,泉州网站制作报价,南京建设工程网站1、深度循环神经网络 1.1、基本思想 能捕捉数据中更复杂模式并更好地处理长期依赖关系。 深度分层模型比浅层模型更有效率。 Deep RNN比传统RNN表征能力更强。 那么该如何引入深层结构呢#xff1f; 传统的RNN在每个时间步的迭代都可以分为三个部分#xff1a; 1.2、三种深层… 1、深度循环神经网络 1.1、基本思想 能捕捉数据中更复杂模式并更好地处理长期依赖关系。 深度分层模型比浅层模型更有效率。 Deep RNN比传统RNN表征能力更强。 那么该如何引入深层结构呢 传统的RNN在每个时间步的迭代都可以分为三个部分 1.2、三种深层方式 在传统RNN中这三处都没有中间层变换函数都是线性变换紧跟着一个非线性函数也就是所谓的浅层变换。 所以就有三种思路来看看各个思路的变体 DT-RNN 这样的好处就是它允许隐变量 ht 适应输入模式 xt 的快速变换而且它保留了对过去训练的提炼和总结。 既能适应新变换又不忘初心。这种高度非线性转换可以通过若干个 MLP 全连接层多层感知机来实现。 DT(S) - RNN 由于DT-RNN增加了Loss的梯度沿着时间反向传播时需要遍历更多的非线性的步数。 DOT-RNN Stacked RNN 模型比较 DT-RNN 和 Stacked RNN 是正交的 堆叠的RNN可以出来输入序列中多个时间尺度而DT-RNN做不到但是如果将多个DT-RNN堆叠起来他就可以同时拥有DT-RNN和Stacked RNN 的能力了。 小结 在传统RNN的基础上增加多个浅变换结构的隐藏层实现对复杂特征更有效的捕捉和处理。 2、双向循环神经网络 2.1、单向RNN的局限 多数RNN只有一个因果结构 许多应用中输出预测可能依赖整个输入序列 往往需要捕捉序列中上下文之间的关系 2.2、双向网络结构 —— 两个互相叠加的RNN 输入不仅取决于先前还取决于未来。 六个权重矩阵。 2.3、训练过程 两遍运算输入翻转。 2.4、主要特点分析 使用来自序列两端的信息来估计输出 前向传播需要在双向层中进行反向传播依赖前向传播结果 计算速度慢梯度求解链很长训练代价高 主要用于序列编码和双向上下文观测统计。 3、长短期记忆网络 LSTM Long-Short Term Memory 3.1、RNN的问题 处理长序列数据时会有梯度消失或爆炸的问题权重矩阵连乘 RNN的计算效率相对较低。 长时间以前的记忆基本对现在没有什么影响了。 3.2、基本思想 保留较长序列数据中重要信息忽略不重要信息。 RNN都有重复链式结构 标准RNN结构简单 LSTM链式结构特殊 3.3、门控记忆单元 门(gate)控制记忆单元信息可以沿着这个链条传送。 原来的RNN隐藏层中只有一个状态 h 它对短期输入是很敏感的。 现在人为添加状态 c 来保持长期记忆。 打个比方来讲底下的短期链条相当于时刻发生的事情上面的链条相当于日记本记录了长期的记忆 Cells statement 。 那该怎么控制这种长期的状态 c 呢 在任意的时刻 t 我们需要三件事情 t-1 时刻传入的状态 c t-1 中要决定有多少信息需要保留 当前时刻的输入信息有多少需要传递到 t1 时刻 当前时刻的隐层输出 ht 是什么。 ———— LSTM专门设计了 GRU门控记忆单元 来控制信息的保留和丢弃。具体来说包括了三种门。每个门就是选择信息通过的方式。 先来介绍下他们的基本工作原理之所以称之为门一定要有一个控制信号每个门是由一个sigmoid神经网络层以及逐点乘法运算组成的。 三个门的作用可以分别理解为橡皮擦擦除一些没有用的记忆、铅笔写上一些新的记忆、再输出。 1、遗忘门forget gate 决定去除那些信息。过滤重要的信息忽略无关的信息。 h t-1上一时刻记忆的状态 x t当前时间步输入的信息 这两个的加权和经过一个sigmiod函数产生遗忘门的输出 f t 再作用到 c t-1。 因为 f t 是一个0到1之间的数橡皮擦相当于对 c t-1 里面的信息进行了一些选择。 2、输入门 input gate 决定什么新的信息将被保留下来。 在日记本上增加那些记录。 sigmiod层决定我们将更新哪些值 tanh 层 创建一个新的候选值向量。 输入门和候选记忆单元联合更新状态。 用橡皮在日记本上删减再用铅笔添加记录。最后得到了新的长期记忆 c t 。 3、输出门output gate 控制记忆细胞更新时所使用的输入信息。 日记更新当前短期记忆。 控制长期记忆更新并输出给短期记忆 h t 。 先运行一个 sigmoid 层决定要输出 cell 状态的哪些部分 o t 告诉长期记忆哪些部分要去输出 将cell状态 o t 加上tanh函数之后得到输出 h t 。 tanh函数将c t 值推到 -1 到 1之间。 4、门控循环单元 GRU Gated Recurrent Unit 2014年提出主要针对LSTM模型计算比较复杂容易出现梯度消失或爆炸等问题进行改进。 4.1、与LSTM的区别 1、将LSTM原来的三个门简化成为两个重置门和更新门 2、不保留单元状态只保留隐藏状态作为单元输出 3、重置门直接作用于前一时刻的隐藏状态 4.2、基本原理 引入了两种“门”来控制信息的流动即重置门(reset gate) 和更新门 (update gate。 这两种门都是由一个神经元组成的通过对输入和上一时刻隐藏状态进行计算来得到当前时刻的输出。 4.2.1、重置门Reset Gate 用来决定从上一时刻的隐藏状态中“复制”多少信息。 重置门的输出值在0到1之间表示从上一时刻的隐藏状态中复制的信息量。 4.2.2、更新门 (Update Gate 用来决定从上一时刻的隐藏状态中“更新”多少信息。 4.2.3、候选隐状态 候选隐状态是用来计算当前时刻隐藏状态的一个中间结果将当前时刻的输入与上一时刻隐藏状态结合起来从而得到当前时刻隐藏状态输出 h t 。 由当前时刻的输入 x t 和上一时刻的隐藏状态 h t-1 通过权重矩阵和偏置向量计算向量得到并且通过 tanh 函数得到。 中间小圆圈表示的是元素级别的乘法运算不同于矩阵乘法。 在计算当前时刻的隐藏状态 h t 时会与更新门的输出 z t 一起计算 当 z t 比较大时隐藏状态会更多的使用候选隐状态反之则使用上一时刻的隐藏状态 h t-1 4.2.4、隐状态 模型在处理序列数据时记录的当前时刻之前的信息。 隐状态在计算中主要有两个作用 1、记录序列数据的上下文信息帮助模型更好的处理序列数据。 2、控制信息流动来解决梯度消失和梯度爆炸的问题提高模型效率。 4.3、计算步骤 1、计算重置门输出 rt 2、计算更新门输出 zt 3、计算候选隐状态 注意私用tanh 和元素级相乘 4、计算最终隐藏层输出 ht 5、复杂RNN代码实现 DRNN-更深的网络结构 BRNN-双向的训练方向 LSTM-更强的记忆能力 GRU-更简洁而高效 5.1. 模型定义
1.1 深度循环神经网络
rnn模型默认激活函数是tanh会得到loss太大了模型几乎无法拟合样本这是由于
数据集中 收盘价 Close 非常大这样会导致rnn模型很容易出现 梯度消失和梯度爆炸。
我们可以通过修改激活函数来解决初始化 加入 nonlinearity relu。
或者可以对数据进行归一化。若结果依旧不好可能是因为学习率设置过大一开始是0.1。但是如果出现没有拟合是因为不能拟合原始数据了要拟合归一化后的x。
from torch import nn
from tqdm import *class DRNN(nn.Module):def __init__(self, input_size, output_size, hidden_size, num_layers):super(DRNN, self).__init__()self.hidden_size hidden_sizeself.num_layers num_layersself.rnn nn.RNN(input_size, hidden_size, num_layers, batch_firstTrue) # batch_first 为 True时output的tensor为batch,seq,feature,否则为seq,batch,featureself.linear nn.Linear(hidden_size, output_size)def forward(self, x):# 初始化隐藏状态和细胞状态state torch.zeros(self.num_layers, x.size(0), self.hidden_size)# 计算输出和最终隐藏状态output, _ self.rnn(x, state)output self.linear(output)return output
# 网络结构
model DRNN(16, 16, 64, 2)
for name,parameters in model.named_parameters():print(name,:,parameters.size())
rnn.weight_ih_l0 : torch.Size([64, 16])
rnn.weight_hh_l0 : torch.Size([64, 64])
rnn.bias_ih_l0 : torch.Size([64])
rnn.bias_hh_l0 : torch.Size([64])
rnn.weight_ih_l1 : torch.Size([64, 64])
rnn.weight_hh_l1 : torch.Size([64, 64])
rnn.bias_ih_l1 : torch.Size([64])
rnn.bias_hh_l1 : torch.Size([64])
linear.weight : torch.Size([16, 64])
linear.bias : torch.Size([16])1.2 双向循环神经网络
class BRNN(nn.Module):def __init__(self, input_size, output_size, hidden_size, num_layers):super(BRNN, self).__init__()self.hidden_size hidden_sizeself.num_layers num_layersself.rnn nn.RNN(input_size, hidden_size, num_layers, batch_firstTrue, bidirectionalTrue) # bidirectional为True是双向self.linear nn.Linear(hidden_size * 2, output_size) # 双向网络因此有双倍hidden_sizedef forward(self, x):# 初始化隐藏状态state torch.zeros(self.num_layers * 2, x.size(0), self.hidden_size) # 需要双倍的隐藏层output, _ self.rnn(x, state)output self.linear(output)return output
# 网络结构
model BRNN(16, 16, 64, 2)
for name,parameters in model.named_parameters():print(name,:,parameters.size())
隐藏层的维度64
rnn.weight_ih_l0 : torch.Size([64, 16])
rnn.weight_hh_l0 : torch.Size([64, 64])
rnn.bias_ih_l0 : torch.Size([64])
rnn.bias_hh_l0 : torch.Size([64])
rnn.weight_ih_l0_reverse : torch.Size([64, 16])
rnn.weight_hh_l0_reverse : torch.Size([64, 64])
rnn.bias_ih_l0_reverse : torch.Size([64])
rnn.bias_hh_l0_reverse : torch.Size([64])
rnn.weight_ih_l1 : torch.Size([64, 128])
rnn.weight_hh_l1 : torch.Size([64, 64])
rnn.bias_ih_l1 : torch.Size([64])
rnn.bias_hh_l1 : torch.Size([64])
rnn.weight_ih_l1_reverse : torch.Size([64, 128])
rnn.weight_hh_l1_reverse : torch.Size([64, 64])
rnn.bias_ih_l1_reverse : torch.Size([64])
rnn.bias_hh_l1_reverse : torch.Size([64])
linear.weight : torch.Size([16, 128])
linear.bias : torch.Size([16])1.3 长短期记忆网络
class LSTM(nn.Module):def __init__(self, input_size, output_size, hidden_size, num_layers):super(LSTM, self).__init__()self.hidden_size hidden_sizeself.num_layers num_layersself.lstm nn.LSTM(input_size, hidden_size, num_layers, batch_firstTrue) # LSTMself.linear nn.Linear(hidden_size, output_size)def forward(self, x):output, _ self.lstm(x)output self.linear(output)return output
# 网络结构
model LSTM(16, 16, 64, 2)
for name,parameters in model.named_parameters():print(name,:,parameters.size())
隐藏层的维度 256 四个矩阵 f i c o4个64的维度。
lstm.weight_ih_l0 : torch.Size([256, 16])
lstm.weight_hh_l0 : torch.Size([256, 64])
lstm.bias_ih_l0 : torch.Size([256])
lstm.bias_hh_l0 : torch.Size([256])
lstm.weight_ih_l1 : torch.Size([256, 64])
lstm.weight_hh_l1 : torch.Size([256, 64])
lstm.bias_ih_l1 : torch.Size([256])
lstm.bias_hh_l1 : torch.Size([256])
linear.weight : torch.Size([16, 64])
linear.bias : torch.Size([16])1.4 门控循环单元
class GRU(nn.Module):def __init__(self, input_size, output_size, hidden_size, num_layers):super(GRU, self).__init__()self.hidden_size hidden_sizeself.num_layers num_layersself.gru nn.GRU(input_size, hidden_size, num_layers, batch_firstTrue) # GRUself.linear nn.Linear(hidden_size, output_size)def forward(self, x):output, _ self.gru(x)output self.linear(output)return output
# 网络结构
model GRU(16, 16, 64, 2)
for name,parameters in model.named_parameters():print(name,:,parameters.size())
两个门~ r h z即 64x3
gru.weight_ih_l0 : torch.Size([192, 16])
gru.weight_hh_l0 : torch.Size([192, 64])
gru.bias_ih_l0 : torch.Size([192])
gru.bias_hh_l0 : torch.Size([192])
gru.weight_ih_l1 : torch.Size([192, 64])
gru.weight_hh_l1 : torch.Size([192, 64])
gru.bias_ih_l1 : torch.Size([192])
gru.bias_hh_l1 : torch.Size([192])
linear.weight : torch.Size([16, 64])
linear.bias : torch.Size([16])5.2. 模型实验
2.1 数据集加载
import pandas_datareader as pdr
dji pdr.DataReader(^DJI, stooq)
dji
OpenHighLowCloseVolumeDate2023-02-1033671.5433897.3133591.9933869.27289863415.02023-02-0934105.6134252.5733607.1333699.88352340883.02023-02-0834132.9034161.6533899.7933949.01331798754.02023-02-0733769.7834240.0033634.1034156.69362844008.02023-02-0633874.4433962.8433683.5833891.02297051674.0..................2018-02-2025124.9125179.0124884.1924964.75421529658.02018-02-1625165.9425432.4225149.2625219.38406774321.02018-02-1525047.8225203.9524809.4225200.37416778260.02018-02-1424535.8224925.9524490.3624893.49431152512.02018-02-1324540.3324705.7224421.0324640.45374415694.0
1258 rows × 5 columns
import matplotlib.pyplot as plt
plt.plot(dji[Close])
plt.show() import torch
from torch.utils.data import DataLoader, TensorDatasetnum len(dji) # 总数据量
x torch.tensor(dji[Close].to_list()) # 股价列表x (x - torch.mean(x)) / torch.std(x) #数据归一化seq_len 16 # 预测序列长度
batch_size 16 # 设置批大小X_feature torch.zeros((num - seq_len, seq_len)) # 构建特征矩阵num-seq_len行seq_len列初始值均为0
Y_label torch.zeros((num - seq_len, seq_len)) # 构建标签矩阵形状同特征矩阵
for i in range(seq_len):X_feature[:, i] x[i: num - seq_len i] # 为特征矩阵赋值Y_label[:, i] x[i1: num - seq_len i 1] # 为标签矩阵赋值train_loader DataLoader(TensorDataset(X_feature[:num-seq_len].unsqueeze(2), Y_label[:num-seq_len]),batch_sizebatch_size, shuffleTrue) # 构建数据加载器
# 定义超参数
input_size 1
output_size 1
num_hiddens 64
n_layers 2
lr 0.001# 建立模型
model DRNN(input_size, output_size, num_hiddens, n_layers)
criterion nn.MSELoss(reductionnone)
trainer torch.optim.Adam(model.parameters(), lr)
# 训练轮次
num_epochs 20
rnn_loss_history []for epoch in tqdm(range(num_epochs)):# 批量训练for X, Y in train_loader:trainer.zero_grad()y_pred model(X)loss criterion(y_pred.squeeze(), Y.squeeze())loss.sum().backward()trainer.step()# 输出损失model.eval()with torch.no_grad():total_loss 0for X, Y in train_loader:y_pred model(X)loss criterion(y_pred.squeeze(), Y.squeeze())total_loss loss.sum()/loss.numel()avg_loss total_loss / len(train_loader)print(fEpoch {epoch1}: Validation loss {avg_loss:.4f})rnn_loss_history.append(avg_loss)# 绘制损失曲线图
import matplotlib.pyplot as plt
# plt.plot(loss_history, labelloss)
plt.plot(rnn_loss_history, labelRNN_loss)
plt.legend()
plt.show() 5%|▌ | 1/20 [00:0000:08, 2.30it/s]Epoch 1: Validation loss 0.018010%|█ | 2/20 [00:0000:07, 2.29it/s]Epoch 2: Validation loss 0.008315%|█▌ | 3/20 [00:0100:07, 2.29it/s]Epoch 3: Validation loss 0.008120%|██ | 4/20 [00:0100:06, 2.29it/s]Epoch 4: Validation loss 0.007925%|██▌ | 5/20 [00:0200:06, 2.29it/s]Epoch 5: Validation loss 0.007830%|███ | 6/20 [00:0200:06, 2.28it/s]Epoch 6: Validation loss 0.007735%|███▌ | 7/20 [00:0300:05, 2.27it/s]Epoch 7: Validation loss 0.008140%|████ | 8/20 [00:0300:05, 2.28it/s]Epoch 8: Validation loss 0.008045%|████▌ | 9/20 [00:0300:04, 2.28it/s]Epoch 9: Validation loss 0.007850%|█████ | 10/20 [00:0400:04, 2.25it/s]Epoch 10: Validation loss 0.008055%|█████▌ | 11/20 [00:0400:03, 2.25it/s]Epoch 11: Validation loss 0.007960%|██████ | 12/20 [00:0500:03, 2.25it/s]Epoch 12: Validation loss 0.007965%|██████▌ | 13/20 [00:0500:03, 2.27it/s]Epoch 13: Validation loss 0.007770%|███████ | 14/20 [00:0600:02, 2.25it/s]Epoch 14: Validation loss 0.008275%|███████▌ | 15/20 [00:0600:02, 2.26it/s]Epoch 15: Validation loss 0.008080%|████████ | 16/20 [00:0700:01, 2.25it/s]Epoch 16: Validation loss 0.007785%|████████▌ | 17/20 [00:0700:01, 2.26it/s]Epoch 17: Validation loss 0.007890%|█████████ | 18/20 [00:0700:00, 2.28it/s]Epoch 18: Validation loss 0.007695%|█████████▌| 19/20 [00:0800:00, 2.28it/s]Epoch 19: Validation loss 0.0076
100%|██████████| 20/20 [00:0800:00, 2.27it/s]Epoch 20: Validation loss 0.0076 rnn_preds model(X_feature.unsqueeze(2))
rnn_preds.squeeze()
time torch.arange(1, num1, dtype torch.float32) # 时间轴plt.plot(time[:num-seq_len], x[seq_len:num], labeldji)
# plt.plot(time[:num-seq_len], preds.detach().numpy(), labelpreds)
plt.plot(time[:num-seq_len], rnn_preds[:,seq_len-1].detach(), labelRNN_preds)
plt.legend()
plt.show() 5.3 效果对比
# 定义超参数
input_size 1
output_size 1
num_hiddens 64
n_layers 2
lr 0.001# 建立模型
model_name [DRNN, BRNN, LSTM, GRU]
drnn DRNN(input_size, output_size, num_hiddens, n_layers)
brnn BRNN(input_size, output_size, num_hiddens, n_layers)
lstm LSTM(input_size, output_size, num_hiddens, n_layers)
gru GRU(input_size, output_size, num_hiddens, n_layers)
models [drnn, brnn, lstm, gru]opts [torch.optim.Adam(drnn.parameters(), lr), torch.optim.Adam(brnn.parameters(), lr), torch.optim.Adam(lstm.parameters(), lr), torch.optim.Adam(gru.parameters(), lr)]
criterion nn.MSELoss(reductionnone)num_epochs 20
rnn_loss_history []
lr 0.1
for epoch in tqdm(range(num_epochs)):# 批量训练for X, Y in train_loader:for index, model, optimizer in zip(range(len(models)), models, opts):y_pred model(X)loss criterion(y_pred.squeeze(), Y.squeeze())trainer.zero_grad()loss.sum().backward()trainer.step()
100%|██████████| 20/20 [00:5900:00, 2.95s/it]for i in range(4):rnn_preds models[i](X_feature.unsqueeze(2))bias torch.sum(x[seq_len:num] - rnn_preds[:,seq_len-1].detach().numpy())print ({} bias : {}.format(model_name[i],str(bias)))
DRNN bias : tensor(125995.9453)
BRNN bias : tensor(-24902.6758)
LSTM bias : tensor(130150.6797)
GRU bias : tensor(102981.3438)参考来源
Chapter-10/10.5 复杂循环神经网络代码实现.ipynb · 梗直哥/Deep-Learning-Code - Gitee.com 文章转载自: http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn http://www.morning.bysey.com.gov.cn.bysey.com http://www.morning.xhlht.cn.gov.cn.xhlht.cn http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.krbjb.cn.gov.cn.krbjb.cn http://www.morning.xsctd.cn.gov.cn.xsctd.cn http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.xczyj.cn.gov.cn.xczyj.cn http://www.morning.zsthg.cn.gov.cn.zsthg.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.byjwl.cn.gov.cn.byjwl.cn http://www.morning.qsy38.cn.gov.cn.qsy38.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.nmkfy.cn.gov.cn.nmkfy.cn http://www.morning.wrtxk.cn.gov.cn.wrtxk.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.qrsm.cn.gov.cn.qrsm.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.pnjsl.cn.gov.cn.pnjsl.cn http://www.morning.vjdofuj.cn.gov.cn.vjdofuj.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.lmyq.cn.gov.cn.lmyq.cn http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.cflxx.cn.gov.cn.cflxx.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.taipinghl.cn.gov.cn.taipinghl.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.cdlewan.com.gov.cn.cdlewan.com http://www.morning.xsrnr.cn.gov.cn.xsrnr.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn http://www.morning.bmhc.cn.gov.cn.bmhc.cn http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com http://www.morning.krxzl.cn.gov.cn.krxzl.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.tsrg.cn.gov.cn.tsrg.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.wljzr.cn.gov.cn.wljzr.cn http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn http://www.morning.tgmwy.cn.gov.cn.tgmwy.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn http://www.morning.mwjwy.cn.gov.cn.mwjwy.cn http://www.morning.zdhxm.com.gov.cn.zdhxm.com http://www.morning.lbhck.cn.gov.cn.lbhck.cn http://www.morning.fqljq.cn.gov.cn.fqljq.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.tmxfn.cn.gov.cn.tmxfn.cn http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.lhxkl.cn.gov.cn.lhxkl.cn http://www.morning.tpfny.cn.gov.cn.tpfny.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.rltsx.cn.gov.cn.rltsx.cn http://www.morning.qnwyf.cn.gov.cn.qnwyf.cn http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn