自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(434)
  • 收藏
  • 关注

原创 基于主动视觉机制的深度学习--一个综合池化框架

卷积神经网络(CNN)是深度学习的代表算法之一,长期以来被广泛应用于图像识别领域。它是受到了生物处理过程的启发,通过模仿人类视觉系统(HVS)的工作机制,完成各种视觉任务等。但与HVS相比,CNN不能够像人类一样,迅速的分析和适应一些特定的任务,其信息提取能力相较于人类还有较大的差距。之所以存在这个问题是因为在卷积神经网络中的卷积层的主要功能就是对输入数据进行特征提取,它会缩减模型的大小,裁剪数据,但是同时也会丢失一些有效数据。合适的池化方法对CNN的性能有着及其明显的影响。为此,我们提出了一种新的基于Mi

2022-11-23 16:03:34 280

原创 MSG企业行·AI+医疗专场成功举办!!昇思MindSpore助力智慧医疗深度发展!

基于国产化MindSpore深度学习平台,以快捷轻便的皮肤病诊断为研究重点深入挖掘,运用团队所研究的小样本分类、自然语言处理和知识图谱技术,分享了基于MindSpore的轻量级移动平台皮肤病辅助诊断系统。:面向质谱数据处理与管理过程中存在的共性难题,聚焦分子智能识别检测技术,针对高分辨质谱仪器产生的浩瀚数据,分享了如何实现从质谱峰检测、峰对齐、差异分析、分子鉴定、样本智能识别,到数据库自建的完整功能。人工智能与医疗行业嘉宾,基于AI技术在医疗领域的深度发展和突破,进行了议题分享与交流。

2022-11-23 15:46:53 323

原创 MIR 2022 反者道之动, 基于因果推断的可解释对抗防御

01研究动机1.1 研究背景深度学习开启了人工智能的新时代。在这个属于深度神经网络的“镀金年代”中,深度学习模型在众多任务中攻城略地,狂飙突进。然而猛然间人们却发现,只需要对输入样本进行微小扰动(对抗攻击),其输出结果就会发生灾难性的错误。这意料之外的脆弱性仿佛漂浮在晴朗天空一角的乌云,为这个时代投下了令人不安的阴影。图一:对抗样本。在原图中添加很小的扰动即可操纵模型输出。面对对抗攻击带来的威胁,一个简单粗暴的思路首先被想到:将对抗样本引入训练过程,通过训练提升神经网络的对抗鲁棒性。这可以说是深度学习时代的

2022-11-23 15:43:15 17

原创 【MindSpore易点通】Transformer的注意力机制

通过本文自注意力机制self-attention的过程解析,首先通过输入词的query和key相乘计算出一个关系权重,再用这个关系权重对value进行加权求和,以提升一个序列中相关向量的权重,降低不相关元素的权重。在计算完自注意力分数后,我们看到后面还有一个softmax计算,考虑到softmax的图形,在值越大的地方梯度会越小,所以如果上一步计算出的分数值越大,那样就会出现梯度小时的情况,此时就需要进行分数值的调整。常用的计算方法是用分数值除以dk的开方,这里的dk表示向量k的维度。

2022-11-21 09:59:57 15

原创 【AI工程】08-MLOps工具-在Charmed Kubeflow上运行MindSpore

这是MindSpore和Charmed Kubeflow集成的第一步,后续我们还将持续的把MindSpore更多能力集成到Charmed Kubeflow中,方便开发者能在MlOps平台上更方便的使用MindSpore。

2022-11-21 09:54:08 164

原创 昇思MindSpore时序AI SIG,共同提高序列大数据分析能力

研究多序列场景下内嵌数理规则的长序列数据预测方法,突破传统预测模型可解释能力不足、预测机理不明确、关键元素缺失的局限性,通过融合物理过程提升模型稳定可解释预测的能力,还原非稳态环境下的环境与策略的复杂依赖关系,解决长序列数据的规则协同预测与持续决策问题。研究长序列场景下序列数据的稀疏建模与单步推断预测,利用序列数据的长尾冗余性假设,建模序列稀疏机制以提升长序列模型的计算效率和准确性,并通过避免迭代递推计算减小预测误差的累积,保证模型计算复杂度与预测精度的有效平衡,解决长序列数据的高效精准预测问题。

2022-11-15 11:21:24 157

原创 一种逐样本的偏AUC优化框架

然而,关于最先进的深度学习架构文献中采用的是逐对的损失函数,逐对的损失函数在样本量方面的可扩展性有限,对于单路偏AUC优化的收敛率与普通随机梯度下降的收敛率保持一致,而双路偏AUC优化的收敛率会明显变慢。相比于传统的不平衡数据分类问题,如医学诊断、垃圾邮件过滤以及风险金融账户检测等问题的应用场景中,往往更倾向于训练模型在较低的假阳率区间内获得更高的真阳率,换言之,这些应用场景更加关注于难样本的学习,而目前常用的AUC指标更关注于整体的表现,与现有需求不一致。图1:不同AUC指标的变体。

2022-11-15 11:13:51 279

原创 智能基座昇腾高校行 | 昇思MindSpore携手清华大学共同培养新时代科技人才

针对复杂物体物理交互,首次提出了“子等变”的概念,即把欧氏等变GNN放缩成,只服从由外部力场所诱导子群上的等变GNN,并给出表达能力的完备性证明。当前,人工智能正走进千行百业,对于开发者而言,开源的深度学习框架越来越成为更多开发者的重要工具,作为华为开源的全场景深度学习AI框架,昇思MindSpore旨在实现易开发、高效执行、全场景覆盖三大目标,着重提升易用性并降低AI开发者的开发门槛,非常适合高校开发者学习使用,那么昇思MindSpore到底在哪些领域实现了哪些新应用呢?

2022-11-15 11:02:51 216

原创 多领域介绍昇思MindSpore最新技术动态

对于开发者而言,开源的深度学习框架降低了AI开发的门槛,极大节省成本与时间,是AI创新的重要推手,作为华为开源的全场景深度学习AI框架,昇思MindSpore旨在实现易开发、高效执行、全场景覆盖三大目标,着重提升易用性并降低AI开发者的开发门槛,非常适合高校开发者学习使用,也是众多开发者入行的首选框架。为南京航空航天大学的同学们带来了《智能未来·万里昇腾》为主题的演讲,系统介绍了昇腾产业,以及昇腾开发者产业生态,包括围绕如何为开发者提供“新技术,新体验,新机会”的价值创造理念以及多项昇腾开发者支持计划等。

2022-11-15 10:56:01 159

原创 【AI工程论文解读】03-DevOps for AI-人工智能应用开发面临的挑战

ML是近十年来发展迅速、最有前途的技术,几乎应用于所有商业领域和研究领域。在许多领域(如医疗诊断),与传统应用程序相比,ML在提供结果方面表现出优势,并在某些活动中表现出优于人类智慧。这些趋势引发了对数据、AI科学家以及软件开发人员的巨大需求。早期研究表明,构建算法(即开发ML模型)只是成功开发并运行基于AI的软件系统所需全部工作的一小部分。ML软件实现与传统软件的区别在于,它们的逻辑不是显式编程的,而是通过从数据中学习自动创建的。

2022-11-15 10:53:28 266

原创 【MindSpore易点通】模型测试和验证

在测试中调用MindSpore已有的评估函数,需要定义一个dict,包含要使用的评估方式,并在定义model时传入,后续调用model.eval()会返回一个dict,内容即为metrics的指标和结果。本文的样例代码是一个Resnet50在Cifar10上训练的分类网络,采用datasets.Cifar10Dataset接口读取二进制版本的CIFAR-10数据集,因此下载CIFAR-10 binary version (suitable for C programs),并在代码中配置好数据路径。

2022-11-15 10:12:26 19

原创 基于昇思MindQuantum, 实现微分方程求解

微分方程具有广泛应用,包括预测力学和流体动力学的运动以及描述化学反应、生态学的生态系统平衡、金融学的市场动态和流行病学的疾病传播。在许多情况下,寻找非线性微分方程组的解是具有挑战性的,需要先进的数值技术。本任务是要求使用MindQuantum平台,利用VQA算法对在物理、化学上有广泛应用的微分方程进行求解。

2022-11-11 11:37:47 31

原创 【MindSpore易点通】如何迁移PyTorch代码并在Ascend上实现单机单卡训练

由于MindSpore的架构设计不同于PyTorch框架,二者的训练流程以及代码实现也有不同,下图展示了两者的区别。

2022-11-08 11:08:43 36

原创 【MindSpore易点通】在昇腾Ascend平台使用全精度计算

打开在Ascend执行的第一张图所对应的trace_code_graph_xxx文件,此时数据流经过第一个卷积层所对应的数据类型为:float32(输入)—>float16(计算)—>float32(输出)打开在Ascend执行的第三张图所对应的trace_code_graph_xxx文件,此时数据流经过第三个卷积层所对应的数据类型为:float32(输入)—>float16(计算)—>float32(输出)此时数据流的数据类型为:float32(输入)—>float32(计算)—>float32(输出)

2022-11-08 10:54:53 22

原创 【MindSpore易点通】如何将PyTorch源码转成MindSpore低阶API,并在Ascend芯片上实现单机单卡训练

构造模型时,首先将网络原型与损失函数封装,再将组合的模型与优化器封装,最终组合成一个可用于训练的网络。由于训练并验证中,需计算在训练集上的精度 ,因此返回值中需包含网络的输出值。与MindSpore高阶API相同,低阶API训练也需要进行:配置运行信息、数据读取和预处理、网络定义、定义损失函数和优化器。注:由于高阶API采用数据下沉模式进行训练,而低阶API不支持数据下沉训练,因此高阶API比低阶API训练速度快。下图展示了MindSpore高阶API、低阶API和PyTorch的训练流程的区别。

2022-11-08 10:36:46 18

原创 【MindSpore易点通】如何实现MindSpore与PyTorch模型文件相互转换

输入 MindSpore的ckpt文件,以ResNet-18为例,MindSpore的网络结构和PyTorch保持一致,转完之后可直接加载进网络,这边参数只用到bn和conv2d,若有其他层MindSpore和PyTorch名称不一致,需要同样的修改名称。PyTorch的pth文件,以ResNet-18为例,MindSpore的网络结构和PyTorch保持一致,转完之后可直接加载进网络,这边参数只用到BN和Conv2D,若有其他层MindSpore和PyTorch名称不一致,需要同样的修改名称。

2022-11-08 10:15:44 270

原创 【MindSpore易点通】MindSpore Data经验解析

首先MindSpore Data提供了简洁、丰富的数据读取、处理、增强等功能;

2022-11-07 11:38:57 418

原创 深入了解MindSpore训练推理框架设计

在本篇博客中,笔者将围绕MindSpore的Model类的相关代码,对MindSpore的训练流程设计和推理流程设计进行深入的解读,并且结合相应的代码,以分割任务为例,给读者介绍如何使用Model.train和Model.eval构建复杂任务的训练测试流程设计。而在MindSpore的训练中,往往会限制用户对所得到的输出进行一些复杂的后处理,往往会陷入图模式的限制(事实上为了得到更好的训练性能,图模式的选择是必须的),这就导致了框架使用的易用性和用户想得到的高性能从本质上产生了冲突。

2022-11-07 11:23:30 43

原创 【MindSpore易点通】在开发环境中如何使用MindInsight在线调试器

与离线调试器的区别在于,离线调试器只能待整个任务运行完成后(收集到整个任务过程的dump数据后)方可查看相应数值。在ModelArts控制台,进入“开发环境管理 > DevContainer”页面,创建开发环境实例,创建成功后,单击开发环境实例操作栏右侧的“打开 > 打开Notebook”,在线打开运行中的开发环境。--debugger-port: 表示指定的调试服务端口,取值需要和训练脚本中设置的调试服务端口值保持一致。在创建开发环境并在线打开后,点击如下图所示的按钮,创建.ipynb文件。

2022-11-07 11:01:37 171

原创 【MindSpore易点通】在开发环境下如何使用MindInsight可视化Dump数据

在保存Dump数据时,可以直接保存到/home/ma-user/work/xxx/中,也可通过自动回传mox操作放入OBS桶中,由于Dump数据所占磁盘空间较大,故在此推荐使用OBS方式。在ModelArts控制台,进入“开发环境管理 > DevContainer”页面,创建开发环境实例,创建成功后,单击开发环境实例操作栏右侧的“打开 > 打开Notebook”,在线打开运行中的开发环境。在训练脚本中写入收集Dump数据的代码,执行训练脚本可获取Dump数据,推荐使用异步Dump。

2022-11-07 10:58:52 206

原创 【MindSpore易点通】如何根据profiler数据查看性能瓶颈

3.当算子左边连接的Queue使用率都比较高,右边连接的Queue使用率比较低时,该算子可能是性能瓶颈:图中红框内数据可以看出,map操作过程中的队列使用率高,而右边连接的队列使用率较低,判断map中的数据处理过程存在性能瓶颈。:分析用于已经定位到了该阶段的问题时,定位其中哪个算子存在问题,通过各个算子之间的队列的使用率,判断前面的算子能否提供足够的数据到队列中供下一个算子使用。经过以上优化,训练性能得到明显提升。:下图展示了迭代间隙阶段执行的操作的流程,通过分析队列中数据的情况判断出现性能问题的步骤。

2022-11-07 10:55:57 86

原创 【MindSpore易点通】如何实现梯度不回传以及梯度回传后不更新权重功能

梯度更新的中心思想沿着loss函数梯度的方向更新权重以让loss函数的值最小化或accuracy最大化,在示例代码中使用requires_grad与stop_gradient方法实现禁止conv1层梯度更新。用户在使用深度学习网络结构执行开发任务时,难免会遇到一些代码上看上去很正常,而且代价函数也在不断减小,但是因为不知道的bug存在,使得我们得到的神经网络并不是最优解。requires_grad:bool类型,当值为True时表面该参数需要更新,反之则不需更新。

2022-11-07 10:49:40 222

原创 神经网络从数据中学习空气动力学物理定律

机器学习和基础学科交叉在近年受到越来越多的关注。能够从大量数据中学习的 AI,是否能够像人类一样,从数据中发现规律?当神经网络被用于解决物理问题时,是否有可能学习到物理知识?近日,来自加拿大蒙特利尔大学的研究人员给出了肯定的回答。该工作在研究 AI 如何完成翼型气动系数预测任务过程中,发现了神经网络在训练过程中学习空气动力学物理定律的证据。该研究以《Learning aerodynamics with neural network》为题,于 2022 年 4月发布在《Scientific Reports》上

2022-11-04 17:28:30 17

原创 昇思MindSpore行业与技术论坛暨昇思生态城市行•长沙站重磅开启:共促AI根技术发展

本次活动为第八届中国人工智能大会的一部分,创办于2015年的“中国人工智能大会”,每年举办一届,是我国最早发起举办的人工智能大会,目前已经成为我国人工智能领域规格最高、规模最大、影响力最强的专业会议之一。在大算力的支撑下,昇思赋能多家合作伙伴实现技术突破,打造核心解决方案,共建人工智能产业软硬件生态。昇思致力于携手伙伴推动产业生态的建设,本次昇思生态城市行活动邀请三家湖南本地人工智能企业代表作应用分享,相关专家将带来昇思 AI 框架应用在智慧交通、智能语音等行业实践的经验分享,共话人工智能产业新应用。

2022-11-04 17:19:46 315

原创 漏洞盒子 X 华为昇思MindSpore | 构建AI框架安全护城河

对于利用漏洞损害用户利益、影响业务运营、盗取用户数据、恶意传播漏洞或数据等涉嫌违反法律、行政法规规定或违反昇思MindSpore社区管理规定、网站协议等的违法行为,昇思MindSpore社区均将保留追究法律责任的权利。“未来十年是 AI 的黄金十年”如今,我们正处于一个人工智能爆发的时代,越来越多成熟的人工智能产品逐渐渗透到每一个人的生活,AI被视为高精尖技术竞赛角逐的战场,不断影响着最前沿的科学研究领域。,正式上线漏洞盒子,旨在联合安全领域的个人以及团队共同发现潜在的安全威胁。只要优秀白帽在的地方。

2022-11-02 14:55:45 111

原创 昇思MindSpore开源社区算力使能,快来SIG申请你的专属算力

昇思MindSpore致力于为AI科学家和工程师提供设计友好运行高效的开发体验,推动人工智能软硬件应用生态繁荣发展。为此MindSpore成立多个技术SIG,为各领域专家、教授和学生提供一个开放交流的平台。

2022-11-02 14:51:54 80

原创 【MindSpore易点通】常用性能调优方法经验总结

MindSpore提供了一种自动数据调优的工具——Dataset AutoTune,用于在训练过程中根据环境资源的情况自动调整数据处理管道的并行度,最大化利用系统资源加速数据处理管道的处理速度。MindSpore Data中的某些算子接收num_parallel_workers参数,该参数设置了算子使用的线程数。根据物理内核的数量和目标系统的负载,增加管道中num_parallel_workers的值,可以提高性能。采用数据集的下沉模式,即训练计算下沉到硬件平台中执行,数据下沉可以优化训练性能。

2022-11-02 14:18:01 80

原创 【MindSpore易点通】混合精度训练使用总结

混合精度训练方法是通过混合使用单精度和半精度数据格式来加速深度神经网络训练的过程,同时保持了单精度训练所能达到的网络精度。混合精度训练能够加速计算过程,同时减少内存使用和存取,并使得在特定的硬件上可以训练更大的模型或batch size。MindSpore低阶API使用混合精度,只需在MindSpore低阶API代码构造模型步骤中,将网络设置成混合精度进行训练。修改高阶API代码中的Model接口,将amp_level设置成"O3",网络将采用混合精度进行训练。3、将Loss层设置为FP32进行计算;

2022-11-02 14:08:45 119

原创 【MindSpore易点通】精度调测经验总结

MindData的第三方库和PyTorch的第三方库不一样(MindData使用的是OpenCV),因此c_transforms.Resize和torch_transforms.Resize的输出相比有点误差是正常的,不影响使用。MindData数据预处理中有用到c_transforms.Resize,该算子实现与torch_transforms.Resize实现不一致。DUMP_train图没有某些算子的数据,因此网络进行精度调测的时候,经常要查看DUMP图中的算子信息。

2022-11-02 13:51:10 8

原创 【MindSpore易点通】精度问题定位经验总结

1、检查超参数的设置是否正确(例如优化器的weight decay、优化器的momentum、初始学习率、Dropout的prop和bn的momentum),框架迁移的场景检查初超参数设置是否和原始脚本一致,重头在MindSpore上开发的场景检查超参数设置是否符合预期。2、使用Print算子在网络结构中二分法打印算子的反向输出,找到反向精度出现问题的算子。2、检查初始化方式是否正确,框架迁移的场景检查初始化方式和结果是否和原始脚本一致,重头在MindSpore上开发的场景检查初始化结果是否符合预期。

2022-11-02 13:44:55 11

原创 【MindSpore易点通】dump工具使用经验总结

本文针对静态图模式,介绍如何运用Dump工具对网络数据进行分析。分为异步dump和同步dump两种方式。注:推荐用异步dump。MindSpore默认开启内存复用,而同步dump会关闭内存复用,可能会影响训练状态。

2022-11-01 15:48:04 154

原创 【MindSpore易点通】常用定位方法之按Cell粒度Dump

开发人员在调试模型时可能会遇到一些异常情况,比如性能、精度异常,需要分析训练过程中特定Cell或算子的输入和输出数据。而在使用异步Dump在Graph模式调试中提供了指定Cell或算子的dump数据功能,即“按cell粒度dump”。“按按Cell粒度Dump”是异步Dump下的一个子功能;通过修改data_dump.json文件中dump_mode 的值来dump特定的算子数据。以下代码对自定义网络中卷积层使用dump数据功能。

2022-11-01 15:35:29 76

原创 【MindSpore易点通】常用定位方法之打印模型权重梯度

TrainOneStepCellPrintGrad所继承的TrainOneStepCell类中定义了self.grad=mindspore.ops.GradOperation方法因此在这里直接应用该方法。用户在训练脚本时往往会遇到loss不收敛或者其他精度问题,而精度问题产生的原因往往是因为梯度对参数的调整不合适或者梯度更新异常造成,针对梯度所造成的精度问题,故在此介绍一种打印模型梯度更新的方法。在高阶模型中,通过改写model里build_train_network函数实现打印模型梯度功能。

2022-11-01 15:31:29 322

原创 【MindSpore易点通】精度调优之梯度裁剪法

用户在训练脚本时往往会遇到loss不收敛或者其他精度问题,而精度问题产生的主要原因之一是因为者梯度更新过程中梯度值过大或过小导致调参不准确所造成,针对梯度值在更新过程中过大或过小原因所造成的精度问题,故在此介绍一种梯度裁剪方法;顾名思义,梯度裁剪(gradient clip)是指当梯度小于或大于某个阈值时,强制调整梯度使其变大或变小的技术。梯度裁剪的低阶模型示例代码以及高阶模型示例代码请至附件处下载。注:目前仅支持非下沉模式。

2022-11-01 15:22:32 300

原创 【MindSpore易点通】如何迁移PyTorch代码并在Ascend上实现单机单卡训练

由于MindSpore的架构设计不同于PyTorch框架,二者的训练流程以及代码实现也有不同,下图展示了两者的区别。

2022-11-01 11:09:25 304

原创 【MindSpore易点通】如何使用溢出检测工具定位精度问题

溢出检测工具一旦检测到计算过程中有溢出,便会通过[WARNING]消息告知用户具体哪个算子计算时发生了溢出,并保存该算子对应的输入和输出数据(通过Dump方式保存),供用户分析。以下代码对FP16格式的数据进行40000+41000的求和操作,理论结果为81000,但超过了FP16的最大表示值65504,因此求和计算过程中将发生上溢出。**下溢出:**数值小于最小表示精度。根据解析文件可以看到该文件所存储的数据为input.0.npy文件为ReduceSum算子的输入,即代码中的input_x;

2022-10-31 16:05:53 106

原创 【MindSpore易点通】静态LossScale和动态LossScale的区别

在训练过程中,如果不发生溢出,在更新scale_window次参数后,会尝试扩大scale的值,如果发生了溢出,则跳过参数更新,并缩小scale的值,入参scale_factor是控制扩大或缩小的步数,scale_window控制没有发生溢出时,最大的连续更新步数。如果发生了溢出(上溢出),将缩小scale的值。LossScale在训练过程中使用固定scale的值,且在训练过程中不会改变scale的值,scale的值由入参loss_scale控制,可以由用户指定,不指定则取默认值。

2022-10-31 16:01:13 14

原创 【MindSpore易点通】调优精度之高阶API使用静态LossScale

在混合精度中,使用float16类型来替代float32类型存储数据,从而达到减少内存和提高计算速度的效果。但是由于float16类型要比float32类型表示的范围小很多,所以当某些参数(比如说梯度)在训练过程中变得很小时,就会发生数据下溢的情况。

2022-10-31 15:53:52 10

原创 【MindSpore易点通】调优精度之高阶API使用动态LossScale

而动态更新网络结构中的loss scale正是为了解决float16类型数据下溢问题的,loss scale的主要思想是在计算loss时,将loss扩大一定的倍数,由于链式法则的存在,梯度也会相应扩大,然后在优化器更新权重时再缩小相应的倍数,从而避免了数据下溢的情况又不影响计算结果。如果发生了上溢出,则跳过参数更新,并缩小scale的值,入参scale_factor是控制扩大或缩小的步数,scale_window控制没有发生溢出时,最大的连续更新步数。初始化的LossScale,默认值2**24。

2022-10-31 15:51:05 22

原创 【MindSpore易点通】调优精度之低阶API使用静态LossScale

LossScale的主要思想是在计算loss时,将loss扩大一定的倍数,由于链式法则的存在,梯度也会相应扩大,然后在优化器更新权重时再缩小相应的倍数,从而避免了数据下溢的情况又不影响计算结果;在MindSpore中,loss scale的使用方法又分动态loss scale和静态loss scale两种,二者具体区别详见静态LossScale和动态LossScale的区别。:定义一个静态LossScale的模型控制器,它将网络、优化器和可能的scale 更新网络作为参数。为用户更新权重的优化器;

2022-10-31 15:48:15 10

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除