深度学习面试题目01
- 01 什么是神经网络?
- 02 请解释前馈神经网络(Feedforward Neural Network)的工作原理。
- 03 什么是激活函数,为什么它在神经网络中重要?
- 04 请解释反向传播算法(Backpropagation)
- 05 什么是过拟合(Overfitting)?
- 06 什么是卷积神经网络(CNN)?它在图像处理中的应用是什么?
- 07 什么是循环神经网络(RNN)?它在自然语言处理中的应用是什么?
- 08 什么是梯度消失问题?
- 09 什么是迁移学习(Transfer Learning)?
- 10 请解释生成对抗网络(GAN)的原理和应用。
01 什么是神经网络?
神经网络是一种受到人脑神经系统启发的计算模型,用于机器学习和人工智能任务。它由多个神经元(也称为节点或神经元)组成,这些神经元通过连接权重相互链接,形成层次结构。神经网络通常包括输入层、隐藏层和输出层。
神经网络的工作方式类似于生物神经系统中的神经元。每个神经元接收来自前一层神经元的输入,将这些输入与相应的权重相乘,然后通过激活函数将结果传递到下一层。这个过程重复进行,直到达到输出层,产生最终的输出。
通过训练神经网络,可以调整连接权重,使其能够学习从输入到输出之间的复杂映射关系。这意味着神经网络可以用于各种任务,包括分类、回归、图像识别、自然语言处理和强化学习等。
02 请解释前馈神经网络(Feedforward Neural Network)的工作原理。
前馈神经网络是最基本的神经网络类型。它由输入层、隐藏层和输出层组成,信息从输入层流向输出层,不涉及循环。每个神经元接收来自前一层神经元的输入,应用权重并通过激活函数传递到下一层。
03 什么是激活函数,为什么它在神经网络中重要?
激活函数(Activation Function)是神经网络中的一个关键组成部分,它位于神经元中,用于控制神经元的输出是否被激活,以及激活的程度。激活函数在神经网络中非常重要,因为它引入了非线性性质,使神经网络能够学习和表示复杂的非线性关系。
激活函数的作用:
-
非线性转换:激活函数将输入的加权和映射到非线性的输出。这是激活函数的主要作用之一,因为大多数实际问题都涉及到复杂的非线性关系,而线性函数无法捕捉这些关系。
-
决定神经元是否激活:激活函数决定神经元是否应该被激活并传递其输出。只有当输入的总和(通过权重相加)超过了某个阈值时,神经元才会激活。
常见的激活函数:
-
Sigmoid函数:将输入映射到0到1之间的值,通常用于输出层或在二元分类问题中。
-
Tanh函数:将输入映射到-1到1之间的值,类似于Sigmoid函数但对称,通常用于隐藏层。
-
ReLU函数(Rectified Linear
Unit):将负数映射为0,对正数保持不变,是最常用的激活函数之一。它具有加速收敛和减少梯度消失问题的优点。 -
Leaky ReLU函数:类似于ReLU,但允许小于零的值具有小的斜率,以解决ReLU在某些情况下的问题。
-
softmax函数:常用于多类分类问题的输出层,将输入映射为表示类别概率的向量。
04 请解释反向传播算法(Backpropagation)
反向传播算法(Backpropagation)是用于训练神经网络的一种有效优化算法。它通过计算网络预测与实际目标之间的误差梯度,并将这些梯度反向传播到网络的每一层,从而调整网络中的权重和偏差,以最小化误差。以下是反向传播算法的详细解释:
前向传播:
首先,通过前向传播,输入数据从输入层经过网络传递到输出层,得到模型的预测值。
对于每个样本,网络计算预测值并与实际目标值进行比较,以确定模型的误差。通常使用损失函数(如均方误差、交叉熵等)来度量预测值与目标值之间的差异。
计算梯度:
接下来,反向传播算法计算每个参数(权重和偏差)对于损失函数的梯度,即它们对误差的贡献程度。
这是通过使用链式法则和梯度下降来完成的。首先,计算输出层的梯度,然后向后传播到隐藏层和输入层,逐层计算梯度。
权重和偏差更新:
一旦梯度计算完成,就可以使用梯度下降或其他优化算法来更新网络中的权重和偏差。
权重的更新公式通常如下:新权重 = 旧权重 - 学习率 × 权重的梯度。
通过反复迭代此过程,网络的权重逐渐调整,损失函数逐渐减小,从而使模型的预测逼近实际目标。
重复训练:
上述过程在整个训练数据集上重复多次,称为一个训练周期(epoch)。通常需要多个周期来使网络学习到适当的权重和偏差,以最小化误差。
停止条件:
训练可以设置停止条件,如达到最大训练周期数、误差降至某个阈值或验证集上的性能不再提高。
反向传播算法的关键思想是使用误差梯度信息来指导网络参数的调整,从而不断提高模型的性能。它是训练神经网络的核心方法之一,使得神经网络能够适应各种任务,包括分类、回归、图像识别等。虽然它有一些问题,如梯度消失和梯度爆炸,但在实践中通过使用适当的激活函数和权重初始化方法,以及改进的变种算法,这些问题通常可以得到解决。
05 什么是过拟合(Overfitting)?
过拟合(Overfitting)是指机器学习或统计模型在训练数据上表现出色,但在未见过的测试数据上表现不佳的现象。简而言之,过拟合发生时,模型在训练数据上过于复杂,以至于开始捕获数据中的随机噪声和细微特征,而不是真正的数据模式。这导致了模型在新数据上的泛化性能下降。
以下是过拟合的一些特征和原因:
特征:
训练误差(模型在训练数据上的误差)较低。
测试误差(模型在测试数据上的误差)较高,远高于训练误差。
模型在测试数据上的性能波动较大。
原因:
模型复杂度过高:过拟合通常发生在模型具有过多参数或太复杂的情况下。模型过于灵活,可以拟合噪声,但不够泛化到新数据。
数据量不足:当训练数据量太少时,模型可能会记住训练数据中的每个样本,而不是学习到一般的数据模式。
噪声数据:噪声或异常值在训练数据中存在时,模型可能会尝试拟合这些噪声,而不是真正的数据模式。
避免过拟合的方法包括:
增加训练数据:更多的数据可以帮助模型更好地学习真实数据模式,并减少过拟合的可能性。
降低模型复杂度:减少模型中的参数数量,可以通过减小神经网络中的隐藏层节点数或使用正则化技术来实现。
交叉验证:使用交叉验证技术来评估模型在不同数据子集上的性能,以更好地了解模型的泛化性能。
早停(Early Stopping):在训练过程中监视模型在验证数据上的性能,并在性能开始下降时停止训练,以避免过拟合。
正则化:添加正则化项到损失函数中,如L1正则化(Lasso)或L2正则化(Ridge),以惩罚模型的复杂性。
特征选择:选择最相关的特征,去除不相关或冗余的特征,可以减少模型的复杂性。
06 什么是卷积神经网络(CNN)?它在图像处理中的应用是什么?
卷积神经网络是一种专门用于处理图像和空间数据的神经网络类型。它使用卷积层来捕捉图像中的局部特征,并通过池化层减少数据尺寸。CNN在图像分类、物体检测和语义分割等领域广泛应用。
卷积神经网络(CNN)的基本原理:
卷积层:CNN中的核心组件是卷积层。卷积操作是一种局部感知操作,它通过在输入图像上滑动卷积核(也称为滤波器)来提取图像的局部特征。卷积操作允许网络自动学习提取边缘、纹理和其他低级特征。
池化层:池化层用于降低特征图的空间维度,减少计算量和参数数量。最常见的池化操作是最大池化,它选择每个区域中的最大值作为池化结果。池化有助于保留特征的位置不变性,使网络对于位置微小变化更具鲁棒性。
全连接层:在卷积和池化层之后,CNN通常包括一个或多个全连接层,用于将高级特征表示映射到输出类别的概率分布。全连接层是传统的前馈神经网络结构,它接受来自前一层的输出并进行分类或回归。
激活函数:在卷积层和全连接层之间,通常使用激活函数(如ReLU)来引入非线性,以增加网络的表达能力。
07 什么是循环神经网络(RNN)?它在自然语言处理中的应用是什么?
循环神经网络(Recurrent Neural Network,RNN)是一种神经网络架构,专门用于处理序列数据,其中数据的顺序或时间信息至关重要。RNN的设计灵感来自于它具有循环连接,允许信息从一个时间步传递到下一个时间步,从而能够在序列数据中捕捉到时间依赖关系。
循环神经网络(RNN)的基本原理:
循环连接:RNN的核心特征是循环连接,允许信息从当前时间步传递到下一个时间步。每个时间步都有一个输入,一个隐藏状态和一个输出。隐藏状态在每个时间步都会更新,并保留先前时间步的信息。
隐藏状态:RNN中的隐藏状态是网络的记忆单元,它包含了过去时间步的信息。隐藏状态在每个时间步都会根据当前输入和先前时间步的隐藏状态进行更新。这使得RNN能够捕捉到序列数据中的时间依赖关系。
序列数据处理:RNN可用于处理各种类型的序列数据,包括文本、时间序列、音频信号等。它可以根据任务的不同,将序列数据映射到分类、回归、序列生成等不同类型的输出。
RNN在自然语言处理中的应用:
语言建模:RNN可用于语言建模任务,例如文本生成、文本生成和自动文本纠错。通过训练RNN模型来预测下一个单词或字符,可以生成连贯的文本。
情感分析:RNN可以用于分析文本情感。通过将文本序列映射到情感标签,可以用于情感分析任务,如电影评论情感分析。
机器翻译:RNN在机器翻译中发挥重要作用。通过将源语言句子映射到目标语言句子,可以实现自动翻译。
文本分类:RNN可用于文本分类任务,如垃圾邮件检测、新闻分类等。它可以接受可变长度的文本输入,并输出相应的类别标签。
命名实体识别:RNN可以用于识别文本中的命名实体,如人名、地名、组织名等。这在信息抽取和知识图谱构建中很有用。
对话系统:RNN在对话系统中用于建立自动回复系统,如智能聊天机器人。它可以根据用户的输入生成合适的回复。
等等
08 什么是梯度消失问题?
梯度消失问题(Gradient Vanishing Problem)是指在深度神经网络中,反向传播算法中的梯度逐渐变小,接近于零,从而导致底层神经网络的权重几乎不再更新,难以学习到有效的特征表示和模型参数。这一问题通常出现在很深的神经网络中,尤其是在使用某些激活函数时,如Sigmoid函数和Tanh函数。
梯度消失问题的根本原因是链式法则的多次连乘效应。在深度神经网络中,反向传播算法将网络的误差梯度从输出层传播回输入层,每层的权重都会根据上一层传递的梯度进行更新。如果梯度小于1(如Sigmoid和Tanh激活函数的导数在0到1之间),那么在多次连乘的过程中,梯度会迅速衰减,最终变得非常接近零。因此,底层神经元的权重几乎不再更新,导致底层无法学习到有意义的特征表示。
梯度消失问题会导致深度神经网络的训练变得非常困难,甚至无法收敛到一个好的模型。为了解决梯度消失问题,以下是一些常用方法:
使用激活函数:使用能够避免梯度消失问题的激活函数,如ReLU(Rectified Linear Unit)和Leaky ReLU。
权重初始化:使用合适的权重初始化方法,如Xavier初始化(也称为Glorot初始化)或He初始化,可以有助于缓解梯度消失问题。
批归一化:批归一化(Batch Normalization)是一种正则化技术,它有助于缓解梯度消失问题,并加速模型的收敛。
使用门控循环单元(GRU)和长短时记忆网络(LSTM):这些循环神经网络的变种设计有特定的机制,可以帮助网络更好地处理长序列和梯度消失问题。
减少网络深度:在某些情况下,减少神经网络的深度可以降低梯度消失问题的影响,尤其是当数据量有限时。
09 什么是迁移学习(Transfer Learning)?
迁移学习(Transfer Learning)是一种机器学习方法,其中模型在一个任务上训练好后,可以将部分或全部学到的知识迁移到解决另一个相关任务上。迁移学习的核心思想是利用已学习的特征、知识或模型来帮助解决新任务,从而加速学习过程,提高性能。
迁移学习的主要优点包括:
数据效率:在新任务的数据量有限或昂贵的情况下,迁移学习可以帮助模型更好地泛化,减少对大量新数据的需求。
时间效率:迁移学习可以加速模型的训练,因为模型已经学到了一些通用的特征和知识。
性能改善:通过迁移学习,可以借用已学习任务的知识,提高模型在新任务上的性能,尤其是在目标任务和源任务之间有一定相关性的情况下。
迁移学习可以分为以下几种常见的方式:
特征提取:在特征提取的迁移学习中,模型通常通过在源任务上训练来学习一组通用的特征表示。然后,这些特征表示可以被冻结,转移到新任务的模型中,只需训练新任务的输出层。这个方法通常用于卷积神经网络等深度学习模型中。
微调(Fine-tuning):在微调的迁移学习中,不仅可以迁移特征表示,还可以微调一部分或全部模型的权重。通常,模型的底层层次或一部分中间层会被冻结,而顶层或输出层会进行微调以适应新任务。
多任务学习:多任务学习是一种迁移学习方法,其中模型同时学习解决多个相关任务。这种方法允许模型共享知识和特征,从而提高性能。
知识蒸馏(Knowledge Distillation):在知识蒸馏中,一个复杂的模型(教师模型)的知识被传递给一个简化的模型(学生模型)。这通常用于减小模型的复杂性,提高性能或在计算资源有限的情况下进行模型部署。
10 请解释生成对抗网络(GAN)的原理和应用。
生成对抗网络(Generative Adversarial Network,GAN)是一种深度学习模型,由两个神经网络组成:生成器(Generator)和判别器(Discriminator)。GAN的原理基于博弈论的思想,其中生成器和判别器之间进行博弈,以不断改进生成器的能力。
GAN的原理:
生成器(Generator):生成器的任务是生成与真实数据相似的合成数据。它接收一个随机噪声向量作为输入,并尝试将其映射成一个数据样本,例如图像。生成器通过多次迭代来生成逼真的合成数据。
判别器(Discriminator):判别器的任务是区分真实数据和生成器生成的合成数据。它接收两种类型的数据样本(真实数据和生成器生成的数据)作为输入,并尝试将它们区分开。判别器被训练成一个二元分类器,用于判断输入数据是真实的还是生成的。
对抗训练:GAN的核心思想是生成器和判别器之间的对抗。生成器的目标是生成足够逼真的数据,以欺骗判别器,使其无法区分真实数据和合成数据。而判别器的目标是尽力提高自己的判别能力,以区分真实数据和生成的数据。这个博弈过程在训练中不断迭代,直到生成器生成的数据足够逼真,判别器不能轻易区分。
相关文章:
深度学习面试题目01
01 什么是神经网络?02 请解释前馈神经网络(Feedforward Neural Network)的工作原理。03 什么是激活函数,为什么它在神经网络中重要?04 请解释反向传播算法(Backpropagation)05 什么是过拟合&…...
ESP32网络开发实例-HTTP-POST请求
HTTP-POST请求 文章目录 HTTP-POST请求1、HTTP POST2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何使用 ESP32向 ThingSpeak等常用 API 发出 HTTP POST 请求。 1、HTTP POST 超文本传输协议 (HTTP) 用作服务器和客户端之间的请求-响应协议。 它使它们之间的通信顺…...
怎么把成绩发给家长
亲爱的小伙伴们,作为老师,我们经常需要将学生的成绩发送给家长。但是,手动发送成绩不仅效率低,还容易出错。这时候,我们就需要一个强大的工具——成绩查询系统。它不仅可以轻松实现学生成绩的录入、存储和查询…...
Banana Pi BPI-W3 RK3588开发板基本使用文档
RK3588编译&烧录Linux固件 1、开发环境及工具准备 Rockchip Linux 软件包:linux-5.10-gen-rkr4 主机: 安装VMware搭建虚拟机,版本为Ubuntu 20.04 (硬盘容量大于100G)安装远程连接工具MobaXterm(可连接虚拟机方…...
源码解析SpringMVC之RequestMapping注解原理
1、启动初始化 核心:得到应用上下文中存在的全部bean后依次遍历,分析每一个目标handler & 目标方法存在的注解RequestMapping,将其相关属性封装为实例RequestMappingInfo。最终将 uri & handler 之间的映射关系维护在类AbstractHand…...
biocParallel学习
我好像做了一个愚蠢的测试 rm(listls()) suppressPackageStartupMessages({library(SingleCellExperiment)library(scMerge)library(scater)library(Matrix) })setwd("/Users/yxk/Desktop/test/R_parallel/") load("./data/exprsMat.RData") load(".…...
AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):一个AWTK工程
一个AWTK工程基于C/C++编写,可以分为如下几步: 结合下图,看懂启动的部分。一般一个AWTK工程,需要实现哪些部分,就是其中开始之后白色的部分,比如调用main函数和gui_app_start时会做一些操作,比如asset_init和application_init时要做一些设置,还有退出的函数application…...
MySQL主从复制(基于binlog日志方式)
目录 一、什么是主从复制?二、主从复制原理、存在问题和解决方法2.1.主从复制原理2.2.主从复制存在的问题以及解决办法2.3.主从复制的同步模型2.4.拓展—Mysql并行复制 三、主从复制之基于binlog日志方式3.1.bin-log日志简介3.2.bin-log的使用3.2.1.开启binlog3.2.2…...
计算机网络【CN】介质访问控制
信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据,以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听,等待一个随机的时…...
CDR和AI哪个软件更好用?
设计软件市场中,CorelDRAW和Adobe Illustrator(简称AI)无疑是两大重量级选手。它们各自拥有庞大的用户群和丰富的功能,但究竟哪一个更好用?本文将从多个角度出发,对这两款软件进行全面而深入的比较…...
保姆级认识AVL树【C++】(精讲:AVL Insert)
目录 前言 一,概念 二,定义 三,insert 1. 插入情况 情况一: 情况二: 情况三: 2. 旋转方法 法一:左单旋法 法二:右单旋法 法三:先左后右双旋法 法四…...
pinia中使用reactive声明变量,子页面使用时,值未改变,即不是响应式的(解决方法)
reactive赋值无效!reactive 不要直接data赋值!!!会丢失响应式的,只能通过obj.属性 属性值赋值 方法一. pinia中直接使用ref定义变量即可 export const useUserStoredefineStore(user,()>{let loginUserreactive({…...
基于springboot零食商城管理系统
功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品,并将它们添加到购物车中。购物车可以保存用户的选购商品,允许随时查看已选择的商品和它们的数量。一旦用户满意,他们…...
C++程序练习
定义一个类CheckPath,它由两个public方法组成: 1) checkPath:检查传入的字符串指定的路径是否存在,存在返回true,否则返回false。 2) createFilePath:根据传入的字符串指定的路径&…...
Golang 继承
在面向对象的编程语言中,继承是一种重要的机制,它允许子类继承父类的属性和方法。然而,Go语言在设计时没有直接支持传统意义上的继承,而是提供了一种更为灵活和简洁的方式来实现类似的功能。本文将探讨Golang中实现继承的方法和最…...
棋盘格测距-单目相机(OpenCV/C++)
一、文章内容简述: 1’ 通过cv::findChessboardCorners寻找棋盘格角点 2‘ 用cv::solvePnP计算旋转向量rvec和平移向量tvec 3’ 通过公式计算相机到棋盘格的距离 float distance sqrt(tvec.at<double>(0,0) * tvec.at<double>(0,0) tvec.at<do…...
031-从零搭建微服务-监控中心(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...
vue中使用xlsx插件导出多sheet excel实现方法
安装xlsx,一定要注意版本: npm i xlsx0.17.0 -S package.json: {"name": "hello-world","version": "0.1.0","private": true,"scripts": {"serve": "vue-c…...
Linux - 进程的优先级 和 如何使用优先级调度进程
理解linux 当中如何做到 把一个PCB 放到多个 数据结构当中 在Linux 当中,一个进程的 PCB 不会仅仅值存在一个 数据结构当中,他既可以在 某一个队列当中,又可以在 一个 多叉树当中。 队列比如 cpu 的 运行队列,键盘的阻塞队列等等…...
支持控件drag和click
在 MouseDown 事件触发 DoDragDrop 拖拽操作时,Click 事件通常无效,因为 DoDragDrop 方法会捕获鼠标事件并等待拖拽操作完成。 有一个简单地思路解决这个问题 当MouseDow时,触发定时器,延迟100s定时器到时后,进入dra…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
