Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
coolalex776
apachecn-dl-zh
提交
96ebacc3
A
apachecn-dl-zh
项目概览
coolalex776
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
96ebacc3
编写于
9月 11, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-11 16:41:46
上级
4d5257ce
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
36 addition
and
36 deletion
+36
-36
docs/get-start-tf/ch00.md
docs/get-start-tf/ch00.md
+1
-1
docs/get-start-tf/ch03.md
docs/get-start-tf/ch03.md
+8
-8
docs/get-start-tf/ch04.md
docs/get-start-tf/ch04.md
+25
-25
docs/get-start-tf/ch05.md
docs/get-start-tf/ch05.md
+1
-1
docs/get-start-tf/ch06.md
docs/get-start-tf/ch06.md
+1
-1
未找到文件。
docs/get-start-tf/ch00.md
浏览文件 @
96ebacc3
...
...
@@ -28,7 +28,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系
第 3 章,“机器学习入门”,介绍了一些机器学习模型。 我们开始实现线性回归算法,该算法与数据之间的建模关系有关。 本章的主要重点是解决机器学习中的两个基本问题。 分类,即如何将每个新输入分配给可能的给定类别之一; 数据聚类,这是将一组对象进行分组的任务,以使同一组中的对象比其他组中的对象更相似。
第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知
器和多层感知器
。
第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知
机和多层感知机
。
第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和递归神经网络(RNN),分别用于图像识别和语音翻译问题。
...
...
docs/get-start-tf/ch03.md
浏览文件 @
96ebacc3
...
...
@@ -5,7 +5,7 @@
*
线性回归
*
MNIST 数据集
*
分类器
*
最近邻
居
算法
*
最近邻算法
*
数据聚类
*
k-均值算法
...
...
@@ -123,8 +123,8 @@ cost_function = tf.reduce_mean(tf.square(y - y_point))
为了使
`cost_function`
最小化,我们使用
*梯度下降*
的优化算法。 给定几个变量的数学函数,梯度下降允许找到该函数的局部最小值。 该技术如下:
*
**在函数域的任意第一
点评估**
,函数本身及其梯度
。 梯度表示函数趋向于最小的方向。
*
**在渐变指示的方向上选择
**
第二点
。 如果此第二点的函数的值小于在第一点计算的值,则下降可以继续。
*
**在函数域的任意第一
个点评估函数本身及其梯度**
。 梯度表示函数趋向于最小的方向。
*
**在渐变指示的方向上选择
第二个点**
。 如果此第二点的函数的值小于在第一点计算的值,则下降可以继续。
您可以参考下图来直观地了解算法:
...
...
@@ -352,7 +352,7 @@ MNIST 的数字八
3.
在训练集上训练算法,并通过验证设置任何控制参数。
4.
通过应用一组新实例(测试集)评估分类器的准确性和性能。
## 最近邻
居
算法
## 最近邻算法
**K 最近邻**
(
**KNN**
)是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样品的类别。
...
...
@@ -360,7 +360,7 @@ MNIST 的数字八
![
The nearest neighbor algorithm
](
img/B05474_03_09.jpg
)
`n`
是空间的尺寸。 这种分类方法的优点是能够对类别
*无法线性分离*
的对象进行分类。 考虑到训练数据
*的*
小扰动
*不会显着影响*
的
结果,因此这是一个稳定的分类器。 但是,最明显的缺点是它不能提供真正的数学模型。 相反,对于每个新分类,应通过将新数据添加到所有初始实例并针对所选 K 值重复计算过程来执行。
`n`
是空间的尺寸。 这种分类方法的优点是能够对类别
*无法线性分离*
的对象进行分类。 考虑到训练数据
的
*小扰动*
不会显着影响
结果,因此这是一个稳定的分类器。 但是,最明显的缺点是它不能提供真正的数学模型。 相反,对于每个新分类,应通过将新数据添加到所有初始实例并针对所选 K 值重复计算过程来执行。
此外,它需要相当大量的数据才能进行实际的预测,并且对分析数据的噪声敏感。
...
...
@@ -434,7 +434,7 @@ tf.reduce_sum(x, [0, 1]) ==> 6
```
最后,为了最小化距离函数,我们使用
`arg_min`
,它返回距离最小(最近邻
居
)的索引:
最后,为了最小化距离函数,我们使用
`arg_min`
,它返回距离最小(最近邻)的索引:
```
py
pred
=
tf
.
arg_min
(
distance
,
0
)
...
...
@@ -584,7 +584,7 @@ k-means 是最常见和最简单的*聚类算法*之一,它可以根据对象
4.
重新计算每个群集的质心。
5.
直到质心不变。
k 均值的流行来自其
*收敛速度*
和其
*易于实现
。*
就解决方案的质量而言,该算法不能保证实现全局最优。 最终解决方案
*的质量在很大程度上取决于*
集群的
*初始集*
,并且在实践中可能会获得更差的全局最优解。 由于该算法非常快,因此您可以多次应用它,并提供解决方案,您可以从中选择最满意的一种。 该算法的另一个缺点是,它要求您选择要查找的簇数(k
)。
k 均值的流行来自其
*收敛速度*
和其
*易于实现
*
。 就解决方案的质量而言,该算法不能保证实现全局最优。 最终解决方案的质量在很大程度上取决于集群的
*初始集*
,并且在实践中可能会获得更差的全局最优解。 由于该算法非常快,因此您可以多次应用它,并提供解决方案,您可以从中选择最满意的一种。 该算法的另一个缺点是,它要求您选择要查找的簇数(
`k`
)。
如果数据不是自然分区的,您将最终得到奇怪的结果。 此外,该算法仅在数据中存在可识别的球形簇时才有效。
...
...
@@ -900,7 +900,7 @@ plt.show()
# 摘要
在本章中,我们开始探索 TensorFlow 在机器学习中一些典型问题的潜力。 使用
*线性回归*
算法,解释了
*成本函数*
和使用
*梯度下降*
进行优化的重要概念。 然后,我们描述了手写数字的数据集 MNIST。 我们还使用
*最近邻
居
*
算法实现了多类分类器,该分类器属于机器学习
*监督学习*
类别。 然后,本章以实现数据聚类问题的 k-means 算法为例,以
*无监督学习*
为例。
在本章中,我们开始探索 TensorFlow 在机器学习中一些典型问题的潜力。 使用
*线性回归*
算法,解释了
*成本函数*
和使用
*梯度下降*
进行优化的重要概念。 然后,我们描述了手写数字的数据集 MNIST。 我们还使用
*最近邻*
算法实现了多类分类器,该分类器属于机器学习
*监督学习*
类别。 然后,本章以实现数据聚类问题的 k-means 算法为例,以
*无监督学习*
为例。
在下一章中,我们将介绍神经网络。 这些是代表定义为
*人工神经元*
的元素之间相互联系的数学模型,即模仿活神经元特性的数学构造。
...
...
docs/get-start-tf/ch04.md
浏览文件 @
96ebacc3
...
...
@@ -3,11 +3,11 @@
在本章中,我们将介绍以下主题:
*
什么是神经网络?
*
单层感知
器
*
单层感知
机
*
逻辑回归
*
多层感知
器
*
多层感知
器
分类
*
多层感知
器
功能逼近
*
多层感知
机
*
多层感知
机
分类
*
多层感知
机
功能逼近
# 什么是人工神经网络?
...
...
@@ -21,17 +21,17 @@ ANN 原理图
## 神经网络架构
连接节点的
*方式,*
总层数
*,即输入和输出之间的节点级别以及每层神经元的数量-所有这些都定义了 *
神经网络的架构
*。 例如,在**多层网络**中(我们将在本章的第二部分中介绍这些网络),可以识别层的人工神经元,使得:*
连接节点的
方式,
*总层数*
,即输入和输出之间的节点级别,以及每层神经元的数量-所有这些都定义了
*神经网络的架构*
。 例如,在
**多层网络**
中(我们将在本章的第二部分中介绍这些网络),可以识别层的人工神经元,使得:
*
每个神经元都与下一层的所有神经元相连
*
属于同一层的神经元之间没有连接
*
层数和每层神经元的数量取决于要解决的问题
现在,我们开始探索神经网络模型,介绍最简单的神经网络模型:单层感知
器或所谓的罗森布拉特感知器
。
现在,我们开始探索神经网络模型,介绍最简单的神经网络模型:单层感知
机或所谓的罗森布拉特感知机
。
# 单层感知
器
# 单层感知
机
单层感知
器
是第一个神经网络模型,由 Frank Rosenblatt 于 1958 年提出。 在此模型中,神经元局部记忆的内容由权重向量
`W = (w1, w2,......, wn)`
组成。 该计算是在计算输入向量
`X =(x1, x2,......, xn)`
的总和之后执行的,每个输入向量均与权重向量的相应元素相乘; 那么输出中提供的值(即加权总和)将是激活函数的输入。 如果结果大于某个阈值,则此函数返回
`1`
,否则返回
`-1`
。 在下图中,激活功能是所谓的
`sign`
功能:
单层感知
机
是第一个神经网络模型,由 Frank Rosenblatt 于 1958 年提出。 在此模型中,神经元局部记忆的内容由权重向量
`W = (w1, w2,......, wn)`
组成。 该计算是在计算输入向量
`X =(x1, x2,......, xn)`
的总和之后执行的,每个输入向量均与权重向量的相应元素相乘; 那么输出中提供的值(即加权总和)将是激活函数的输入。 如果结果大于某个阈值,则此函数返回
`1`
,否则返回
`-1`
。 在下图中,激活功能是所谓的
`sign`
功能:
```
py
+
1
x
>
0
...
...
@@ -40,23 +40,23 @@ sign(x)=
```
可以使用其他激活函数,最好是非线性激活函数(例如
`sigmoid`
函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为时期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知
器
已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。
可以使用其他激活函数,最好是非线性激活函数(例如
`sigmoid`
函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为时期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知
机
已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。
![
Single Layer Perceptron
](
img/B05474_04_02.jpg
)
Rosemblatt 的感知
器
架构
Rosemblatt 的感知
机
架构
现在让我们看看如何使用 TensorFlow 对图像分类问题实现单层神经网络。
# 逻辑回归
该算法与我们在
[
第 3 章
](
../Text/ch03.html
"Chapter 3\. Starting with Machine Learning"
)
和
*从机器学习*
开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 S 形。 正是由于这个功能,我们将此算法称为逻辑回归。 乙状结肠功能具有以下模式:
该算法与我们在
第 3 章“机器学习入门”
开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 S 形。 正是由于这个功能,我们将此算法称为逻辑回归。 乙状结肠功能具有以下模式:
![
The logistic regression
](
img/B05474_04_03.jpg
)
乙状结肠功能
如我们所见,因变量的取值严格在
`0`
和
`1`
之间,这正是为我们服务的内容。 对于
*逻辑回归*
,我们希望我们的函数告诉我们属于我们班级某个特定元素的
*概率*
是多少。 我们再次记得,通过神经网络对
*监督
的*
学习被配置为权重优化的
*迭代过程; 然后根据训练集的网络性能对它们进行修改。 实际上,其目标是使*
损失函数
*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*
测试集
*上验证网络的性能,该测试集由除受过训练的图像以外的其他图像组成。*
如我们所见,因变量的取值严格在
`0`
和
`1`
之间,这正是为我们服务的内容。 对于
*逻辑回归*
,我们希望我们的函数告诉我们属于我们班级某个特定元素的
*概率*
是多少。 我们再次记得,通过神经网络对
*监督
*
学习被配置为权重优化的
*迭代过程*
; 然后根据训练集的网络性能对它们进行修改。 实际上,其目标是使
*损失函数*
最小化,该函数表明网络行为偏离所需行为的程度。 然后,在
*测试集*
上验证网络的性能,该测试集由除受过训练的图像以外的其他图像组成。
我们将要实施的培训的基本步骤如下:
...
...
@@ -64,7 +64,7 @@ Rosemblatt 的感知器架构
*
对于训练集的每个元素,都会计算
*误差*
,即期望输出与实际输出之间的差。 此错误用于调整权重。
*
重复该过程,以随机顺序将训练集的所有示例重新提交给网络,直到整个训练集上的错误不小于某个阈值,或者直到达到最大迭代次数为止。
现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如
[
第 3 章
](
../Text/ch03.html
"Chapter 3\. Starting with Machine Learning"
)
,
*从机器学习开始的说明*
是
手写数字的数据库。
现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如
第 3 章,“机器学习入门”中的
手写数字的数据库。
## TensorFlow 实施
...
...
@@ -79,7 +79,7 @@ Rosemblatt 的感知器架构
```
2.
我们使用
[
第 3 章
](
../Text/ch03.html
"Chapter 3\. Starting with Machine Learning"
)
和
*从机器学习*
开始
引入的
*MNIST 数据集*
部分中的
`input_data.read`
函数,将图像上传到我们的问题中:
2.
我们使用
第 3 章“机器学习入门”
引入的
*MNIST 数据集*
部分中的
`input_data.read`
函数,将图像上传到我们的问题中:
```py
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
...
...
@@ -429,9 +429,9 @@ with tf.Session() as sess:
```
# 多层感知
器
# 多层感知
机
更复杂和有效的体系结构是
**多层感知
器**
(
**MLP**
)。 它基本上由多层感知器组成,因此至少存在
*个隐藏的*
*层*
,即
**未连接到输入或连接到**
网络的输出
:
更复杂和有效的体系结构是
**多层感知
机**
(
**MLP**
)。 它基本上由多层感知机组成,因此至少存在
*隐藏的层*
,即
**未连接到网络的输入或输出**
:
![
Multi Layer Perceptron
](
img/B05474_04_05.jpg
)
...
...
@@ -447,7 +447,7 @@ MLP 架构
在以下示例中,我们显示了针对图像分类问题(MNIST)的 MLP 实现。
## 多层感知
器
分类
## 多层感知
机
分类
导入必要的库:
...
...
@@ -521,8 +521,8 @@ n_classes = 10
每个选择都必须基于类似应用程序的经验,例如:
*
当增加隐藏层的数量时,我们还应该在学习阶段增加必要的训练集的大小,并增加要更新的连接数。 这导致训练时间
中
*增加*
。
*
另外,如果隐藏层中的神经元太多,不仅有更多的权重需要更新,而且网络还倾向于从训练示例集中学习太多,从而导致
*
的泛化性很差*
能力
。 但是,如果隐藏的神经元太少,即使使用训练集,网络
*也无法学习*
。
*
当增加隐藏层的数量时,我们还应该在学习阶段增加必要的训练集的大小,并增加要更新的连接数。 这导致训练时间
*增加*
。
*
另外,如果隐藏层中的神经元太多,不仅有更多的权重需要更新,而且网络还倾向于从训练示例集中学习太多,从而导致
*
泛化能力很差*
。 但是,如果隐藏的神经元太少,即使使用训练集,网络
*也无法学习*
。
### 建立模型
...
...
@@ -561,7 +561,7 @@ layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x,h),bias_layer_1))
```
它通过
`activation`
函数将其输出发送到下一层的神经元。 必须说,每个神经元的功能可能不同,但是在实践中,我们对所有神经元(通常为 S 型)采用一个共同的特征。 有时输出神经元具有线性激活功能。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤
*。*
它通过
`activation`
函数将其输出发送到下一层的神经元。 必须说,每个神经元的功能可能不同,但是在实践中,我们对所有神经元(通常为 S 型)采用一个共同的特征。 有时输出神经元具有线性激活功能。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤
。
第二中间层由权重张量
`[256 × 256]`
的形状表示:
...
...
@@ -755,7 +755,7 @@ TensorFlow 提供了优化器基类来计算损失的梯度并将梯度应用于
![
Launch the session
](
img/B05474_04_06.jpg
)
多层感知
器
的训练阶段
多层感知
机
的训练阶段
### 源代码
...
...
@@ -844,7 +844,7 @@ with tf.Session() as sess:
```
## 多层感知
器
功能逼近
## 多层感知
机
功能逼近
在以下示例中,我们实现了一个 MLP 网络,该网络将能够学习任意函数
`f (x)`
的趋势。 在训练阶段,网络将必须从一组已知点中学习
`x`
和
`f (x)`
,而在测试阶段,网络将仅从
`x`
值中扣除
`f (x)`
的值。
...
...
@@ -1061,10 +1061,10 @@ plt.show()
![
Launch the session
](
img/B05474_04_08.jpg
)
多层感知
器
的训练阶段
多层感知
机
的训练阶段
# 摘要
在本章中,我们介绍了
*人工神经网络*
。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是
*监督的*
:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使
*最小化 表示与*
训练集
*有关的*
预测误差
*的成本函数*
。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用
*Rosemblatt's Perceptron*
进行分类的问题中,我们已经看到神经网络作为
*logistic 回归*
算法来解决分类和回归问题。 在本章的最后,我们介绍了
*多层感知器*
架构,在实现
*图像分类器*
之前,然后是
*仿真器的实现中,我们已经看到了该架构的实际应用。 数学函数*
。
在本章中,我们介绍了
*人工神经网络*
。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是
*监督的*
:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使
成本函数
*最小化*
,它表示
*训练集*
有关的
*预测误差*
。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用
*Rosemblatt 的感知机*
进行分类的问题中,我们已经看到神经网络作为
*逻辑回归*
算法来解决分类和回归问题。 在本章的最后,在实现
*图像分类器*
之前,我们介绍了
*多层感知机*
架构,然后在
*数学函数仿真器*
的实现中,我们已经看到了该架构的实际应用
。
在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和递归神经网络。
**
\ No newline at end of file
在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和递归神经网络。
\ No newline at end of file
docs/get-start-tf/ch05.md
浏览文件 @
96ebacc3
...
...
@@ -358,7 +358,7 @@ pred = tf.add(tf.matmul(dense1, wout), bout)
#### 测试和训练模型
必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在
[
第 4 章
](
../Text/ch04.html
"Chapter 4\. Introducing Neural Networks"
)
和
*神经网络介绍*
中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用
`softmax`
函数来评估模型的质量:
必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在
第 4 章
和
*神经网络介绍*
中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用
`softmax`
函数来评估模型的质量:
```
py
cost
=
tf
.
reduce_mean
(
tf
.
nn
.
softmax_cross_entropy_with_logits
(
pred
,
y
))
...
...
docs/get-start-tf/ch06.md
浏览文件 @
96ebacc3
...
...
@@ -10,7 +10,7 @@
# GPU 编程
在
[
第 5 章
](
../Text/ch05.html
"Chapter 5\. Deep Learning"
)
,
*深度学习*
中,我们针对 NLP 应用训练了
**递归神经网络**
(
**RNN**
), 深度学习应用程序可能需要大量计算。 但是,您可以通过
**图形处理单元**
(
**GPU**
)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。
在
第 5 章
,
*深度学习*
中,我们针对 NLP 应用训练了
**递归神经网络**
(
**RNN**
), 深度学习应用程序可能需要大量计算。 但是,您可以通过
**图形处理单元**
(
**GPU**
)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。
GPU 编程模型是一种编程策略,包括将 CPU 替换为 GPU 以加速各种应用程序的执行。 该策略的应用范围非常广泛,并且每天都在增长。 目前,GPU 能够减少跨平台(从汽车到手机,从平板电脑到无人机和机器人)的应用程序执行时间。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录