Clichong
这个作者很懒,什么都没留下…
展开
-
【40】torch.nn汇总(各类与函数接口的解释说明)
如有错误,恳请指出。以下内容是对torch.nn的各个接口进行一个简要汇总,持续更新…官方链接:https://pytorch.org/docs/stable/nn.htmlModuleList:在列表中保存子模块ModuleDict:在字典中保存子模块ParameterList:将参数保存在列表中ParameterDict:将参数保存在字典中1. Convolution Layersnn.Conv1d:普通一维卷积,常用于文本。参数个数 = 输入通道数×卷积核尺寸(原创 2022-06-20 11:04:22 · 2436 阅读 · 0 评论 -
【39】多种方法实现矩阵的图像显示与保存
如有错误,恳请指出。一般情况下,在计算机视觉领域会出现很多次需要将图像显示或者保存到文件夹下,下面就介绍使用多种方法来实现图像的保存与显示。文章目录1. 从矩阵到图片的显示方法与保存1.1 PIL实现1.2 Matplotlib实现1.3 OpenCV实现1.4 Numpy实现1.5 Torchvision实现2. 从路径到图片的显示方法2.1 PIL实现2.2 Matplotlib实现2.3 OpenCV实现1. 从矩阵到图片的显示方法与保存1.1 PIL实现from PIL import .原创 2022-05-16 22:48:19 · 2247 阅读 · 0 评论 -
【38】开源算法库mmdetection的安装与使用
如有错误,恳请指出。文章目录1. MMDetection的安装2. MMDetection的使用2.1 官方demoImage推理Video推理Webcam推理2.2 实践测试OpenMMLad有一系列的开源算法库,包含分类,检测,分割等等计算机视觉的任务,这篇博客用来简单记录一下其开源的检测算法库的安装与使用过程。1. MMDetection的安装安装mmdetection的过程不算复杂,主要是需要选择其开发的openmim安装套件,是一个自动安装依赖项的工具。而创建虚拟环境那些就不提及了,.原创 2022-05-16 17:03:09 · 1513 阅读 · 0 评论 -
【37】使用LSTM实现文本分类、图像分类、图像生成任务
如有错误,恳请指出。在上一篇文章中,使用了LSTM来预测时序信息,但是在自然语言处理领域中,LSTM可以用来进行文本预测,大体上的思路是将batch个文本,每个文本的seq个词汇编码为hidden dim长度的特征向量,所以最后的特征维度是[seq, batch, hidden dim],就可以作为输入数据。提取LSTM最后的一个隐藏单元[batch, hidden dim],再使用一个全连接层就可以实现分类。而对于图像来说,其信息维度都很熟悉了,[batch, c, h, w],那么其实也可以是将.原创 2022-05-12 12:15:54 · 10350 阅读 · 8 评论 -
【36】使用RNN与LSTM实现时序信息预测
如有错误,恳请指出。在上一篇博文笔记中,见:【35】Sequence序列网络介绍与使用,我介绍了如何利用pytorch提供的RNN与LSTM接口,来搭建一个时序网络,那么在这篇文章中就打算用RNN网络或者LSTM网络来做一些时序预测的相关任务。这里提供了两个例子:1)使用RNN网络来预测正弦方波2)使用LSTM网络来预测周期性的航班数据其中,第一个例子是龙曲良老师授课的一个例子,第二个例子是见博客修改的,见参考资料。在下篇文章中,还会介绍一下LSTM的其他我觉得挺好玩的应用:3)使用.原创 2022-05-12 11:20:08 · 1039 阅读 · 0 评论 -
【35】Sequence序列网络介绍与使用(含RNN,RNNCell,LSTM,LSTMCell的调用)
文章目录1. 时间序列的表示方法1.1 word2vec编码实现1.2 GloVe编码实现2. RNN2.1 单层rnn测试2.2 多层rnn测试3. RNNCell3.1 单层RNNCell3.2 多层RNNCell4. LSTM4.1 单层lstm4.2 多层lstm4.3 单层双向lstm4.4 多层双向lstm5. LSTMCell5.1 单层LSTMCell5.2 多层LSTMCell在上一篇笔记中,了解了可以使用各种编码的方式对一句文本进行编码为一个特征向量,处理的方法可以有词频处理,权重处理原创 2022-05-11 10:52:50 · 766 阅读 · 0 评论 -
【34】文本文档分类实战(哈希编码/权重编码提取特征 + 卡方过滤 + 搭建神经网络分类)
如有错误,恳请指出。最近在学习一些sklearn的特征降维与特征提取的事情,可以参考前面几篇发的博客。在之前也提及到,对于一个文本,可以将其编码为词频向量,或在是权重向量,也可以将其编码为哈希向量。对于最后的哈希向量可以理解为一个降维的特征提取过程。首先说一下,我暂时完全没有接触过nlp的相关任务,也还没有使用过rnn,lstm等时序网络。但是现在,已经把一个文本也可以称得上为一个样本编码为一个向量,配合我们之前学到的各种机器学习分类器与深度学习,那么不就可以对这个特征向量进行分类训练,从而实现文本.原创 2022-05-07 17:42:28 · 897 阅读 · 0 评论 -
【33】t-SNE原理介绍与对手写数字MNIST的可视化结果
如有错误,恳请指出。这篇博客将会介绍一个无监督的降维算法——t-SNE,其是一个常用的降维可视化工具,下面会记录一下李宏毅老师对其的原理介绍,然后我做了一个实验,用其来对手写数字(MNIST数据集)进行降维的一个效果展示。文章目录1. t-SNE原理介绍1.1 manifold介绍1.2 LLE1.3 t-SNE2. t-SNE可视化效果2.1 2D可视化效果2.2 3D可视化效果3. t-SNE降维后对MNIST数据集进行分类1. t-SNE原理介绍t-SNE全称是t-distributed.原创 2022-05-06 18:24:21 · 4364 阅读 · 4 评论 -
【32】多教师网络进行联合蒸馏测试
如有错误,恳请指出。文章目录1. 定义网络2. 数据集配置3. 训练与测试3.1 训练教师神经网络3.2 训练教师卷积网络3.3 训练学生神经网络3.4 多教师联合蒸馏训练在之前的知识蒸馏的例子中,我搭建了一个大的神经教师网络来对小的神经学生网络进行蒸馏。但是,看完那篇博客的朋友可能知道,其实效果不是很好,最后的效果甚至还不如直接训练学生网络,这成为了一时的心结。ps:这里贴上之前的两篇文章,如下所示:1. 《知识蒸馏 | 知识蒸馏的算法原理与其他拓展介绍》2. 《【29】知识蒸馏(knowle.原创 2022-03-22 18:00:12 · 3942 阅读 · 2 评论 -
【31】yolov5的使用 | 训练Pascal voc格式的数据集
如有错误,恳请指出。在上一篇文章中:【30】yolov5的数据集准备 | 处理Pascal voc格式的数据集,已经介绍了如何对自己的数据集进行处理以满足yolov5的格式。现在处理完了数据集,就开始对数据集进行训练。文章目录1. 数据的准备2. yaml文件配置2.1 数据集的yaml文件配置2.2 模型的yaml文件配置3. train.py文件的修改与执行3.1 配置train.py文件的部分参数3.2 执行train.py及可能出现的错误4. 查看tensorboard的可视化效果5. yo.原创 2022-03-21 18:22:31 · 4915 阅读 · 2 评论 -
【30】yolov5的数据集准备 | 处理Pascal voc格式的数据集
如有错误,恳请指出。在使用yolov5训练自己的数据集时,一般需要对数据集进行处理。数据集一般的标注文件为xml格式,所以首先将这种xml格式的标注文件转换为yolo的txt标注文件,然后将再设置成yolov5所需要的目录层次。这里我直接根据图片文件与所处理好的txt目录文件直接生成dataset,这里的dataset满足yolov5所需要的目录层次。文章目录1. 将xml格式的数据转换为yolo格式2. 将数据集切分为训练集与验证集1. 将xml格式的数据转换为yolo格式这里直接将xml目.原创 2022-03-21 17:37:50 · 4872 阅读 · 3 评论 -
【29】知识蒸馏(knowledge distillation)测试以及利用可学习参数辅助知识蒸馏训练Student模型
如有错误,恳请指出。这里主要是对知识蒸馏进行测试已查看效果,其中包含对温度设置所带来的变化;以及可学习参数的设置,设置了一个通过调整两个参数拟合一条直线的小实验;最后测试了知识蒸馏给Student网络带来的效果,与可学习参数对知识蒸馏过程带来的效果。其中,对于知识蒸馏的理论介绍见:知识蒸馏 | 知识蒸馏的算法原理与其他拓展介绍文章目录1. Temperature Control2. Learnable Parameters3. Knowledge Distillation4. Learnable .原创 2022-03-19 16:00:36 · 3425 阅读 · 3 评论 -
【28】使用hook技术获取模型的中间梯度信息与中间特征输出
如有错误,恳请指出。以下内容是关于使用hook技术来获取模型forward过程的特征矩阵以及backward过程的梯度信息。文章目录1. register_hook2. register_forward_hook3. register_backward_hook1. register_hook由于pytorch会自动舍弃图计算的中间结果,所以想要获取这些数值就需要使用钩子函数。钩子函数包括Variable的钩子和nn.Module钩子,用法相似。import torchfrom torc.原创 2022-03-12 16:24:59 · 1366 阅读 · 0 评论 -
【27】grad-cam的简单逻辑实现以及效果展示
如有错误,恳请指出。文章目录1. grad-cam的简单实现2. grad-cam的效果展示1. grad-cam的简单实现grad-cam通过对类别c最后的预测值yc进行方向传播,得到回传的特征层A的梯度信息A‘,此时A’其实就是yc对A所求得的偏导。我们认为,梯度信息比较大的部分其对于当前的这个类别信息是比较重要的,所以在grad-cam中,对于梯度信息A‘会在通道上进行一个平均处理,这样就可以得到每个channel上的一个重要程度,然后再与每个channels进行相乘,也就是进行一个简单的.原创 2022-03-11 22:58:44 · 5693 阅读 · 3 评论 -
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
以下内容如有错误,恳请指出。这两天对pytorch中的梯度计算以及其自动求导机制进行一个简单的实验,主要部分有两个,第一部分是关于pytorch求梯度的简单接口;第二部分是描述grad-cam进行可视化的简单原理与大概的逻辑实现。文章目录1. pytorch关于grad的简单测试1.1 标量对向量求导1.2 矩阵对矩阵求导2. pytorch获取网络输入的梯度信息3. pytorch获取中间过程的梯度信息1. pytorch关于grad的简单测试1.1 标量对向量求导对于一个简单的映射函数,.原创 2022-03-11 22:38:28 · 9056 阅读 · 1 评论 -
【25】模型参数量Params与计算量Flops的计算方法
文章目录1. 推导公式1.1 CNN Params1.2 CNN Flops1.3 Linear Params1.4 Linear Flops2. 计算方法2.1 parameters法2.2 thop法2.3 torchstat法2.4 torchsummary法1. 推导公式1.1 CNN Params1.2 CNN Flops1.3 Linear Params1.4 Linear Flops2. 计算方法2.1 parameters法通过遍历模型的parameters获取结原创 2022-01-05 17:49:53 · 3711 阅读 · 2 评论 -
【24】目标检测模型SSD的搭建及其训练与测试
参考资料:https://zh-v2.d2l.ai/chapter_computer-vision/ssd.html其中代码稍有修改文章目录1. 模型搭建2. 自定义数据集3. 模型训练4. 模型测试1. 模型搭建这里直接贴上代码,这部分框架比较清晰,没有改动,可以正常使用。SSD的框架图:详细具体的搭建流程可以查看参考资料,以下是参考代码:# 以下属于ssd模型的定义def cls_predictor(num_inputs, num_anchors, num_classes): .原创 2021-09-24 21:17:15 · 1532 阅读 · 0 评论 -
【23】多尺度检测及检测数据集
文章目录1. 多尺度边界框检测2. 目标检测数据集%matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport torchvisionimport torchimport os1. 多尺度边界框检测# 测试图像# imagepath = 'E:\学习\机器学习\数据集\VOC2012\VOCdevkit\VOC2012\JPEGImages\\2007_00142原创 2021-09-24 20:56:41 · 922 阅读 · 0 评论 -
【22】目标检测中锚框(anchor)的相关总结
import numpy as npimport torchvisionimport torchimport torchvision.transforms as transformsfrom PIL import Image, ImageDrawimport matplotlib.pyplot as pltimport osimport xml.etree.ElementTree as ET1. 目标检测和边界框# 测试图像# imagepath = 'E:\学习\机器学习\数据集\V原创 2021-09-22 18:57:20 · 1945 阅读 · 3 评论 -
【21】使用预训练的目标检测与语义分割网络
今天简单测试一下pytorch提供的模型文章目录1. 使用训练好的目标检测网络1.1 完整代码2. 使用训练好的语义分割网络2.1 完整代码1. 使用训练好的目标检测网络import numpy as npimport torchvisionimport torchimport torchvision.transforms as transformsfrom PIL import Image, ImageDrawimport matplotlib.pyplot as plt加载已经训练好原创 2021-09-17 18:27:54 · 1594 阅读 · 1 评论 -
【20】迁移学习与微调(fine-tuning)方法
文章目录1. 迁移学习1.1 使用list列表直接截取1.2 直接对结构进行修改2. 微调2.1 冻结层2.2 分组设置参数组3. 优化器基类:Optimizer1. param_groups2. zero_grad3. state_dict4. load_state_dict5. add_param_group这里关于迁移学习与微调的内容不再细说,有关概念可以参考:https://blog.csdn.net/weixin_44751294/article/details/1168443911. 迁移学原创 2021-09-15 20:58:27 · 3701 阅读 · 0 评论 -
【19】pytorch中的权值初始化方法
以下内容来源于Pytorch官方文档与博主余霆嵩提供资料文章目录1. 常用的初始化方法1.1 均匀分布初始化(uniform_)1.2 正态分布初始化(normal_)1.3 常数初始化(constant_)1.4 一值初始化(ones_)1.5 零值初始化(zeros_)1.6 单位矩阵初始化(eye_)1.7 狄拉克初始化(dirac_)1.8 正交初始化(orthogonal_)1.9 稀疏初始化(sparse_)1.10 Xavier初始化1.10.1 Xavier均匀分布(xavier_un.原创 2021-09-15 19:58:42 · 607 阅读 · 0 评论 -
【18】Vision Transformer:笔记总结与pytorch实现
下面借这篇blog记录一些阅读笔记,如果问题,恳请指出。前言paper原文:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE一开始,Transformer在Attention is all you need这篇paper中提出,解决的自然语言中的序列问题,也就是将自然语言的word变成一个sequence问题,但是有效的解决了RNN的无法并行处理的问题,并且其可以考虑全局的咨询,而self-atte.原创 2021-07-29 12:48:48 · 2669 阅读 · 1 评论 -
【17】查看中间层卷积核的权重及偏置等参数
首先先放代码:analyze_feature_map.pyimport torchfrom backbone import MobileNetV3_largeimport matplotlib.pyplot as pltimport numpy as np# create modelmodel = MobileNetV3_large()# load model weightsmodel_weight_path = 'MobileNetV3_Large.mdl'model.load_原创 2021-06-11 14:28:53 · 3156 阅读 · 8 评论 -
【16】查看中间层特征矩阵并保存图像与参数
网络模型backbone我使用了之前搭建过的MobileNetV3,具体的搭建过程可以查看:【20】MobileNetV3然后由于此次任务需要的是输出其中的中间特征矩阵,所以前向传播的部分代码需要修改一下:参考代码如下:backbone.pyimport torchimport torch.nn as nnimport torchvisionnum_class = 5# 定义h-swith激活函数class HardSwish(nn.Module): def __init__(原创 2021-06-11 13:25:25 · 520 阅读 · 2 评论 -
【15】宝可梦数据集基于迁移学习训练
文章目录1.迁移学习的概念2.迁移学习的实现1)自定义模型结构参考代码2)迁移学习模型结构参考代码1.迁移学习的概念迁移学习的概念就是其实我们不必去重新的训练一个网络,而是我们可以基于其他的网络,借用这个网络的权重,然后稍微的去修改少层数的权重,从而达到一个比较好的效果。常见的迁移学习方式:载入权重后训练所有参数载入权重后只训练最后几层参数载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层在pytorch中,含有很多网络结构的预处理模型,这些就是迁移学习的基础。对于【原创 2021-05-15 13:24:35 · 804 阅读 · 0 评论 -
【14】自定义宝可梦数据集
一般的深度学习训练模型的搭建框架过程为,导入数据-建立模型-训练与测试/迁移学习,在这篇笔记中,我主要记录了自定义一个自己的数据集过程与迁移学习的方法。对于其中涉及的到的训练过程与测试过程在其他的笔记中已有提到。对于之前用到的MNIST数据集与Cifar10数据集的导入,其实我们都只是利用了pytorch提供的函数,分别是torchvision.datasets.MNIST与torchvision.datasets.CIFAR10两个函数帮助我们实现了样本数据的导入。但是,当我们需要训练我们自己的数据集时原创 2021-05-09 12:39:03 · 729 阅读 · 1 评论 -
【13】变分自编码器(VAE)的原理介绍与pytorch实现
文章目录1.VAE的设计思路2.VAE的模型架构3.VAE的作用原理4.VAE的Pytorch实现1)参考代码2)训练结果展示3)生成结果展示5.实现VAE中出现的问题1.VAE的设计思路VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。那VAE(变分自编码器)就是在自编码器模型上做进一步变分处理,使得编码器的输出结果能对应到目标分布原创 2021-05-07 19:39:52 · 6017 阅读 · 6 评论 -
【12】自编码器(Auto-Encoder)的介绍与pytorch实现
文章目录1.自编码器的介绍1)传统自编码器2)降噪自编码器3)卷积自编码器2.自编码器的应用1)文字检索(Text Retrieval)2)相识图像检索(Similar Image Search)3)模型的预训练(Pre-training)3.自编码器的实现参考代码结果展示1.自编码器的介绍自编码器的思想很简单,就是将一张图像通过Encoder变成一个code,然后再通过Decoder将这个生成出来的code重构成一张图像,然后希望重构出来的图像与原图像越接近好。1)传统自编码器通过神经网络来实现原创 2021-05-01 12:37:47 · 5639 阅读 · 5 评论 -
【11】MINST数据集的分类与效果验证
文章目录1.手写数字显示2.手写数字分类1)分类模型训练2)分类模型测试3.手写数字生成(基于GAN)1)生成模型训练2)生成模型结果展示3)网络训练中出现的问题1.手写数字显示导入数据包import torchimport torchvisionfrom torch.utils.data import DataLoaderfrom torchvision import datasets, transformsimport torch.nn as nnimport matplotlib.原创 2021-04-28 18:16:12 · 2330 阅读 · 0 评论 -
【10】Cifar10数据集的分类及效果验证
# 导入所需要的模块import torchimport torchvisionimport torch.nn.functional as Fimport torch.nn as nnfrom torchvision import datasetsfrom torchvision import transformsfrom torch import optimfrom torch.utils.data import DataLoaderimport matplotlib.pyplot as原创 2021-04-26 21:38:18 · 1497 阅读 · 0 评论 -
【9】一些经典CNN结构的pytorch实现
以下实现各种经典的神经网络结构,以处理Cifar10数据集来设置网络中的参数,有关卷积吃操作以及卷积神经网络的具体介绍可以参考这篇:【6】卷积神经网络的介绍:对于卷积之后的输出size的计算公式:outsize = (insize - filtersize + 2*padding)/stride + 1文章目录1.LeNet-52.AlexNet3.VGG4.GoogLeNet5.ResNet导入主要的包import mathimport torchimport torchvisioni原创 2021-04-25 18:12:00 · 853 阅读 · 13 评论 -
【8】pytorch中的损失函数
import torchimport torch.nn as nnimport numpy as npimport mathimport torch.nn.functional as F1.L1Lossclass torch.nn.L1Loss(size_average=None, reduce=None)官方文档中仍有reduction='elementwise_mean’参数,但代码实现中已经删除该参数功能: 计算output和target之差的绝对值,可选返回同维度的tensor或者原创 2021-04-22 23:31:24 · 621 阅读 · 0 评论 -
【7】nn.module使用与数据增强
1.经典神经网络的介绍LeNet-5这个卷积神经网络是80年代的产物。其有两个卷积层与一个池化层,最后再连接两个全连接层所组成。大概有5-6层组成。AlexNet由于当时的显卡性能不算出色,不能在一块上面完成任务,所以必须分为两个部分去训练,来讲显存分配开来。输入图像为3通道224*224。模型特点:1)由5个卷积层与3个全连接层组成2)使用了Max pooling的操作3)使用ReLU激活函数4)使用Dropout来防止过拟合5)具备一些很好的训练技巧,包括数据增广,学习率策略,W原创 2021-04-02 14:38:19 · 713 阅读 · 0 评论 -
【6】卷积神经网络的介绍
文章目录1.关于图像的基础知识灰度图彩色图2.卷积操作与过滤器3.卷积神经网络的具体操作卷积过程代码实现4.池化层(Pooling Sampling)下采样上采样5.批处理规范(Batch Norm)Image NormalizationBatch Normalization1.关于图像的基础知识灰度图这里以MINST数据集为例,对于一个手写数字的图像,其由像素为28*28的灰度图构成,如图所示:根据每一个像素点的一个具体的数值,可以将其构造出一副如上述所示的灰度图,由于灰度图的通道只有1,也就原创 2021-04-02 02:06:45 · 471 阅读 · 0 评论 -
【5】过拟合处理的一些技巧
1.过拟合与欠拟合Underfitting欠拟合的特点:模型的复杂度 < 数据分布的复杂度1)训练集的准确率不好,loss会比较高2)测试集的准确率也不好,loss也会比较高Overfitting过拟合的特点:模型的复杂度 > 数据分布的复杂度1)训练集的准确度比较高,但是测试集的准确度比较低2)过分的准确降低loss,导致效果不好由于现在的网络层数都比较大,所以出现过拟合的情况比较多,欠拟合的情况相对会少一点2.交叉验证train-val-test交叉验证结构原创 2021-03-31 16:14:32 · 492 阅读 · 0 评论 -
【4】全连接层的认识与实现
1.手动设置全连接层# 导入所需要的模块import torchimport torch.nn.functional as Fimport torch.nn as nnimport torch.optim as optimimport torchvision# 自行定义数据集w1, b1 = torch.randn(200, 784, requires_grad=True),torch.zeros(200, requires_grad=True)w2, b2 = torch.randn(原创 2021-03-30 19:08:31 · 1033 阅读 · 1 评论 -
【3】感知机结构与反向传播推导
1.一层感知机结构输出这个结构的含义是,n个x的输入,经过n个w的权值,进行一个线性的叠加求和∑XW得到一个输出结果x1_0,由于是一层的感知机,所以这一层的输出结果只有一个x1_0(1表示的第一层,0表示这一层的第0个);然后经过一个激活函数输出为O1_0,然后与一个随机生成的值t,求这个t与输出O1_0的损失值,然后先后传播更新权值w图中的E相当于一个loss,其中X1_0表达第一层的第一个的直接输出,既x*w的线性叠加也就是∑XW;而紧随其后的O1_0表示第一层的第一经过激活函数的输出;而对于单原创 2021-03-29 21:11:28 · 472 阅读 · 0 评论 -
【2】激活函数与Loss函数求导
影响找到全局极小值点的几个主要的影响因素:1)初始点的设置2)学习率的设置,可能会影响收敛的精度与速度ps : 处于一个全局极小值或者是鞍点的状态时,往往会影响实验效果import torchimport torch.nn.functional as Fimport matplotlib.pyplot as plt# Jupyter notebook 中的魔法命令%matplotlib inline # 在下面的代码模块里面都可以不用写原创 2021-03-28 16:09:18 · 1756 阅读 · 2 评论 -
【1】Pytorch基本知识
import torch基本的数据类型如图所示1.创建Tensor的基本操作# Import from numpytorch.from_numpy# uninitializedtorch.emptytorch.Tensortorch.IntTensortorch.FloatTensor# 生成矩阵torch.rand(3,3) # 0 - 1均匀分布torch.randn(3,3) # -1 - 1正太分布torch.rand_like(a)torch.ran原创 2021-03-27 20:49:50 · 398 阅读 · 0 评论