深度学习
文章平均质量分 93
tyler_download
这个作者很懒,什么都没留下…
展开
-
自己动手做chatgpt:解析gpt底层模型transformer的输入处理
剖析chatgpt算法中输入预处理原创 2023-04-21 09:30:00 · 2336 阅读 · 0 评论 -
人脸识别系统的原理与实现:PNET训练数据预处理2
上一节我们详细说明了如何为PNET生成用于训练的人脸图片,本节我们需要将上一节分割出的人脸图片存储成文件,相关代码如下:import numpy as npimport cv2from google.colab.patches import cv2_imshow import os#准备存储不同训练图片的路径pos_save_dir = "/content/drive/MyDrive/my_mtcnn/12/positive"part_save_dir = "/content/drive/原创 2020-12-29 17:21:49 · 7214 阅读 · 8 评论 -
人脸识别系统设计实践:代码生成训练PNET的图片数据
上一节我们了解了PNET的基本原理,本节看看如何生成PNET需要的训练数据。总体而言我们需要产生两部分数据,一部分图片里面包含人脸,另一部分不包含人脸。这里的“包含”或“不包含”并不是指图片中完全没有人脸,而是图片中人脸占据的比率超过一定的阈值时就可以认为给定图片包含人脸。算法会设定三个阈值,当人脸在图片区域占据比率不超过30%,那么认为图片不包含人脸。如果超过30%但是不到45%,那么图片属于“中性”,当人脸占据区域超过65%则断定图片内含有人脸。训练使用的数据集为WIDERFace,该数据集不但包含了原创 2020-12-14 17:20:49 · 5111 阅读 · 4 评论 -
现代黑科技版“指鹿为马":使用CycleGAN实现男女“无痛变性”
在秦朝末期,奸臣赵高一手遮天,为了显示自己的权势与力量,他在众人面前指着一头鹿说那是马,大家畏惧赵高的权势,明知那是鹿却不得不配合赵高说那是马,这就是经典成语”指鹿为马“的出处。在光天化日之下,罔顾事实强行将A说成B,除非你有权有势,别人都依附于你,你才有可能做得到,要不然大家都会认为你傻逼。例如像我这样的平头百姓在大街上指着一个五大三粗,满脸胡渣子的大男人说那是个窈窕大美女,你会不会觉得我傻逼呢?在现代人工智能技术的加持下,我还真有指鹿为马,指男为女的”超能力“。本节我们介绍一种功能强大的对抗性网络叫原创 2020-05-14 11:30:23 · 1581 阅读 · 0 评论 -
使用WGAN-GP算法构造精致人脸
在上一节中可以看到基于”推土距离“的WGAN网络能够有效生成马图片,但是网络构造能力有所不足,因此导致有些图片模糊,甚至有些图片连马的轮廓都没有构建出来,本节我们改进WGAN网络,让它具有更强大的图像生成能力。在介绍WGAN网络算法时提到,如果把网络看成一个函数,那么网络要想具备好的图像生成能力就必须满足1-Lipshitz条件,也就是要满足公式:根据微积分的中值定理,如果函数f(x)可导,...原创 2020-05-08 10:33:30 · 1205 阅读 · 0 评论 -
使用’推土距离‘构建强悍的WGAN
读者读到此处时或许会有一个感触,网络训练的目的是让网络在接收输入数据后,它输出的结果在给定衡量标准上变得越来越好,由此“衡量标准”设计的好坏对网络训练最终结果产生至关重要的作用。回想上一节,当我们把N张数据图片输入到网络后,网络会输出一个含有N个分量的向量,接着我们先构造一个含有N个1的向量,然后判断网络得出的向量与构造的含有N个1的向量是否足够“接近”。算法判断两个向量是否接近的标准是“交叉...原创 2020-03-31 10:53:44 · 1213 阅读 · 0 评论 -
生成型对抗性网络入门实战一波流
前几节用代码介绍了生成型对抗性网络的实现,但后来我觉得代码的实现七拐八弯,很多不必要的烦琐会增加读者的理解负担,于是花时间把代码进行强力精简,希望由此能帮助有需要的读者更顺利的入门生成型对抗性网络。顾名思义,该网络有一种“对抗”性质。它实际上由两个子网络组成,一个网络叫生成者,一个网络叫鉴别者,后者类似于老师的作用。根据我们自己的学习经验得知,老师的作用除了告诉你“怎么做”之外,最重要的是告诉你...原创 2020-03-16 23:14:44 · 433 阅读 · 0 评论 -
生成型对抗性网络介绍
如何无中生有是AI领域研究的重点。原有神经网络大多是对已有问题的识别和研究,例如让神经网络学会识别图片中的动物是猫还是狗,随着研究的进一步深入,目前能够做到让网络不但能识别图片中的物体,还能让它学会如何创造图片中的物体,具备”创造性“让AI技术的应用价值大大提升。在深度学习“创造性”上做出巨大贡献的是来自谷歌大脑项目组的研究员Goodfellow提出一篇名为"Generative Adversa...原创 2020-02-17 18:56:49 · 590 阅读 · 0 评论 -
应用Tensorflow2.0的Eager模式快速构建神经网络
TensorFlow是开发深度学习算法的主流框架,近来随着keras和pytorch等框架的崛起,它受到了不小挑战,为了应对竞争它本身也在进化,最近新出的2.0版本使得框架的应用更加简易和容易上手,本节我们就如何使用它2.0版本提出的eager模式进行探讨,在后面章节中我们将使用它来开发较为复杂的生成型对抗性网络。最新流行的深度学习框架keras一大特点是接口的易用性和可理解性,它在Tensor...原创 2020-02-02 18:57:24 · 1677 阅读 · 0 评论 -
人脸生成黑科技:实现人脸转变特效,让人脸自动戴墨镜
上一节我们通过VAE网络完成了人脸生成效果。VAE网络一个特性是会把人脸编码成一个含有200个分量的向量,反过来说在特定分布范围内的含有200个分量的向量就对应一张人脸。由于向量之间可以进行运算,这就意味着我们把两张不同人脸A,B分布转换成两个不同向量z_A,z_B,然后我们使用向量运算例如z_AB = z_A *(1 - alpha) + z_B *alpha,就能将两个向量以一定比例合成一个新...原创 2020-01-15 18:16:30 · 7741 阅读 · 1 评论 -
人脸生成黑科技:使用VAE网络实现人脸生成
上一节我们描述了VAE网络的数学原理,特别强调了它能把输入数据隐射到一个区域内,这种特性带来一个特点是,如果将两个不同数据输入网络得到两个区间,这两个区间要是有重合的话,我们在重合的区域内取一点让解码器进行还原,那么被还原的数据就有可能兼具两个输入数据的特点融合,就好像孩子兼具爸爸与妈妈的特征那样,这点特性在人脸生成上大有用场。这次我们使用CelebA数据集来训练VAE网络,该数据集包含了将近2...原创 2019-12-28 10:41:23 · 2811 阅读 · 2 评论 -
可变编解码网络的数学原理
本节我们介绍可变编解码器内部运行的数学原理,了解了这些原理,我们才能明白可变编解码器的设计思想。首先我们需要介绍信息量的概念,它来自于信息论(1):在(1)中x代表我们实验的结果,p(x)表示实验出现给定结果的概率,例如丢一枚硬币,那么我们用x=1表示出现正面,x=0表示出现负面。于是根据(1)一次丢硬币后实验对应的信息量就是-log(1/2) = 1,我们常用比特来作为信息量的单位。第二个需...原创 2019-12-07 18:06:46 · 807 阅读 · 2 评论 -
变脸前奏:掌握可变编解码器
现代人工智能技术能神乎其神的将一个人的脸严丝合缝的移植到另一个人的照片或视频里,类似于ZAO这类风靡一时的应用就能让用户将指定头像切换到一段视频中的对应角色里,而且表情变化看不出任何违和感,我们本节提到的可变编解码器就能实现类似功能。前面章节我们创建的编码器是将一张图片映射为二维空间中一个点,然后让解码器读取该点后将图片还原,它的问题在于如果我们将该点值稍微做一些更改,那么解码器将无法还原回原来...原创 2019-11-13 20:36:15 · 539 阅读 · 1 评论 -
自动编解码器的训练与数据识别效果解析
上一节我们构建了自动编解码器网络。我们将图片输入到编码器后,它将数据”压缩“成只包含2个分量的一维向量,该向量输入解码器后,又会被还原成与输入图片非常相似的图片,本节我们看看如何训练编解码器网络,同时看看它构造的中间向量到底意味着什么。首先我们在上节代码基础上完成网络的训练代码:from keras.callbacks import Callback, LearningRateSchedule...原创 2019-10-29 10:12:54 · 995 阅读 · 1 评论 -
打爆李世石第一步:使用神经网络设计人工智能围棋机器人
上一节,我们使用基于蒙特卡洛树搜索的机器人来自我对弈,同时我们把机器人落子方式和落子时的棋盘编码记录下来,本节我们就使用上一节数据来训练神经网络,让网络学会如何在给定棋盘下进行精确落子。神经网络的运行原理如下:当网络训练好后,我们把棋盘编码对应的二维矩阵转换为一维矩阵输入网络,网络给出大小与棋盘对应的一维向量,每个向量对弈一个0到1之间的值,该值表示落子在对应位置上的赢率,我们只要从输出的一...原创 2019-04-06 16:01:18 · 1123 阅读 · 0 评论 -
使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码
在前面章节中,我们引入不少算法和数据结构用以支持围棋机器人实现。由于围棋的步骤组合太多,几乎没有确定性的算法能在合理的时间内给出好的走法。从本节开始,我们将像AlphGo那样引入深度学习技术,通过训练神经网络的方式打造出一个强大的围棋机器人,使得这个机器人的围棋技能能够超越人类智慧之上。在如下课程中对深度学习技术进行了非常详细详尽的讲解,在这里我们不再对深度学习技术进行启蒙似讲解,而是认为你已经...原创 2019-04-04 10:35:23 · 3021 阅读 · 0 评论 -
使用最大-最小树搜索算法和alpha-beta剪枝算法设计有效围棋走法
我们的世界纷繁复杂,看起来完全不可捉摸。但在很多场景下,它运行的本质其实是通过付出最小的代价获得最大化收益。例如在自然界里的自然选择,光的运行路径。对于人的世界更是如此,由于我们做任何事情,任何选择都要付出相应的成本,因此选择一种决策方式让我们以最小的代价获得最大化的回报无疑是我们行动思考的核心。围棋,以及一切棋类它的本质就是寻求一种最优化策略,但不同之处在于,它不是寻求即时回报,而是寻求最终回...原创 2019-03-26 10:34:46 · 3535 阅读 · 1 评论 -
从零开始再造打爆李世石的AlphaGo:使用蒙特卡洛树搜索实现围棋落子算法
上一节我们完成了最大最小搜索树,加上alhpa-beta剪枝算法实现了围棋落子走法。它存在一个问题是,树搜索的层次不高,尽管如此,围棋机器人下棋时还是要多次扫描棋盘,进行复杂的运算比较后才能做出决定,这个过程异常耗时,以至于好几分钟都无法运算完。在计算机科学中,当面对一个计算量大的复杂问题时,一种常用的做法就是引入概率和随机性,我们不一定要寻找理论上的最优做法,我们只要以一定的概率寻找到相对优越...原创 2019-03-29 11:44:37 · 1789 阅读 · 1 评论 -
从零开始再造打爆李世石的AlphaGo:创造能下围棋的机器人
我们在上节完成了围棋规则和棋盘状态监测功能,本节我们在基于上节的基础上,设计一个能自己下棋的围棋机器人。首先我们设计一个类叫Agent,它的初始化代码如下:class Agent: def __init__(self): pass def select_move(self, game_state): raise NotImplementedError()代码中的s...原创 2019-03-18 17:15:52 · 671 阅读 · 0 评论 -
从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
从本节开始,我们废话少说,迅速进入代码编写阶段。对技术而言“做”永远是比“讲”更好的说,很多用语言讲不清楚的道理,看一下代码自然就明白了。我们要实现的围棋机器人必须做到以下几点:1, 跟踪当前所下的每一步棋。2, 跟踪当前的棋局进展。如果是机器人自我对弈,那么代码对棋局的跟踪与人和机器人对弈是对棋局的跟踪有所不同。3, 根据当前棋盘局势,搜索多种可行的下法,并从中评估出最好的走法。4, 将...原创 2019-03-05 12:00:26 · 914 阅读 · 3 评论 -
生成型对抗性网络的基本定义和介绍:什么叫生成
自从电脑诞生后,人类就有一个梦想,让它像人类一样思考。随着人工智能技术的飞速发展,计算机的思考能力突飞猛进,在很多方面已经通过了所谓的“图灵测试”。特别是在深度学习这一领域技术上,电脑不但具备了很多原以为人类才可能具备的能力,而且某些认知能力已经超过了人的水平,例如在神经网络技术的支持下,电脑在图片识别上的准确率已经超过了人类。然而电脑目前只具备识别力很难具有像人一样的创造力。识别力是你能知道这...原创 2019-08-27 18:25:13 · 630 阅读 · 0 评论 -
从零开始再造打爆李世石的AlphaGo:围棋的基本规则和代码设计思路
从本节开始,我们将从零开始,一行一行代码的编写,直到完整设计出当年击垮13次世界围棋冠军李世石的AlphaGo,幸运的是,在人工智能思维下,我们不需要成为围棋高手就能设计出AlphaGo,例如我对围棋就一窍不通。我们只需要掌握围棋的若干条基本规则,然后你熟悉Python代码的编写,当然也需要你具备深度学习的基本知识,好在这方面也有完善的教学视频,倘若你对深度学习的基本原理尚未掌握,你可以通过下面视...原创 2019-02-28 17:08:52 · 863 阅读 · 0 评论 -
使用人类棋手棋盘数据训练围棋机器人,实现数据预处理
知己知彼,百战不殆。我们要打造一个能胜过人类的机器人,就必须要让机器人掌握人类的围棋思维模式,因此我们就需要使用人类棋手留下的棋盘数据训练机器人,让它从数据中掌握人类围棋思维存在的模式和套路。幸运的是,我们能够通过围棋服务器拿到很多由人落子后产生的棋盘数据。很多围棋服务器公开了这些数据,这些围棋数据以一种叫Smart Game Format的方式存储,我们可以将其下载下来进行预处理后用于训练我们...原创 2019-04-19 16:53:44 · 2495 阅读 · 4 评论 -
构建一个能够打败人类的围棋神经网络
上一节,我们从围棋服务器中下载大量棋谱,并将其转换成网络可以解析的数据格式,在神经网络的开发中完成了最繁琐的一步,也就是数据准备。接下来我们将创建一个神经网络,对数据进行解读,使得网络具备6到7段的围棋专业水平,它尚未具备打败柯洁或李世石这些顶级高手的能力,但打败业余级高手则绰绰有余。我们要完成的网络有三种形态,一种是小型网络,一种是中型网络,一种是大型网络,其能力由弱到强,当然训练的耗时也由少...原创 2019-04-30 16:55:41 · 864 阅读 · 0 评论 -
向AlphaGo进化,应用增强式学习技术打造超越人类的围棋机器人
AlphaGo在与李世石或柯洁对弈过程中有个休息流程。此时人类选手利用这段时间充分放松思维,让自己从上一盘比赛的剧烈思维活动中抽身而出,让身体和思维获得恢复以便再战。但此时AlphaGo并没有休息,而是抓住这段时间自己跟自己对弈,在对方休息时,它可能又让自己下了好几万盘棋,于是自己的下棋能力又有了新的提升。当下一盘棋开始时,李世石和柯洁唯一的变化是由体力的下降而变弱了,而AlphaGo通过自我对弈...原创 2019-05-20 09:31:25 · 416 阅读 · 0 评论 -
实现应用于AlphaGo得增强式学习算法,代码实现1
上一节,我们构造了如下结构的神经网络:Layer (type) Output Shape Param # =================================================================conv2d_59 (Conv2D) (None, 192, 19, 19)...原创 2019-06-19 16:29:55 · 453 阅读 · 0 评论 -
实现应用于AlphaGo得增强式学习算法,代码实现2
上一节我们完成了围棋机器人,也就是Agent,它所面临的环境就是当前棋盘状况。Agent有自己的“脑子”,也就是它自己附带着一个经过人类棋手所产生棋盘数据训练后的网络,由于网络采用人类业余高段位的棋手产生的棋盘数据训练,因此它也具备相当水平,现在问题是如何让它像AlphaGo那样具备超过人类能力的落子水平。我们现在要使用的办法是生成两个Agent,然后让他们相互对弈,我们把对弈过程的每次落子和最...原创 2019-06-21 17:31:32 · 375 阅读 · 0 评论 -
增强式学习:如何使用Q-Learning算法训练围棋机器人
上一节我们构造出如下结构的神经网络:本节我们看看如何使用该网络训练围棋机器人。我们在标题中提到Q-Learning,它实际上是一种使用上面网络进行训练的算法流程。首先我们先定义执行Q-Learning算法的机器人对象:class QAgent: def __init(self, model, encoder): #参数model就是我们构造的神经网络 ...原创 2019-07-17 17:41:23 · 1696 阅读 · 0 评论 -
AlphaGo增强式学习算法:实现‘高手指点’特效
我们在学习过程中离开不了老师的指导,老师除了传授知识外,另外一个很重要的作用是指出问题。我们或多或少有这样的经验,在训练某种技能时一开始进步很快,但不久就进入瓶颈期,这段时期无论你做什么都很难产生明显的突破。此时如果有个水平较高,经验老到的老师给你指条出路,或是告诉你哪一步做出了,你根据它的指导去践行后,水平又会出现新的提升。本节我们就要把这种‘高手指点’的效应引入到围棋机器人的训练过程中从而提...原创 2019-07-31 16:09:16 · 764 阅读 · 1 评论 -
换脸原理,使用GAN网络再造ZAO应用:深度学习和神经网络介绍
人工智能有两大分支,一支是机器学习,一支叫深度学习,目前后者占据人工智能技术的主流,当前流行的ZAO换脸应用,自动驾驶,人脸识别使用的都是后者。深度学习主要用于模仿人的认知能力,它的特长在于处理非机构化数据。以前计算机算法主要用来处理结构化数据,例如链表,二叉树,堆栈等,这些数据结构依靠固定规则构建,但图片,人脸,声音,文章这些数据则无法找到对应的构建规则,例如你无法使用语言去描述一张人脸,使得...原创 2019-09-19 10:41:21 · 1415 阅读 · 0 评论 -
换脸原理,使用GAN网络再造ZAO应用:使用卷积网络提升图像识别率
上一节我们使用全连接网络来对图片内容进行识别,正确率大概在50%左右,准确率不高的原因在于,网络没有对像素点在二维平面上的分布规律加以考量。如果对神经网络引入卷积运算,网络就能具备识别像素点在空间上分布的规律,我们先看看什么是卷积操作。卷积操作简单来说是对两个矩阵进行点和点的乘机后求和,例如下面运算:运算将两个矩阵中的元素依次相乘后求和,也就是0.6*1+0.2*1+0.6*1+0.1*0±...原创 2019-09-28 16:38:33 · 1284 阅读 · 0 评论 -
手算梯度下降法,详解神经网络迭代训练过程
神经网络本质上是一个计算流程,在前端接收输入信号后,经过一层层复杂的运算,在最末端输出结果。然后将计算结果和正确结果相比较,得到误差,再根据误差通过相应计算方法改进网络内部的相关参数,使得网络下次再接收到同样的数据时,最终计算输出得到的结果与正确结果之间的误差能越来越小。这里需要搞清楚一个重要概念,就是如何计算误差,我们列一个表,展示一个在最外层有三个节点的网络对误差的三种计算情况:上...原创 2018-04-21 15:58:24 · 6857 阅读 · 0 评论 -
左右互搏:生成型对抗性网络的强大威力
生成型对抗性网络,简称GEN,在2014年时被发明。它与上一节介绍的VAE也就是编解码网络一样,擅长于图像构造,然而它的功能比VAE要强大不少,我们现在时常听到AI合成网络主播,类似功能的实现绝大多数都基于我们这次要探讨的对抗性网络。生成型对抗性网络一个非常显著的特点是左右互搏。它由两个子网络构成,一个子网络叫generator,它负责构造图片或相应数据,另一个网络叫discriminator,...原创 2019-02-23 15:43:50 · 513 阅读 · 0 评论 -
使用变分编解码器实现自动图像生成
深度学习不仅仅在擅长于从现有数据中发现规律,而且它能主动运用规律创造出现实世界没有的实例来。例如给网络输入大量的人脸图片,让它识别人脸特征,然后我们可以指导网络创建出现实世界中不存在的人脸图像,把深度学习应用在创造性生成上是当前AI领域非常热门的应用。从本节开始,我们将接触神经网络在图像生成方面的应用。有两种专门构建的网络在图像生成上能实现良好效果,一种网络叫变分编解码器,另一种叫生成型对抗性网...原创 2019-02-17 12:33:24 · 1264 阅读 · 0 评论 -
有了LSTM网络,我再也不怕老师让我写作文了
随着深度学习的迅猛发展,人工智能的强大能力已经超出了模仿人类的简单动作,例如识别物体,如今已经能发展到自动驾驶,而且车开的比人都好的地步。目前深度学习进化出的一大功能是能够进行艺术创作,前几年google开发的DeepDream算法能够自己绘制出犹如毕加索抽象画般的艺术作品,而现在使用LSTM网络甚至可以开发出自动作曲程序,据说现在很多曲调都是由深度学习网络创作的。很多艺术创作其实是通过序列号数...原创 2019-02-01 09:57:15 · 1101 阅读 · 0 评论 -
深度学习:基本概念深度解析
我们前面经过了三个实际项目的历练,在项目实践中我们其实在不自觉中经历了深度学习的重要步骤,以及践行了深度学习过程中的一些重要概念,再此我们把这些概念提炼出来加以阐述和理解,这能为我们后面进行难度更大的项目打下扎实的基础,我们需要搞清楚三个概念,分别是数据预加工,特征工程,以及特征学习。数据预处理其实就是要根据项目特点,把相应的数据向量化。在绝大多数数情况下,神经网络的输入数据格式都是向量,只不...原创 2018-07-16 17:14:51 · 1281 阅读 · 1 评论 -
深度学习项目实践,使用神经网络分析电影评论的正能量与负能量
在前面章节中,我们花费大量精力详细解析了神经网络的内在原理。神经网络由如下4个部分组成: 1,神经层,每层由多个神经元组合而成。 2,输入训练数据,已经数据对应的结果标签 3,设计损失函数,也就是用数学公式来表示,神经网络的输出结果与正确结果之间的差距。 4,优化,通过梯度下降法修改神经元的链路权重,然后使得网络的输出结果与正确结果之间的差距越来越小。下图就能将网络的各个组件以及我们前...原创 2018-06-20 17:00:15 · 1060 阅读 · 0 评论 -
深度学习:将新闻报道按照不同话题性质进行分类
深度学习的广泛运用之一就是对文本按照其内容进行分类。例如对新闻报道根据其性质进行划分是常见的应用领域。在本节,我们要把路透社自1986年以来的新闻数据按照46个不同话题进行划分。网络经过训练后,它能够分析一篇新闻稿,然后按照其报道内容,将其归入到设定好的46个话题之一。深度学习在这方面的应用属于典型的“单标签,多类别划分”的文本分类应用。我们这里采用的数据集来自于路透社1986年以来的报道,数...原创 2018-06-27 11:17:13 · 2350 阅读 · 0 评论 -
深度学习:透过神经网络的内在灵魂与柏拉图的哲学理念
以神经网络为基础的深度学习,它最大的作用就是让计算机能求解那些没有明确规则或定义的问题,例如你根本无法制定出一系列明确的规则或步骤去让计算机识别一幅图像中的内容是什么,人工智能最大的强项就是让计算机能处理那些模糊不清,几乎无法用明确的规则或步骤来描述的问题。一个受过大量数据训练的神经网络,给定领域内的图像表示什么内容,此时它就像一个黑盒子,把数据从一端输入,然后结果自动从另一端输出,你根本不知...原创 2018-06-13 17:55:39 · 739 阅读 · 0 评论 -
用python实现数字图片识别神经网络--启动网络的自我训练流程,展示网络数字图片识别效果
上一节,我们完成了网络训练代码的实现,还有一些问题需要做进一步的确认。网络的最终目标是,输入一张手写数字图片后,网络输出该图片对应的数字。由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最终输出层应该有十个节点,每个节点对应一个数字。假设图片对应的是数字0,那么输出层网络中,第一个节点应该输出一个高百分比,其他节点输出低百分比,如果图片对应的数字是9,那么输出层最后一个节点应该输出高百...原创 2018-05-08 18:06:11 · 5610 阅读 · 1 评论