使用Keras进行深度学习:(一)Keras 入门

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识!

Keras是Python中以CNTK、Tensorflow或者Theano为计算后台的一个深度学习建模环境。相对于其他深度学习的框架,如Tensorflow、Theano、Caffe等,Keras在实际应用中有一些显著的优点,其中最主要的优点就是Keras已经高度模块化了,支持现有的常见模型(CNN、RNN等),更重要的是建模过程相当方便快速,加快了开发速度。

笔者使用的是基于Tensorflow为计算后台。接下来将介绍一些建模过程的常用层、搭建模型和训练过程,而Keras中的文字、序列和图像数据预处理,我们将在相应的实践项目中进行讲解。
各层函数只介绍一些比较常用参数,详细参数介绍可查阅Keras文档 。

1. 核心层

(1)全连接层:神经网络中最常用到的,实现对神经网络里的神经元激活。

Dense(units, activation=’relu’, use_bias=True)

参数说明:

units: 全连接层输出的维度,即下一层神经元的个数
activation:激活函数,默认使用Relu
use_bias:是否使用bias偏置项

(2)激活层:对上一层的输出应用激活函数。

Activation(activation)

参数说明:

Activation:想要使用的激活函数,如:relu、tanh、sigmoid等

(3) Dropout层:对上一层的神经元随机选取一定比例的失活,不更新,但是权重仍然保留, 防止过拟合。

Dropout(rate)

参数说明:

 rate:失活的比例,0-1的浮点数。

(4)Flatten层:将一个维度大于或等于3的高维矩阵,“压扁”为一个二维矩阵。即保留第一个维度(如:batch的个数),然后将剩下维度的值相乘为“压扁”矩阵的第二个维度。

Flatten()

(5)Reshape层:该层的作用和numpy.reshape一样,就是将输入的维度重构成特定的shape。

Reshape(target_shape)

参数说明:

 target_shape:目标矩阵的维度,不包含batch样本数。如我们想要一个9个元素的输入向量重构成一个( None, 3, 3) 的二维矩阵:Reshape((3,3), input_length=(16, ))

(6)卷积层:卷积操作分为一维、二维、三维,分别为Conv1D、Conv2D、Conv3D。一维卷积主要应用于以时间序列数据或文本 数据,二维卷积通常应用于图像数据。由于这三种的使用和参数都基本相同,所以主要以处理图像数据的Conv2D进行说明。

Conv2D(filters, kernel_size, strides=(1, 1), padding='valid') 

参数说明:

filters:卷积核的个数。
kernel_size:卷积核的大小。
strdes:步长,二维中默认为(1, 1),一维默认为1。
Padding:补“0”策略,'valid'指卷积后的大小与原来的大小可以不同,'same'则卷积后大小与原来大小 一 致。

(7)池化层:与卷积层一样,最大统计量池化和平均统计量池也有三种,分别为MaxPooling1D、MaxPooling2D、MaxPooling3D、AveragePooling1D、AveragePooling2D、AveragePooli ng3D,

由于使用和参数基本相同,所以主要以MaxPooling2D进行说明。

MaxPooling(pool_size=(2,2), strides=None, padding=’valid’)

参数说明:

pool_size:长度为2的整数tuple,表示在横向和纵向的下采样样子,一维则为纵向的下采样因子
padding:和卷积层的padding一样。

(8) 循环层:循环神经网络中的RNN、LSTM和GRU都继承本层,所以该父类的参数同样使用于对应的子类SimpleRNN、LSTM和GRU。

Recurrent(return_sequences=False)

参数说明:

return_sequences:控制返回的类型,“False”返回输出序列的最后一个输出,“True”则返回整个序列。当我们要搭建多层神经网络(如深层LSTM时,若不是最后一层,则需要将该参数设为True。

(9) 嵌入层:该层只能用在模型的第一层,是将所有索引标号的稀疏矩阵映射到致密的低维矩阵。如我们对文本数据进行处理时,我们对每个词编号后,我们希望将词编号变成词向量就可以使 用嵌入层。

Embedding(input_dim, output_dim, input_length)

参数说明:

Input_dim:大于或等于0的整数,字典的长度即输入数据的个数。
output_dim:输出的维度,如词向量的维度。
input_length:当输入序列的长度为固定时为该长度,然后要在该层后加上Flatten层,然后再加上Dense层,则必须指定该参数,否则Dense层无法自动推断输出的维度。

该层可能有点费解,举个例子,当我们有一个文 本,该文本有100句话,我们已经通过一系列操作,使得文本变成一个(100,32)矩阵,每行代表一句话,每个元素代表一个词,我们希望将该词变为64维的词向量。

Embedding(100, 64, input_length=32) 则输出的矩阵的shape变为(100, 32, 64):即每个词已经变成一个64维的词向量。

2 模型搭建

讲完了一些常用层的语法后,接下来我们通过模型搭建来说明Keras的方便性。Keras中设定了两类深度学习的模型,一类是序列模型(Sequential类);另一类是通用模型(Model 类)。下面我们通过搭建下图模型进行讲解。

图1 两层神经网络

假设我们有一个两层神经网络,其中输入层为784个神经元,隐藏层为32个神经元,输出层为10个神经元,其中隐藏层使用ReLU激活函数,输出层使用Softmax激活函数。分别使用序列模型和通用模型实现如下:

图 2:导入相关库

图 3:序列模型实现

使用序列模型,首先我们要实例化Sequential类,之后就是使用该类的add函数加入我们想要的每一层,从而实现我们的模型。

图 4:通用模型实现

使用通用模型,首先要使用Input函数将输入转化为一个tensor,然后将每一层用变量存储后,作为下一层的参数,最后使用Model类将输入和输出作为参数即可搭建模型。

从以上两类模型的简单搭建,都可以发现Keras在搭建模型比起Tensorflow等简单太多了,如Tensorflow需要定义每一层的权重矩阵,输入用占位符等,这些在Keras中都不需要,我们只要在第一层定义输入维度,其他层定义输出维度就可以搭建起模型,通俗易懂,方便高效,这是Keras的一个显著的优势。

3 模型优化和训练

compile(optimizer, loss, metrics=None)

参数说明:

optimizer:优化器,如:’SGD‘,’Adam‘等
loss:定义模型的损失函数,如:’mse’,’mae‘等
metric:模型的评价指标,如:’accuracy‘等
fit(x=None,y=None,batch_size=None,epochs=1,verbose=1,validation_split=0.0)

参数说明:

x:输入数据。
y:标签。
batch_size:梯度下降时每个batch包含的样本数。
epochs:整数,所有样本的训练次数。
verbose:日志显示,0为不显示,1为显示进度条记录,2为每个epochs输出一行记录。validation_split:0-1的浮点数,切割输入数据的一定比例作为验证集。

图 5:优化和训练实现

最后用以下图片总结keras的模块,下一篇文章我们将会使用keras来进行项目实践,从而更好的体会Keras的魅力。

对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站http://www.panchuang.net 我们的公众号:磐创AI。

本篇文章出自http://www.tensorflownews.com,对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!

<p> <br /> </p> <p> <span style="font-size:14px;color:#E53333;">概要介绍</span><span style="font-size:14px;color:#E53333;"></span><span></span> </p> <p> <span style="font-size:14px;">本课程主要是介绍并实战款</span><span style="font-size:14px;">java</span><span style="font-size:14px;">中间件</span><span style="font-size:14px;">~redisson</span><span style="font-size:14px;">,介绍</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">相关的核心技术栈及其典型的应用场景,其中的应用场景就包括布隆过滤器、限流器、短信发送、实时</span><span style="font-size:14px;">/</span><span style="font-size:14px;">定时邮件发送、数据字典、分布式服务调度等等,在业界号称是在</span><span style="font-size:14px;">java</span><span style="font-size:14px;">项目里正确使用</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">的姿势。本课程的目标就在于带领各位小伙伴起学习、攻克</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">,更好地巩固自己的核心竞争力,而至于跳槽涨薪,自然不在话下!</span><span style="font-size:14px;"> </span> </p> <p> <span style="font-size:14px;color:#E53333;">课程内容</span><span style="font-size:14px;color:#E53333;"></span><span></span> </p> <p> <span style="font-size:14px;">说起</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">,可能大伙儿不是很熟悉,但如果说起</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">,想必肯定很多人都晓得。没错,这家伙字如其名,它就是架设在</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">基础上的款综合性的、新型的中间件,号称是</span><span style="font-size:14px;">java</span><span style="font-size:14px;">企业级应用开发中正确使用</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">的姿势</span><span style="font-size:14px;">/</span><span style="font-size:14px;">客户端实例。</span><span></span> </p> <p> <span style="font-size:14px;">它是架设在</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">基础之上,但拥有的功能却远远多于原生</span><span style="font-size:14px;">Redis</span><span> </span><span style="font-size:14px;">所提供的,比如分布式对象、分布式集合体系、分布式锁以及分布式服务调度等系列具有分布式特性的对象实例</span><span style="font-size:14px;">…</span> </p> <p> <span style="font-size:14px;">而这些东西</span><span style="font-size:14px;">debug</span><span style="font-size:14px;">将在本门课程进行淋漓尽致的介绍并实战,除此之外,我们将基于</span><span style="font-size:14px;">spring boot2.0</span><span style="font-size:14px;">搭建的多模块项目实战典型的应用场景对象存储、数据字典、短信发送、实时</span><span style="font-size:14px;">/</span><span style="font-size:14px;">定时邮件发送、布隆过滤器、限流组件、分布式服务调度</span><span style="font-size:14px;">....</span><span style="font-size:14px;">课程大纲如下所示</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161014439278.jpg" alt="" /> </p> <p> <span style="font-size:14px;">下面罗列下比较典型的核心技术栈及其实际业务场景的实战,如下图所示为</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">基于订阅</span><span style="font-size:14px;">-</span><span style="font-size:14px;">发布模式的核心技术</span><span style="font-size:14px;">~</span><span style="font-size:14px;">主题</span><span style="font-size:14px;">Topic</span><span style="font-size:14px;">的实际业务场景,即实时发送邮件</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161014551383.png" alt="" /> </p> <p> <span style="font-size:14px;">而下图则是基于“多值映射</span><span style="font-size:14px;">MultiMap</span><span style="font-size:14px;">”数据结构实战实现的关于“数据字典”的缓存管理</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161015054368.png" alt="" /> </p> <p> <span style="font-size:14px;">除此之外,我们还讲解了可以与分布式服务调度中间件</span><span style="font-size:14px;">dubbo</span><span style="font-size:14px;">相媲美的功能分布式远程服务调度,在课程中我们动手搭建了两个项目,用于分别充当“生产者”与“消费者”角色,最终通过</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">的“服务调度组件”实现服务与服务之间、接口与接口之间的调用!</span><span style="font-size:14px;"> </span> </p> <p> <span style="font-size:14px;color:#E53333;">课程收益</span><span style="font-size:14px;color:#E53333;"></span><span></span> </p> <p> <span style="font-size:14px;"></span><span style="font-size:14px;">1</span><span style="font-size:14px;">认识并掌握</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">为何物、常见的几种典型数据结构</span><span style="font-size:14px;">-</span><span style="font-size:14px;">分布式对象、集合、服务的应用及其典型应用场景的实战;</span><span></span> </p> <p> <span style="font-size:14px;"></span><span style="font-size:14px;">2</span><span style="font-size:14px;">掌握如何基于</span><span style="font-size:14px;">spring boot2.0</span><span style="font-size:14px;">整合</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">搭建企业级多模块项目,并以此为奠基,实战企业级应用系统中常见的业务场景,巩固相应的技术栈!</span><span></span> </p> <p> <span style="font-size:14px;"></span><span style="font-size:14px;">3</span><span style="font-size:14px;">站在项目管理与技术精进的角度,掌握对于给定的功能模块进行业务流程图的绘制、分析、模块划分、代码实战与性能测试和改进,提高编码能力与其他软实力;</span><span></span> </p> <p> <span style="font-size:14px;"></span><span style="font-size:14px;">4</span><span style="font-size:14px;">对于</span><span style="font-size:14px;">Java</span><span style="font-size:14px;">微服务、分布式、</span><span style="font-size:14px;">spring boot</span><span style="font-size:14px;">精进者而言,学完本课程,不仅可以巩固提高中间件的实战能力,其典型的应用场景更有助于面试、助力相关知识点的扫盲! 如下图所示</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161015169044.png" alt="" /> </p> <p> <span style="font-size:14px;color:#E53333;">关键字</span><span style="font-size:14px;"><span style="color:#E53333;"></span>Spring Boot,</span><span style="font-size:14px;">Redis,</span><span style="font-size:14px;">缓存穿透</span><span style="font-size:14px;">,</span><span style="font-size:14px;">缓存击穿</span><span style="font-size:14px;">,</span><span style="font-size:14px;">缓存雪崩,红包系统,</span><span style="font-size:14px;">Mybatis</span><span style="font-size:14px;">,高并发,多线程并发编程,发送邮件,列表</span><span style="font-size:14px;">List</span><span style="font-size:14px;">,集合</span><span style="font-size:14px;">Set</span><span style="font-size:14px;">,排行榜,有序集合</span><span style="font-size:14px;">SortedSet</span><span style="font-size:14px;">,哈希</span><span style="font-size:14px;">Hash ,</span><span style="font-size:14px;">进阶实战</span><span style="font-size:14px;">,</span><span style="font-size:14px;">面试,微服务、分布式</span> </p> <p> <span style="font-size:14px;color:#E53333;">适用人群</span><span style="font-size:14px;"><span style="color:#E53333;"></span>redisson学习者</span><span style="font-size:14px;">,</span><span style="font-size:14px;">分布式中间件实战者,微服务学习者,</span><span style="font-size:14px;">java</span><span style="font-size:14px;">学习者</span><span style="font-size:14px;">,spring boot</span><span style="font-size:14px;">进阶实战者,</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">进阶实战者</span> </p>
相关推荐
<p><span style="font-size: 24px; background-color: #e53333; color: #ffffff;"><strong>课程目标</strong></span></p> <p> </p> <p><span style="font-size: 18px;">从零开始掌握Premiere影视剪辑的基础知识,学会</span><span style="font-size: 18px; color: #e53333;"><span style="color: #e53333;"><strong>视频剪辑+影视特效+视频调色+字幕制作</strong></span></span></p> <p> </p> <p><span style="font-size: 24px; background-color: #e53333; color: #ffffff;">适用人群</span></p> <p> </p> <p><span style="font-size: 18px;">PR零基础小白,在校大学生,职场新人,想成为影视剪辑、影视后期、短视频制作、自媒体等高手的朋友。</span></p> <p> </p> <p><span style="font-size: 24px; background-color: #e53333; color: #ffffff;">课程简介</span></p> <p> </p> <p><span style="font-size: 18px;">课程以新版PR 2020讲解,可使用PR任意版本学习,绝大多数功能兼容旧版,但强烈建议使用新版本。</span></p> <p><span style="font-size: 18px;">【Adobe认证专家讲师精耕细作精品教程,非学院派照本宣科软件操作教程,以任务为导向,面向实际应用场景,每章都能学会实打实的高手技能,讲解细致,小白也能轻松入门成大神!】</span></p> <p><span style="font-size: 18px;">课程好不好,看过就知道,前面的免费章节欢迎试看。</span></p> <p><span style="font-size: 18px;">本课程学习不需要任何PR基础,只需要电脑操作基础即可。兼容Windows和Mac操作系统,同时讲解两种系统下的快捷键操作,不用担心操作上的障碍问题。</span></p> <p> </p> <p><span style="font-size: 24px; background-color: #e53333; color: #ffffff;">课程特色</span></p> <p> </p> <p><span style="font-size: 18px;">1、以实际PR影视编辑与特效的流程为导向,绝大多数内容都是为了完成某个具体任务,而不是为了讲解某个软件操作而凑数。</span></p> <p><span style="font-size: 18px;">2、不同于国内多数教程和书籍,每个知识点务求讲精、讲透,帮助你掌握PR的精髓,而非软件操作上的皮毛,让你真正学到PR的本质,次学习,终身受用,少走弯路,节约生命。</span></p> <p><span style="font-size: 18px;">3、课程会随PR新版本的推出持续更新,不必担心有新功能却不知道怎么用。</span></p> <p><span style="font-size: 18px;">4、充足的练习题和作业题,让你在不断的练习和挑战中提升PR技能。</span></p> <div> <p> </p> <p><img src="https://img-bss.csdnimg.cn/202009230003497469.png" alt="" width="880" height="2635" /><img src="https://img-bss.csdnimg.cn/202009230004006917.png" alt="" width="880" height="2635" /><img src="https://img-bss.csdnimg.cn/202009230004102289.png" alt="" width="880" height="2635" /><img src="https://img-bss.csdnimg.cn/202009230004197845.png" alt="" width="880" height="1445" /></p> </div>
<p> <strong><span style="font-size:18px;">课程目标</span></strong> </p> <p> <span style="font-size:18px;">从零开始掌握PS的基础知识,学会抠图修图调色合成制作特效,涵盖平面设计淘宝美工照片修复网页设计UI</span> </p> <p> <strong><span style="font-size:18px;">适用人群</span></strong> </p> <p> <span style="font-size:18px;">PS零基础小白,在校大学生,职场新人,想从事平面设计、摄影后期、电商设计、UI设计、自媒体工作的人</span> </p> <p> <strong><span style="font-size:18px;">课程简介</span></strong> </p> <p> <span style="color:#666666;font-size:18px;">课程以新版PS CC 2020讲解,可使用PS CC任意版本学习,绝大多数功能兼容旧版,但建议使用新版。</span><br /> <span style="color:#666666;font-size:18px;">【Adobe认证专家讲师精耕细作精品教程,非学院派照本宣科软件操作教程,以任务为导向,面向实际应用场景,每章都能学会实打实的高手技能,讲解细致,小白也能轻松入门】</span><br /> <span style="color:#666666;font-size:18px;">课程好不好,看过就知道,前面的免费章节欢迎试看。</span><br /> <span style="color:#666666;font-size:18px;">本课程学习不需要任何PS基础,只需要电脑操作基础即可。兼容Windows和Mac操作系统,同时讲解两种系统下的快捷键操作,不用担心操作上的障碍问题。</span><br /> <span style="color:#666666;font-size:18px;"><strong>课程特色</strong></span><br /> <span style="color:#666666;font-size:18px;">1、以实际PS图像编辑与合成的流程为导向,绝大多数内容都是为了完成某个具体任务,而不是为了讲解某个软件操作而凑数。</span><br /> <span style="color:#666666;font-size:18px;">2、不同于国内多数教程和书籍,每个知识点务求讲精、讲透,帮助你掌握PS的精髓,而非软件操作上的皮毛,让你真正学到PS的本质,次学习,终身受用,少走弯路,节约生命。</span><br /> <span style="color:#666666;font-size:18px;">3、课程会随PS新版本的推出持续更新,不必担心有新功能却不知道怎么用。</span><br /> <span style="color:#666666;font-size:18px;">4、充足的练习题和作业题,让你在不断的练习和挑战中提升PS技能。</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202007270604434777.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270606519854.png" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607061438.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607183610.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607312915.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607393129.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607483175.jpg" alt="" /><img src="https://img-bss.csdnimg.cn/202007270607551373.jpg" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
<p class="MsoNormal"> <span style="font-family:'微软雅黑',sans-serif;">YOLO</span><span style="font-family:'微软雅黑',sans-serif;">系列是基于深度学习的端到端实时目标检测方法。 <span>PyTorch</span>版的<span>YOLOv5</span>轻量而性能高,更加灵活和便利。</span><span style="font-family:微软雅黑, sans-serif;"> </span> </p> <p class="MsoNormal"> <span style="font-family:'微软雅黑',sans-serif;">本课程将手把手地教大家使用<span>labelImg</span>标注和使用<span>YOLOv5</span>训练自己的数据集。课程实战分为两个项目单目标检测足球目标检测和多目标检测足球和梅西同时检测。</span><span style="font-family:微软雅黑, sans-serif;"> </span> </p> <p class="MsoNormal"> <span style="font-family:'微软雅黑',sans-serif;">本课程的<span>YOLOv5</span>使用<span>ultralytics/yolov5</span>,在<span style="color:#e03e2d;"><strong><span>Windows</span></strong></span>系统上做项目演示。包括安装<span>YOLOv5</span>、标注自己的数据集、准备自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型和性能统计。</span><span style="font-family:微软雅黑, sans-serif;"> </span> </p> <p class="MsoNormal"> <span style="font-family:微软雅黑, sans-serif;">希望学习Ubuntu上演示的同学,请前往 </span><span style="font-family:微软雅黑, sans-serif;">《</span><span style="font-family:微软雅黑, sans-serif;">YOLOv5(PyTorch)</span><span style="font-family:微软雅黑, sans-serif;">实战训练自己的数据集(Ubuntu)》课程链接https://edu.csdn.net/course/detail/30793</span><span style="font-family:宋体;"><span style="font-size:14px;"> </span></span> </p> <p style="margin-left:0cm;">   </p> <p style="margin-left:0cm;"> 本人推出了有关YOLOv5目标检测的系列课程。请持续关注该系列的其它视频课程,包括 </p> <p> 《YOLOv5(PyTorch)目标检测实战训练自己的数据集》 </p> <p> Ubuntu系统 <strong><a href="https://edu.csdn.net/course/detail/30793"><span style="color:#7c79e5;">https://edu.csdn.net/course/detail/30793</span></a></strong> </p> <p> Windows系统 <strong><a href="https://edu.csdn.net/course/detail/30923"><span style="color:#7c79e5;">https://edu.csdn.net/course/detail/30923</span></a></strong> </p> <p> 《YOLOv5(PyTorch)目标检测原理与源码解析》<strong><a href="https://edu.csdn.net/course/detail/31428"><span style="color:#7c79e5;">https://edu.csdn.net/course/detail/31428</span></a></strong> </p> <p> 《YOLOv5(PyTorch)目标检测实战Flask Web部署》<strong><a href="https://edu.csdn.net/course/detail/31087"><span style="color:#7c79e5;">https://edu.csdn.net/course/detail/31087</span></a></strong> </p> <p> 《YOLOv5(PyTorch)目标检测实战TensorRT加速部署》<strong><a href="https://edu.csdn.net/course/detail/32303"><span style="color:#7c79e5;">https://edu.csdn.net/course/detail/32303</span></a></strong> </p> <p> <img src="https://img-bss.csdnimg.cn/202010090636458614.jpg" alt="课程内容" width="880" height="356" /> </p> <p> <img src="https://img-bss.csdnimg.cn/202010090637068681.jpg" alt="技巧" width="880" height="706" /> </p> <p> <img src="https://img-bss.csdnimg.cn/202010090637267536.jpg" alt="功能" width="880" height="913" /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页