PyTorch深度学习实践——6.逻辑sigmoid函数

67 篇文章 4 订阅
订阅专栏
19 篇文章 1 订阅
订阅专栏

PyTorch深度学习实践——6.逻辑sigmoid函数

课程链接: 《PyTorch深度学习实践》6.逻辑斯蒂回归
虽然叫回归,但是是做分类的
线性回归模型
在这里插入图片描述单样本损失在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在线性空间,我们的估计值y属于一个连续的空间,这种任务叫做回归任务,但是在很多的机器学习任务中,我们要做的是分类
比如ministr数据集,训练集60000个,测试集10000个,有10个分类,我们模型估算出来的结果是一个0…9离散值的集合,我们要估算的是y属于哪一个,这种问题叫做分类问题
然而我们并不是输出输入的样本所属的类别,而是输出它属于每个类别的概率,概率最大的一项作为我们分类的结果

这些都叫sigmoid函数,满足函数值有极限,函数值在(-1,1)之间,都是单调增函数,都是饱和函数,满足这几个条件就叫sigmoid函数,在所有的sigmoid函数中逻辑斯蒂函数最出名,所以现在有些框架里面就直接把逻辑斯蒂函数叫做sigmoid函数,在pytorch里面逻辑斯蒂函数就叫做sigmoid函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

逻辑斯蒂回归是做分类用的,输出是概率的分布,在这里插入图片描述
回归与分类的区别:

分类输出y_hat可以是通过的概率(【0,1】),也可以是结果,通过或挂科。
分类输出为概率,在训练时,logistic要把输出值从是实数空间映射到【0,1】在这里插入图片描述
Logstic回归模型:

论文中常把logistic函数写成\sigma(x)在这里插入图片描述在这里插入图片描述

损失函数:

线性回归模型中loss=(y_hat-y)**2在几何上表示两点距离差异

logistic回归模型中,输出是概率的分别,loss要比较概率之间的分布差异,(KL散度,cross-entrpoy交叉熵)

交叉熵举例:

比较D分布和T分布差异性的大小,越大越好在这里插入图片描述在这里插入图片描述
BCE二分类损失函数如上

y是样本真实值,y_hat是预测值,y=1时22,y_hat趋近于一则损失越小,否则越大

mini-batch loss 把BCE加起来求均值即可
linear函数与线性回归函数相同,因此code也相同,因为\sigma里没有参数,也不需要更新,直接在linear后加一个sigmod,最前面加一份functional即可
在这里插入图片描述在这里插入图片描述
损失不同:从原来的MSE编程BCE(binary cross entropy)
在这里插入图片描述

思路:
1、准备数据
2、模型构造
3、损失和优化器
4、循环训练
5、投入模型数据,计算结果
在这里插入图片描述

import torch
import torch.nn.functional as F         # 函数包
import numpy as np
import matplotlib.pyplot as plt


# x,y各有三个数据,每一个数据都只有一个特征,形式为3行一列
x_data = torch.Tensor([[1.0], [2.0], [3.0]]) #构建数据集
											 #注意括号的形式			
y_data = torch.Tensor([[0], [0], [1]])          # 分类数据

class LogisticRegressionModel(torch.nn.Module):   #括号里面表示继承类
												  # 初始化函数和线性回归模型的一样,因为logistic函数中没有新的参数需要初始化
    def __init__(self):                             # 构造函数与线性模型一样,无其他参数
   													#构造函数
        super(LogisticRegressionModel, self).__init__() 
        self.linear = torch.nn.Linear(1, 1)
        										#torch.nn.Linear是pyTorch里面的一个类,加了括号就是实例化对象,包含了权重和偏置两个张量  
        										#可以直接用Linear完成 权重*输入+偏置的计算
       											#Linear也是继承自Module,所以可以自动进行反向传播
       											#nn:Neural Network神经网络
        										#linear是由Linear实例化得到的
 												# (1,1)代表的是输入和输出的特征维度都是一维
                                                # 该层需要学习的参数是w和b,且方式为linear.weight()和linear.bias()
    def forward(self, x):
        y_pred = F.sigmoid(self.linear(x))          # F.sigmoid()
        return y_pred
											 #构造函数用于初始化对象, forward是前馈过程中需要执行的计算,没有backward,这是因为Module构造的对象会根据你的计算图自动实现backward
model = LogisticRegressionModel() #创建一个LogisticRegressioMoel类的实
								  #用模型的时候这样调用,也可以传入参数x,x就送入forward函数,计算出y_pred

criterion = torch.nn.BCELoss(size_average=False) # 用BCE损失函数:cross-entropy(交叉熵),不需要求均值
											  #构造损失函数
 											  #MSELoss需要有y,y_pred,然后构造计算,用MSELoss的共识算出来是一个向量,再把向量求和,最后得出标量的损失值
											  #MSELoss的计算过程也要构建计算图,只要是需要构建计算图,就应该是继承自Module,MSELoss继承自nn.Module
											  #size_average=False表示得到的损失不求均值

#优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
											#BCELoss类参数:size_average=True/False是否求均值、reduction=True/False是否降维
											# model.parameter 自动完成参数的初始化操作
											#优化器不会构建计算图 torch.optim.SGD是一个类,带了参数就是实例化了这个类
											#model.parameters()会检查model里面所有的成员,如果成员里面有相应的权重,就把这些都加到最后训练的参数集合上
											#lr是学习率,当模型比较复杂,pyTorch还支持对模型的不同部分使用不同的学习率,w=w-lr*(损失对权重的导数)


#训练过程
for epoch in range(1000):
    y_pred = model(x_data)  #先在前馈里面算出y_pred
    loss = criterion(y_pred, y_data)  #算损失
   									  # 结合预测值和真实值,最后输出损失值
    print(epoch, loss.item())  #loss是一个对象是标量,打印的时候会自动调用__str__(),不会产生计算图

    optimizer.zero_grad() # 在反向传播之前一定要释放梯
    					  #进行训练的时候梯度归零
    loss.backward() # 反向传播Autograd
    optimizer.step()  # update
    				  #更新,step函数用于更新,会根据所有参数里面所包含的梯度以及预先设置的学习率进行更新

x = np.linspace(0, 10, 200)  #0-10之间平均取200个点
							 # 返回0-10等间距的200个数
x_t = torch.Tensor(x).view((200, 1))        # .view() 转换成矩阵
											# reshape成一个200行1列的矩阵tensor
											#类似于np的reshape
y_t = model(x_t)                        # 将张量送到训练好的模型中,计算结果
										#进行测试
										# 传入模型进行测试
y = y_t.data.numpy()   # 调用numpy将y_t变成n维数组
plt.plot(x, y)


# 图2——这是y=0.5那条横线
plt.plot([0, 10], [0.5, 0.5], c='r')    # 画出y=0.5时的分界线
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()              # x和y轴的网格线
plt.show()

在这里插入图片描述

输出结果:

 
Epoch =	0	Loss =	2.6060
 
 
Epoch =	100	Loss =	1.9397
 
 
Epoch =	200	Loss =	1.7697
 
 
Epoch =	300	Loss =	1.6271
 
 
Epoch =	400	Loss =	1.5065
 
 
Epoch =	500	Loss =	1.4037
 
 
Epoch =	600	Loss =	1.3155
 
 
Epoch =	700	Loss =	1.2390
 
 
Epoch =	800	Loss =	1.1721
 
 
Epoch =	900	Loss =	1.1133
 
 

在这里插入图片描述
结论:
可以看到大约在2.5小时左右分为两类:
1、小于2.5小时时,结果为0,意为不通过;
2、大于2.5小时时,结果为1,意为通过考试。

torchversion数据集

# mnist数据集,手写数字识别
mnist_train_set = torchvision.datasets.MNIST(root='./dataset/mnist', train=True, download=False)
mnist_test_set = torchvision.datasets.MNIST(root='./dataset/mnist', train=False, download=False)# CIFAR-10数据集——飞机、卡车、猫、鸟等
cifar10_train_set = torchvision.datasets.CIFAR10(root='./dataset/cifar10', train=True, download=True)
cifar10_test_set = torchvision.datasets.CIFAR10(root='./dataset/cifar10', train=False, download=True)
  1. logistic 函数
    (也可以叫sigmoid函数,logistic函数是最典型的sigmoid函数)

将变量映射到0-1之间的数

问题描述:根据输入的学习时间,来预测考试是否合格,最终输出是考试通过的概率。(是一个二分类问题)

概率值用logistic函数值来表示,函数中输入的x是原来的y_pred。

logistic函数图像如图所示,饱和函数—— 导数图像服从正态分布。

sigmoid函数

特点(充分条件)

饱和函数

单调增

有极限

  1. 数据集的改变:因为是二分类问题,y 的取值只能是0或1;在这里插入图片描述

  2. 损失函数的改变:不再使用MSE损失函数,改为使用BCE损失函数,由于PyTorch版本更新,将 size_average=False 更改为 reduction='sum'
    在这里插入图片描述

  3. def __init__没有改变:原因是,\delta (x)(逻辑斯蒂回归函数)是一个没有参数的函数,不需要在构造函数中进行初始化,直接调用就可以;

  4. 模型的改变:由于PyTorch版本更新,不用再导入torch.nn.functional包,可以直接使用包中的Sigmoid函数进行训练,如下图;在这里插入图片描述
    实现线性回归

import torch
# Pytorch实现线性回归

# x,y是矩阵,3行1列 也就是说总共有3个数据,每个数据只有1个特征。
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

# Module实现了函数__call__(),call()里面有一条语句是要调用forward()。
# 所以需要重写forward()覆盖掉父类中的forward()。
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        # (1,1)是指输入x和输出y的特征维度,这里数据集中的x和y的特征都是1维的。
        self.linear = torch.nn.Linear(1,1)

    def forward(self,x):
        y_pred = self.linear(x)
        return y_pred
model = LinearModel()

criterion = torch.nn.MSELoss(size_average=False) # 不计算平均值。
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

for epoch in range(1000):
    # forward体现是通过以下语句实现的。
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print('progress : ',epoch,loss.item())

    optimizer.zero_grad()
    loss.backward()   # 反向传播,计算梯度
    optimizer.step() # 更新w和b的值

print('w = ',model.linear.weight.item())
print('b = ',model.linear.bias.item())

x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ',y_test.data)

逻辑斯蒂回归

# 逻辑斯蒂回归

import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn.functional as F

# 1. Prepare Dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])

# 2. Define Model
class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1,1)

    def forward(self,x):
        y_pred = F.sigmoid(self.linear(x))
        return y_pred
model = LogisticRegressionModel()

# 3. Construct Loss and Optimizer
# 默认情况下,loss会基于element平均,如果size_average=False的话,loss会被累加.
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

# 4. Training Cycle
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print('progress:', epoch, loss.item())

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()



x = np.linspace(0,10,200)   # 0-10之间取200个点。
x_t = torch.Tensor(x).view((200,1))   # 维度变换
y_t = model(x_t)
y = y_t.data.numpy()
plt.plot(x,y)
# plt.plot([0.10],[0.5,0.5],c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()   # 显示网格线 1=True=默认显示;0=False=不显示
plt.show()

PyTorch-04梯度、常见函数梯度、激活函数Sigmoid;Tanh;ReLU及其梯度、LOSS及其梯度、感知机(单层感知机)、感知机2(多输出的)、链式法则、MLP反向传播推导、2D函数优化实例
m0_37755995的博客
05-15 2598
PyTorch-05梯度、常见函数梯度、激活函数Sigmoid、Tanh、ReLU)及其梯度、LOSS及其梯度(MSE 均方误差、Cross Entropy Loss 交叉熵损失函数和两种求导方法)、感知机(单层感知机模型)、感知机2(多输出的)、链式法则、MLP(Multilayer Perceptron多层感知机) 反向传播推导、2D函数优化实例
[深度学习]pytorch实现sigmoid、softmax、交叉熵loss函数
qq_61897765的博客
10-04 615
入门
PyTorch学习笔记之激活函数篇(一)
记录学习过程
03-16 1133
2、其输出不是以0为中心而是都大于0的(这会降低权重更新的效率),这样下一层的神经元会得到上一层输出的全正信号作为输入,所以Sigmoid激活函数不适合放在神经网络的前面层而一般是放在最后的输出层中使用。1、其值域为[0,1],非常适合作为模型的输出函数用于输出一个(0,1)范围内的概率值,可用于将预测概率作为输出的模型,比如用于表示二分类的类别或者用于表示置信度。3、该函数是连续可导的(即可微),可以提供非常平滑的梯度值,防止模型训练过程中出现突变的梯度(即避免「跳跃」的输出值)。
pytorch基础(3)【sigmoid,激活函数,优化器】
qq_61094172的博客
03-27 3609
sigmoid函数 logistic function是一种sigmoid函数 和Linear的区别 sigmoid函数是不需要参数的,所以不用对其初始化(直接调用nn.functional.sigmoid即可)。 另外loss函数从MSE改用交叉熵BCE:尽可能和真实分类贴近。 # -*- coding: utf-8 -*- """ Created on Mon Oct 18 08:35:00 2021 @author: 86493 """ import torch import torch.nn
pytorch函数笔记(二)】torch.nn.Sigmoid()
大道至简
03-31 4万+
import torch.nn as nn torch.nn.sigmoid() 一、sigmoid介绍   sigmoid是激活函数的一种,它会将样本值映射到0到1之间。   sigmoid的公式如下: 11+e−x \frac{1}{1+e^{-x}} 1+e−x1​ 二、sigmoid的应用 代码: import torch.nn as nn import torch #取一组满足标准正态分布的随机数构成3*3的张量 t1 = torch.randn(3,3) m = nn.Sigmoid()
[Python] pytorch激活函数Sigmoid函数介绍,使用场景和使用案例
老狼工作室的博客
01-06 1671
本文介绍了pytorchSigmoid激活函数及其使用场景和使用案例。
pytorch中的 relu、sigmoid、tanh、softplus 函数
weixin_42528089的博客
12-06 5万+
 四种基本激励函数是需要掌握的: 1.relu  线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。通常意义下,线性整流函数代指代数学中的斜坡函数,即 而在神经网络中,线性整流函数作为神经元的激活函数,定义了该神经元在线性变换 ...
Pytorch-pytorch深度学习教程之逻辑回归.zip
05-22
pytorch Pytorch_pytorch深度学习教程之逻辑回归
深度学习框架pytorch入门与实践源代码.rar
11-21
深度学习框架pytorch入门与实践源代码
Pytorch-pytorch深度学习教程之Tensorboard.zip
最新发布
05-22
pytorch Pytorch_pytorch深度学习教程之Tensorboard
PyTorch深度学习快速入门教程.zip
03-27
PyTorch深度学习快速入门教程,自身学完受益匪浅,并有自身的心得体会,几天摆脱小白的头衔
pytorch深度学习技术及实践应用.pdf
02-14
pytorch深度学习技术及实践应用.pdf
逻辑斯蒂回归之sigmoid函数
布纸所云
04-04 1183
一. LR的数学形式 hθ(x)=11+e−θTx h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ​(x)=1+e−θTx1​ 二. LR为什么用sigmoid函数 2.1 广义线性模型(GLM) 首先需要知道,线性回归和逻辑斯蒂回归都是GLM的特殊形式: 在线性回归中假设yyy服从高斯分布: y∣x;θ∼N(μ,σ2) y|x; \theta \sim \N...
Pytorch学习笔记6:处理多维特征的输入
Jackydyy的博客
06-02 345
vs
吴恩达机器学习作业3:多类分类(Python实现)
Phoenix_ZengHao的博客
01-13 1704
机器学习练习 3 - 多类分类 在本练习中,您将实现一对一的逻辑回归和神经网络来识别手写的数字。在开始编程练习之前,我们强烈建议您观看视频讲座,并完成相关主题的复习问题。要开始这个练习,您需要下载启动代码并将其内容解压缩到您希望完成这个练习的目录中。自动手写数字识别在今天被广泛使用——从识别邮件信封上的邮政编码(邮政编码)到识别银行支票上所写的金额。本练习将展示您所学习到的方法如何用于此分类任务。在练习的第一部分中,您将扩展您以前的逻辑回归实现,并将其应用于一对一的分类。 1.1 Dataset 在ex3d
torch.sigmoid() 与 torch.nn.Sigmoid() 对比 python
热门推荐
是鲤鱼啊
03-26 11万+
1. torch.sigmoid() 2. torch.nn.Sigmoid() 只看文档,我没太看出二者的具体区别,通过以下可知得到结果自然相同,不过使用方式确实不同,我目前也没明白为啥: ...
pytorch分割损失函数
爱CV
03-01 1399
1. focal loss https://www.cnblogs.com/gshang/p/13922008.html class FocalLoss(nn.Module): def __init__(self, alpha=1, gamma=2, logits=False, reduce=True): super(FocalLoss, self).__init__() self.alpha = alpha self.gamma = gamma
pytorch的主要模块
m0_45827246的博客
12-27 2476
1. torch模块 torch模块包含了一些pytorch的常用激活函数,如Sigmoid(torch.sigmoid)、ReLu(torch.relu)和Tanh(torch.tanh);同时也包含了pytorch张量的一些计算操作,如矩阵的乘法(torch.mm)、张量元素的选择(torch.select)。注意,该模块中计算的对象大多数是pytorch张量。 例: a = torch.randn(1,2,3,4,5) torch.numel(a) 2. torch.Tensor模块 torch.
pytorch深度学习实践
03-28
PyTorch是一个基于Python的开源机器学习库,...总之,PyTorch深度学习实践是一个非常有挑战性的过程,但是如果你能够熟练掌握PyTorch的工具和库,那么你将能够轻松实现深度学习模型,并且在实际应用中取得良好的成果。

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

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

热门文章

  • CNDS博客等级 67024
  • 什么是LASSO回归,怎么看懂LASSO回归的结果 20350
  • R中因子(factor) 15411
  • conda 镜像源更换为国内源 14008
  • ERROR: Could not build wheels for dlib, which is required to install pyproject.toml-based project 13433

分类专栏

  • pytorch 19篇
  • python 67篇
  • 大模型 5篇
  • 统计分析与作图 58篇
  • Linux 13篇
  • R语言 90篇
  • RCS 1篇
  • SCI 33篇
  • 软件 1篇
  • mxnet 2篇
  • mmlab 2篇
  • 网络 2篇
  • APP

最新评论

  • R 生存分析3:Cox等比例风险回归及等比例风险检验

    2301_81315324: 那个如果要控制混杂,建立多个模型,是不是要用分层cox回归呀!!求大佬解答

  • 什么是LASSO回归,怎么看懂LASSO回归的结果

    Cathyma0321: 讲得真清楚啊,简洁明了

  • cph 做COX回归时出现 Error in `[.default`(y, , 3) : 下标出界

    m0_70042178: 变量已经是数值了还是出现了这个错误表情包咋整呀

  • R语言实现——网状 Meta 分析

    weixin_52072060: 网状META

  • R使用BUGSnet程序包实现二分类数据的贝叶斯网状meta分析

    m0_65472795: 请问是哪个公众号呀?

大家在看

  • 有四个数字,1,2,3,4能组成多少个互不相同且无重复的三位数?各是多少?(Python)
  • 2024-6-10-Model-Agnostic Meta-Learning (MAML) 227
  • 一切皆是映射:使用DQN解决连续动作空间问题:策略与挑战
  • Golang:使用时会遇到的错误及解决方法详解 309
  • PYTHON高级编程(期末复习)

最新文章

  • 生存分析和机器学习
  • 【基于深度学习进行多变量纵向数据和生存数据的动态预测】
  • 神经网络模型--DEEPSURV
2024
05月 9篇
04月 35篇
03月 32篇
02月 7篇
01月 1篇
2023年45篇
2022年103篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮肤小白生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司白山百度竞价包年推广公司桂林SEO按效果付费多少钱乐山seo网站推广推荐仙桃百搜标王报价通化网站建设推荐平凉百度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 网站制作 网站优化