教你复现顶会论文网络结构(四)--PNN模型网络结构

8 篇文章 0 订阅
订阅专栏
6 篇文章 1 订阅
订阅专栏

概述

该系列主要是复现一些经典的网络结构与顶会论文的网络结构,我一开始看论文,以为看到网络结构和了解结构原理后,就完全学到了这篇论文的精髓,谁知,等到自己想要用这个网络结构时,无法打通理解与代码复现的这一步,这就导致我在科研或者工作时的束手无措,因此,我就决定探究如何将一篇论文中的结构和论文中的公式用代码的形式复现出来。
深度学习框架:tensorflow2.0 ,numpy。
语言:python。
复现的代码全部在:https://github.com/Snail110/recsys。

0.介绍

PNN 全程是product-based Neural Network,认为在embedding输入到MLP之后学习的交叉特征表达并不充分,提出了一种product layer的思想,基于乘法的运算来提现特征交叉的DNN网络结构,如下:

1.网络结构

该部分主要是将论文中公式与结构图对应起来,理解每一个公式的含义以及网络结构图中每一部分的输入输出。
在这里插入图片描述
首先,当你看完一篇论文并理解了论文的主要思想后,需要尝试着将网络结构与论文中的每一步的数学公式一一对应上,在心中或者图片上协商每一个环节的数学公式,然后考虑用深度学习框架来实现。
首先这篇论文中有数学公式(1),(2),(3)对应着网络模型。
然后需要一步一步的将公式对应到网络模型中,

公式(1)

y = s i g m o i d ( W 3 l 2 + b 3 ) y = sigmoid(W_3l_2 +b_3) y=sigmoid(W3l2+b3)

输出层是一层全连接层,经过sigmoid函数映射到0,1之间,得到点击率的预测值。

公式(2)

l 2 = r e l u ( W 2 l 1 + b 2 ) l_2 = relu(W_2l1 +b2) l2=relu(W2l1+b2)
l2层
根据l1层的输出,经过全连接层,并使用relu激活得到结果

公式(3)

l 1 = r e l u ( l z + l p + b 1 ) l1 = relu(l_z + l_p + b_1) l1=relu(lz+lp+b1)

输入为三个部分:分别是lz lp,b1,b1是偏置。重点介绍lz,lp.

product layer

在ctr预估中,特征之间关系更多的是一种and关系,因此需要获取特征a且特征b的组合更加提现特征交叉的意义。

product layer分为两个部分,一部分是线性部分lz,一部分是非线性部分lp,
二者形式:
image

公式中的圈点符号代表矩阵的点乘:
image

Embedding Layer

Embedding Layer跟deepfm中相同,将每个field的特征换成同样长度的向量
(f1,f2,f3…fn)

损失函数

image

2.product laer详细介绍

在上面说到
image
了解z,p代表什么意思,z是线性信号向量,p是非线性信号向量
因此:
z
image
z就是embedding的直接等于映射,

p:

image

不同的函数g会有两种PNN计算方法,内积inner PNN和外积 outer PNN

先定义embedding 大小为M,field大小为N,而lz,lp长度为D1(就是下一层的长度)。
在这里需要明白,field指的是 比如训练集有特征:[性别,年龄,购买次数,点赞次数,浏览次数],这些就是这是field,field大小就是这些特征的数量。

2.1 IPNN

IPNN示意图:
image
从图上可以看出内积pij:

image

pij为 embedding中fi,fj向量的点乘,得到就是数。
pij为一个数,那么p大小为N*N。但是由于计算p的事件复杂度很大,仅此论文进行了优化,得知p是一个对称矩阵,那么权重W是对称矩阵
将W分解为
image

因此
image
image

从这里看出来 权重每一个wu对应一个fi,那么也就是说权重N个w对应field。
,那么权重大小为D1 * N,
最终得到:
image

2.2OPNN

image

OPNN为外积形式,将每个field外积成一个方阵,然后再通过范数为一个数。

OPNN中p的计算方式如下:

image

此时pij为MM的矩阵,计算一个pij的时间复杂度为MM,因此w应该为D1MM才可以w * p = 一个数。

2.代码复现

该部分主要是按照网络结构图,用代码的方式实现。在代码实现的过程中,我们需要紧紧结合数学公式体会其中的含义以及如何用代码来实现这些数学公式。
我是基于数据集:https://www.kaggle.com/c/porto-seguro-safe-driver-prediction来实现的。

class PNN(tf.keras.Model):
    def __init__(self, num_feat, num_field, dropout_deep, deep_layer_sizes, product_layer_dim=10, reg_l1=0.01,
                 reg_l2=1e-5, embedding_size=10, product_type='outer'):
        super().__init__()
        self.reg_l1 = reg_l1
        self.reg_l2 = reg_l2
        self.num_feat = num_feat  # F =features nums
        self.num_field = num_field  # N =fields of a feature
        self.product_layer_dim = product_layer_dim  # D1 pnn dim
        self.dropout_deep = dropout_deep

        # Embedding 这里采用embeddings层因此大小为F* M F为特征数量,M为embedding的维度
        feat_embeddings = tf.keras.layers.Embedding(num_feat, embedding_size,
                                                    embeddings_initializer='uniform')  # F * M
        self.feat_embeddings = feat_embeddings

        # 定义随机初始化
        initializer = tf.initializers.GlorotUniform()

        # linear part 线性层就是embedding层的复制,因此线性信号权重大小是D1 * N * M,为什么因此是线性层维度为 D1,embedding层维度为N* M
        # 因此权重大小为D1 * N *M
        self.linear_weights = tf.Variable(
            initializer(shape=(product_layer_dim, num_field, embedding_size)))  # D1 * N * M

        # quadratic part
        self.product_type = product_type
        if product_type == 'inner':
            self.theta = tf.Variable(initializer(shape=(product_layer_dim, num_field)))  # D1 * N

        else:
            self.quadratic_weights = tf.Variable(
                initializer(shape=(product_layer_dim, embedding_size, embedding_size)))  # D1 * M * M

        # fc layer
        self.deep_layer_sizes = deep_layer_sizes
        # 神经网络方面的参数
        for i in range(len(deep_layer_sizes)):
            setattr(self, 'dense_' + str(i), tf.keras.layers.Dense(deep_layer_sizes[i]))
            setattr(self, 'batchNorm_' + str(i), tf.keras.layers.BatchNormalization())
            setattr(self, 'activation_' + str(i), tf.keras.layers.Activation('relu'))
            setattr(self, 'dropout_' + str(i), tf.keras.layers.Dropout(dropout_deep[i]))

        # last layer
        self.fc = tf.keras.layers.Dense(1, activation=None, use_bias=True)

    def call(self, feat_index, feat_value):
        # call函数接收输入变量
        # embedding part  feat_index = inputs为输入 feat_embeddings为一个layer。
        feat_embedding_0 = self.feat_embeddings(feat_index)  # Batch * N * M
        #         print(feat_value.get_shape())
        feat_embedding = tf.einsum('bnm,bn->bnm', feat_embedding_0, feat_value)
        # linear part
        lz = tf.einsum('bnm,dnm->bd', feat_embedding, self.linear_weights)  # Batch * D1

        # quadratic part
        if self.product_type == 'inner':
            theta = tf.einsum('bnm,dn->bdnm', feat_embedding, self.theta)  # Batch * D1 * N * M
            lp = tf.einsum('bdnm,bdnm->bd', theta, theta)  # Batch * D1
        else:
            embed_sum = tf.reduce_sum(feat_embedding, axis=1)  # Batch * M
            p = tf.einsum('bm,bn->bmn', embed_sum, embed_sum)
            lp = tf.einsum('bmn,dmn->bd', p, self.quadratic_weights)  # Batch * D1

        y_deep = tf.concat((lz, lp), axis=1)
        y_deep = tf.keras.layers.Dropout(self.dropout_deep[0])(y_deep)

        for i in range(len(self.deep_layer_sizes)):
            y_deep = getattr(self, 'dense_' + str(i))(y_deep)
            y_deep = getattr(self, 'batchNorm_' + str(i))(y_deep)
            y_deep = getattr(self, 'activation_' + str(i))(y_deep)
            y_deep = getattr(self, 'dropout_' + str(i))(y_deep)

        output = self.fc(y_deep)

        return output

3.总结

你看,通过这样一步步将公式与代码对应起来,就好实现多了,对于不同的计算公式采用不同的函数需要多看文档,这样才可以选用正确的api。
最后,如果需要获取全部代码,请看下我的github上仓库:https://github.com/Snail110/recsys
这里面是用tensorflow2.0框架来写。如果觉得我实现的还不错,记得给我一个星星哦。

参考文章:
TensorFlow 2.0 implementation of Product-based Neural Network[1]
Reference:
[1] Product-based Neural Networks for User ResponsePrediction,
Yanru Qu, Han Cai, Kan Ren, Weinan Zhang, Yong Yu, Ying Wen, Jun Wang
[2] Tensorflow implementation of PNN
https://github.com/Snail110/Awesome-RecSystem-Models/blob/master/Model/PNN_TensorFlow.py
[3] https://zhuanlan.zhihu.com/p/37522266

PNN神经网络评价方法毕业设计(论文)-综合文档
05-22
PNN神经网络评价方法毕业设计(论文)
FM-and-Variants:Keras实施FM,FFM,AttentionFM,Wide&Deep,Deep&Cross,PNN
03-19
FM和变体 Keras实现FM,FFM,AttentionFM,Wide&Deep,Deep&Cross,PNN,DeepFM
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
qq_57231208的博客
03-26 780
概率神经网络在变压器故障诊断中的应用可以大大提高故障检测的准确性和速度,有助于防止可能的故障扩散,确保电网的稳定运行。在实际应用中,还需要考虑到数据质量、异常值处理、模型的实时更新及维护等因素,以保持系统的高效和可靠。[4]银涛.基于概率神经网络的变压器故障诊断的研究[J].电气应用, 2006, 25(10):4.DOI:10.3969/j.issn.1672-9560.2006.10.019.输入层的神经元数量对应于选定特征的数量,输出层的神经元数量则对应于分类任务的类别数。使用训练集数据训练PNN
干货 | 这样做轻松复现顶会论文
weixin_40920183的博客
08-08 982
在科研界,快速刷论文了解一下最前沿研究已经是每个科研er的必备技能了。尤其是个各大顶会论文,作为当下Al发展的风向标。每一次论文出来,本着不想被别人卷死,就只能去卷别人了的原则,顶会论文大家都希望能尽快阅读、尽快能够复现,从中get idea。“看一篇论文的关键,是复现作者的算法。”然而,最大的BUG是,很多论文根本就复现不了,这是为什么呢?因为,你不是作者。(……)尤其...
PNN网络(Product-based Neural Network)
null的专栏
03-20 1万+
1. 概述 PNN的全称是Product-based Neural Network,PNN的关键在于在embedding层和全连接层之间加入了Product layer。传统的DNN是直接通过多层全连接层完成特征的交叉和组合的,但这样的方式缺乏一定的“针对性”。首先全连接层并没有针对不同特征域之间进行交叉;其次,全连接层的操作也并不是直接针对特征交叉设计的。但在实际问题中,特征交叉的重要性不言而喻,比如年龄与性别的交叉是非常重要的分组特征,包含了大量高价值的信息,我们急需深度学习网络能够有针对性的结构能够表
【推荐系统】TensorFlow复现论文PNN网络结构
CSDN 精品推荐
11-20 1300
文章目录一、导包二、数据处理三、搭建模型3.1 输入层3.2 Embedding层3.3 EmbeddingInput3.4 Produce层3.5 MLP层3.6 PNN模型、运转模型4.1 读取数据4.2 使用具名数据为特征做标记4.3 编译模型4.4 训练模型4.5 绘制网络结构 下图为PNN模型结构图,首先将Sparse特征进行Embedding嵌入,然后将其流入Product,分别进行捕捉线性关系lz和特征交叉lp,然后拼接,流到MLP全连接层,最终输出CTR概率值。 一、导包 import
推荐算法-PNN(Product Network)
Silence的博客
05-17 1万+
推荐算法-PNN   这篇文章出自上海交大,针对直接把Embedding之后的特征输入到神经网络中进行计算对特征的交叉组合不充分而提出来的。也是对特征的组合做文章的一种方法。 PNN网络结构   模型结构如下图所示: 可以看出模型也是实现CTR预估任务,输入数据是对特征进行one-hot编码之后特征,然后经过一个embedding层,将输入特征映射到相同长度的特征得到上图中的embedding层...
推荐算法实战项目:PNN 原理以及案例实战(附完整 Python 代码)
机器学习社区
05-02 1834
本文要介绍的是由上海交通大学的研究人员提出的PNN(Product-based Neural Networks)模型,该模型包含一个embedding层来学习类别数据的分布式表示,此外还包含product层来捕获字段之间的特征交互模式,最后包含一个全连接层去挖掘更高阶的特征交互。相比Deep Crossing模型PNN模型在输入、EMbedding层、多层神经网络、以及最终的输出层并没有什么结构上的不同,唯一的区别在于PNN引入了Product(乘积)层来代替了Deep Crossing中的Stack层,
推荐系统(二):PNN论文整理和思考
anshuai_aw1的博客
03-31 1187
文章目录一、背景二、PNN思想和模型三、优化代码实践。参考文献 一、背景 PNN论文为《Product-based Neural Networks for User Response Prediction》,是上海交大团队发表在ICDM 2016上。本文在阅读源论文和网上其它资料的基础上,重点整理了论文的细节和思想。 我们已经知道,在信息检索领域(IR,Information Retriev...
源程序.rar_PNN+PCA_pca_pca-bp_pnn_神经网络BP
07-13
神经网络BP算法,PCA算法以及PNN算法
概率神经网络的分类预测-基于PNN的变压器故障诊断
09-05
概率神经网络的分类预测--基于PNN的变压器故障诊断
CTR_DeepModel_Keras:CTR深度学习模型Keras实现
05-09
CTR_DeepModel_Keras CTR深度学习模型Keras实现 暂时只复现PNN,DeepFM,DCN,之后会实现其他网络结构 1.PNN 模型 2.DeepFM 模型 3.DCN 模型(代码还没更新,稍后会更新) 参考: [1] [2][Deep & Cross Network for Ad Click Predictions] [3][DeepFM: A Factorization-Machine based Neural Network for CTR Prediction] [4][Product-based Neural Networks for User Response Prediction]
概率神经网络的分类预测-基于PNN变压器故障诊断.zip
最新发布
04-14
1、概率神经网络的分类预测-基于PNN变压器故障诊断。 2、适用于计算机,电子信息工程等专业的大学生毕业设计。 3、有问题可以订阅《实用毕业设计》专栏...
PNN模型及其变体
qq_39691463的博客
11-01 1719
一:绪论 1,这么是pnn 相对于前面我们讲的deep crossing 模型而言,pnn模型在输入层,embedding层,多层神经网络,输出层等并没有结构上的变化,唯一的区别在于pnn用乘积层(product layer)代替了原来的stacking layer,也就是说embedding后的向量不再是通过简单的拼接而成,而是通过product 操作进行两两交互,更有针对性的获取特征交叉信息。其次,相对于NCF 模型固定的用户-物品特征向量输入而言,pnn模型输入引入了多组特征向量,那么也就要求特征向量
推荐系统系列:PNN模型理论和代码实现
wwwsctvcom的博客
07-31 1574
一、前言 PNN模型是发表于2016年的推荐类文章,文章地址为:https://arxiv.org/pdf/1611.00144.pdf 解决了直接将embedding输入给MLP层表达特征交叉不充分的问题,论文使用了两种特殊的乘积方式来表示特征之间的交叉,实验也证明,相比于16年以前的模型也取得了不错的效果,现在主要是学习其一种思想; 二、算法原理 (1)模型的整体结构如下图所示,IPN...
PNN模型
星辰的博客
03-08 1049
之前介绍的NeuralCF模型的主要思想是利用多层神经网络替代经典协同过滤的点积操作,加强模型的表达能力。广义上,任何向量之间的交互计算方式都可以用来替代协同过滤的内积操作,相应的模型可称为广义的矩阵分解模型。但NeuralCF模型只提到了用户向量和物品向量两组特征向量,如果加入多组特征向 量又该如何设计特征交互的方法呢? 2016年,上海交通大学的研究人员提出的PNN模型,给出了特征交互方式的几种设计思路。 PNN模型的网络架构 图所示为模型结构图,相比Deep Crossing模型PNN模型在输入、E
推荐算法(八)——显式特征交互模型 PNN
予以初始的博客
10-12 973
目录1 介绍2 原理2.1 Embedding Layer2.2 Product Layer2.3 Hidden Layer3 总结5 代码实践写在最后 1 介绍 本文为 推荐系统专栏 的第八篇文章,内容围绕 PNN 的原理及代码展开。 PNN 出自上海交大,通过引入特征交互层 Product Layer,显式的对特征进行交互,以提升模型的表达能力。 论文传送门:Product-based Neural Networks for User Response Prediction 代码传送门:PNN 2 原
推荐系统遇上深度学习(六)--PNN模型理论和实践
weixin_33843409的博客
07-27 740
1、原理 PNN,全称为Product-based Neural Network,认为在embedding输入到MLP之后学习的交叉特征表达并不充分,提出了一种product layer的思想,既基于乘法的运算来体现体征交叉的DNN网络结构,如下图: 按照论文的思路,我们也从上往下来看这个网络结构: 输出层 输出层很简单,将上一层的网络输出通过一个全...
概率神经网络(PNN)
热门推荐
Jaster_wisdom的专栏
04-07 4万+
概率神经网络(Probabilistic Neural Network)是由D.F.Speeht博士在1989年首先提出,是径向基网络的一个分支,属于前馈网络的一种。它具有如下优点:学习过程简单、训练速度快;分类更准确,容错性好等。从本质上说,它属于一种有监督的网络分类器,基于贝叶斯最小风险准则。        概率神经网络一般有以下层:输入层、模式层、求和层和输出层。有的资料中也把模式层称为
概率神经网络的分类预测--基于PNN的变压器故障诊断
03-29
概率神经网络(Probabilistic Neural Network,PNN)是一种基于贝叶斯决策理论的分类神经网络,它可以对样本进行概率分类,具有较高的准确率和鲁棒性。 在变压器故障诊断中,可以采用PNN对变压器的故障进行分类预测。具体步骤如下: 1. 数据采集:采集变压器的振动信号、声音信号、温度信号等多种信号,形成样本数据集。 2. 特征提取:对采集到的信号进行特征提取,例如提取振动信号的频域特征、时域特征、小波包能量特征等。 3. 数据预处理:对提取到的特征进行归一化、降维等预处理操作,以减少数据的冗余性和噪声干扰。 4. 训练PNN模型:将处理后的数据集划分为训练集和测试集,使用训练集对PNN模型进行训练,调整PNN的参数,使其能够准确地对不同类型的故障进行分类。 5. 模型评估:使用测试集对训练好的PNN模型进行评估,计算模型的准确率、召回率、F1值等指标,以评估模型的性能。 6. 故障诊断:将采集到的新数据输入到训练好的PNN模型中,进行故障分类预测,诊断出变压器的故障类型。 总之,基于PNN的变压器故障诊断方法可以有效地提高故障诊断的准确性和可靠性,具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释) 52271
  • 基于移动最小二乘法的曲线曲面拟合(python语言实现) 22357
  • python再计算无限循环小数的循环节 8714
  • 采用Keras 自编码器(SAE)实现Mnist的多分类问题 7355
  • 基于MATLAB的模拟退火算法求解TSP问题 6704

分类专栏

  • BigData 18篇
  • SparkDataFrame 6篇
  • SparkML 8篇
  • SparkRDD 6篇
  • Deep Learning 8篇
  • Natural language processing 4篇
  • Python 12篇
  • Algorithm 5篇
  • Matlab 3篇
  • EIT 2篇
  • MachineLearning 5篇
  • Recommender System 6篇

最新评论

  • 求一个矩阵中连续四个数字(行,列,正、反对角线)乘积的最大值。

    gandli: [code=python] # 定义函数找到序列的最大乘积 def find_max_prod(matrix, n): row_len, col_len = len(matrix), len(matrix[0]) max_product = 0 max_sequence = [] for row in range(row_len): for col in range(col_len): # 检查所有四个可能的方向 directions = [ (0, 1), # 水平 (1, 0), # 垂直 (1, 1), # 对角 (1, -1), # 反对角 ] for dr, dc in directions: if ( 0 <= col + dc * (n - 1) < col_len and 0 <= row + dr * (n - 1) < row_len ): product = 1 sequence = [matrix[row + i * dr][col + i * dc] for i in range(n)] for num in sequence: product *= num if product > max_product: max_product = product max_sequence = sequence return max_sequence, max_product [/code]

  • 最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释)

    zmx2008313: 引用「xa.append(xx * d) ya.append(yy * d)」 27行加随机噪声,不是乘。 xa.append(xx * d)==》 xa.append(xx + d) ya.append(yy * d)==》 ya.append(yy + d)

  • 基于移动最小二乘法的曲线曲面拟合(python语言实现)

    一碗竹叶青: 可以在评论区说下吗,我修改下,防止其他人入坑,谢谢

  • 基于移动最小二乘法的曲线曲面拟合(python语言实现)

    CoWlTer: 代码有个很要命的bug, 找了很久才找到。按你的代码算出来结果肯定是错的。

  • 采用Keras 自编码器(SAE)实现Mnist的多分类问题

    团子大家族族长: 你这个没有一层一层训练,不算堆栈自编码吧

大家在看

  • socket--cs--nc简单实现&反弹shell
  • 学习笔记——网络管理与运维——SNMP(SNMP原理)
  • 【JavaScript脚本宇宙】图像处理新纪元:探索六大JavaScript图像处理库
  • javaweb期末作业-基于MySQL + Tomcat + IDEA + JSP + Servlet宾馆管理系统+文档说明 104
  • “探索质数的世界:试除法判定、质因数分解与筛法的综合应用“ 100

最新文章

  • Libsvm格式存储
  • RDD、Dataframe和Dataset
  • One hot 编码
2020年23篇
2019年2篇
2018年9篇
2017年12篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司厦门百度竞价包年推广公司廊坊网站优化软件价格吉祥百度竞价包年推广公司廊坊百度网站优化公司霍邱网站优化按天扣费价格成都至尊标王价格长沙网站优化软件泉州网站优化按天收费报价中卫网站优化按天扣费报价塘坑网站推广工具多少钱松原网站推广工具推荐大丰关键词排名包年推广价格盐城seo优化哪家好哈密网站搜索优化价格曲靖网站seo优化哪家好盘锦SEO按天收费邵阳外贸网站制作运城营销型网站建设推荐大丰网站推广系统哪家好临沂百搜标王价格南澳网站优化推广公司百色建站湛江网络广告推广龙岩至尊标王哪家好达州百度seo汕头网站优化软件多少钱淮安英文网站建设哪家好新余关键词排名推荐蚌埠网站优化按天扣费报价濮阳百度网站优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化