Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
coolalex776
apachecn-dl-zh
提交
4b34a6c1
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,发现更多精彩内容 >>
提交
4b34a6c1
编写于
9月 12, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-12 21:50:24
上级
1d75f63e
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
47 addition
and
47 deletion
+47
-47
docs/get-start-tf/ch00.md
docs/get-start-tf/ch00.md
+1
-1
docs/get-start-tf/ch01.md
docs/get-start-tf/ch01.md
+11
-11
docs/get-start-tf/ch02.md
docs/get-start-tf/ch02.md
+10
-10
docs/get-start-tf/ch03.md
docs/get-start-tf/ch03.md
+3
-3
docs/get-start-tf/ch04.md
docs/get-start-tf/ch04.md
+7
-7
docs/get-start-tf/ch05.md
docs/get-start-tf/ch05.md
+4
-4
docs/get-start-tf/ch06.md
docs/get-start-tf/ch06.md
+11
-11
未找到文件。
docs/get-start-tf/ch00.md
浏览文件 @
4b34a6c1
...
...
@@ -32,7 +32,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系
第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和循环神经网络(RNN),分别用于图像识别和语音翻译问题。
第 6 章,“GPU 编程和使用 TensorFlow”,展示了用于
*GPU*
计算的 TensorFlow 工具,并介绍了
*TensorFlow
Serving
*
,一种针对机器学习模型的高性能开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
第 6 章,“GPU 编程和使用 TensorFlow”,展示了用于
*GPU*
计算的 TensorFlow 工具,并介绍了
*TensorFlow
服务
*
,一种针对机器学习模型的高性能开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
# 这本书需要什么
...
...
docs/get-start-tf/ch01.md
浏览文件 @
4b34a6c1
...
...
@@ -6,7 +6,7 @@
*
TensorFlow –概述
*
Python 基础
*
安装 TensorFlow
*
第一次工作会
议
*
第一次工作会
话
*
数据流图
*
TensorFlow 编程模型
*
如何使用 TensorBoard
...
...
@@ -56,7 +56,7 @@
深度学习基于
*人脑*
处理信息和学习并对外部刺激做出反应的方式。 它包含在
*几个表示级别*
的机器学习模型中,其中更深的级别将先前级别的输出作为输入,对其进行转换并始终进行抽象。 在此假设模型中,每个级别对应于大脑皮层的不同区域:当大脑接收图像时,它将通过
*边检测*
和
*形式感知*
等各个阶段对其进行处理,即从
*原语*
表示级别到
*最复杂的*
。 例如,在图像分类问题中,每个块借助于
*过滤操作*
,以各种抽象级别逐渐提取
*特征*
,输入已经处理的数据。
# TensorFlow
–
概述
# TensorFlow 概述
[
TensorFlow
](
https://www.tensorflow.org/
)
是一个软件库,由 Google 机器学习情报研究组织的 Google Brain 团队开发,目的是进行机器学习和深度神经网络研究。 然后 TensorFlow 结合了编译优化技术的计算代数,从而简化了许多数学表达式的计算,其中问题是执行计算所需的时间。
...
...
@@ -77,7 +77,7 @@ TensorFlow 可以使用 Python 和 C++ 支持,并且我们将使用 Python 2.7
Python 是一种强类型的动态语言(数据类型是必需的,但不必显式声明它们),区分大小写(
`var`
和
`VAR`
是两个不同的变量)和面向对象(Python 中的所有对象都是对象)。
##
句
法
##
语
法
在 Python 中,不需要行终止符,并且使用缩进指定块。 缩进以开始一个块并删除缩进以结束它,仅此而已。 需要缩进的指令以冒号(
`:`
)结尾。 注释以井号(
`#`
)开头,为单行。 多行字符串用于多行注释。 分配以等号(
`=`
)完成。 对于相等性测试,我们使用双等于(
`==`
)符号。 您可以通过使用
`+=`
和
`-=`
后跟加号来增加和减少值。 这适用于许多数据类型,包括字符串。 您可以在同一行上分配和使用多个变量。
...
...
@@ -106,7 +106,7 @@ Hello world.
```
##
资料
类型
##
数据
类型
Python 中最重要的结构是列表,元组和字典。 从 2.5 版开始,这些集就集成在 Python 中(对于以前的版本,它们在集库中可用)。 列表与一维数组相似,但是您可以创建包含其他列表的列表。 字典是包含键和值对(哈希表)的数组,元组是不可变的一维对象。 在 Python 中,数组可以是任何类型,因此您可以在列表/字典和元组中混合使用整数,字符串等。 任何类型的数组中第一个对象的索引始终为零。 允许使用负索引并从数组末尾开始计数,
`-1`
是最后一个元素。 变量可以引用函数。
...
...
@@ -142,7 +142,7 @@ Python 中最重要的结构是列表,元组和字典。 从 2.5 版开始,
```
##
弦乐
##
字符串
Python 字符串用单引号(
`'`
)或双引号(
`"`
)表示,并允许在另一字符串(
`"He said' hello '."It is valid`
)上的定界字符串内使用符号。 多行字符串用三引号(或单引号)(
`"""`
)括起来。 Python 支持 unicode; 只需使用语法:
`"This is a unicode string"`
。 要将值插入字符串中,请使用
`%`
运算符(模)和元组。 每个
`%`
由一个元组元素从左到右替换,并允许使用字典进行替换。
...
...
@@ -194,7 +194,7 @@ while rangelist[1] == 1:
```
##
功能
##
函数
函数用关键字
`def`
声明。 必须在必选参数之后声明所有可选参数,并且必须为其分配值。 使用参数命名的函数调用函数时,还必须传递值。 函数可以返回一个元组(元组拆包可以返回多个值)。 Lambda 函数是内联的。 参数是通过引用传递的,但是不能在函数中更改不可变的类型(元组,整数,字符串等)。 发生这种情况是因为它仅通过元素在内存中的位置传递,并且将另一个对象分配给变量会导致较早丢失对象引用。
...
...
@@ -220,7 +220,7 @@ def passing_example(my_list,my_int):
```
##
班级
##
类
Python 支持类的多重继承。 变量和私有方法是通过对流(这不是语言规则)声明的,方法是在变量和私有方法前加两个下划线(
`__`
)。 我们可以将属性(属性)分配给类的任意实例。
...
...
@@ -287,7 +287,7 @@ hello
```
##
例外情况
##
异常
Python 中的异常通过
`try-except`
块[
`exception_name`
]处理:
...
...
@@ -497,7 +497,7 @@ Hello TensorFlow!
```
# 第一
次工作会议
# 第一
个工作会话
最后,是时候从理论转向实践了。 我将使用 Python 2.7 IDE 编写所有示例。 要初步了解如何使用 TensorFlow,请打开 Python 编辑器并编写以下代码行:
...
...
@@ -751,13 +751,13 @@ TensorBoard 对常量和摘要节点使用特殊的图标。 总而言之,我
TensorBoard 中的节点符号
#
摘要
#
总结
在本章中,我们介绍了主要主题:
**机器学习**
和
**深度学习**
。 机器学习探索可以学习数据并进行数据预测的算法的研究和构建,而深度学习正是基于
*人脑处理信息和学习*
的方式,
[
对外部刺激作出反应
](
https://en.wikipedia.org/wiki/Algorithm
)
。
在这个庞大的科学研究和实际应用领域中,我们可以牢固地放置
**TensorFlow**
软件库,该库由 Google 人工智能研究小组(Google Brain Project)开发,并于 2015 年 11 月 9 日作为开源软件发布 。
在选择
**Python**
编程语言作为示例和应用程序的开发工具之后,我们了解了如何安装和编译该库,然后进行了第一个工作会
议
。 这使我们可以介绍 TensorFlow 和
**数据流图**
的执行模型。 它引导我们定义了我们的编程模型。
在选择
**Python**
编程语言作为示例和应用程序的开发工具之后,我们了解了如何安装和编译该库,然后进行了第一个工作会
话
。 这使我们可以介绍 TensorFlow 和
**数据流图**
的执行模型。 它引导我们定义了我们的编程模型。
本章以如何使用重要工具调试机器学习应用程序的示例结尾:
**TensorBoard**
。
...
...
docs/get-start-tf/ch02.md
浏览文件 @
4b34a6c1
...
...
@@ -156,7 +156,7 @@ array([[1, 2],
在这种情况下,我们提取了一个
`2×2`
子矩阵,其中包含
`tensor_2d`
的行 0 和 1,以及列 0 和 1。 TensorFlow 有自己的切片运算符。 在下一个小节中,我们将看到如何使用它。
### 张量
处理
### 张量
操作
让我们看看如何对这些数据结构进行一些更复杂的操作。 考虑以下代码:
...
...
@@ -522,7 +522,7 @@ ns = tf.Variable(tf.zeros_like(c, tf.float32))
```
## 为 Mandelbrot
的集合
建立并执行数据流图
## 为 Mandelbrot
集
建立并执行数据流图
代替引入会话,我们实例化一个
`InteractiveSession()`
:
...
...
@@ -587,7 +587,7 @@ plt.show()
当然,Mandelbrot 集并不是我们可以看到的唯一分形。 朱莉娅集合是分形,以加斯顿·莫里斯·朱莉亚(Gaston Maurice Julia)的名字在该领域的工作而得名。 它们的构建过程与用于 Mandelbrot 集的过程非常相似。
## 准备
茱莉亚
的数据
## 准备
Julia
的数据
让我们定义输出复杂平面。 它在实轴上位于
`-2`
和
`+2`
之间,在虚轴上位于
`-2j`
和
`+2j`
之间:
...
...
@@ -618,7 +618,7 @@ ns = tf.Variable(tf.zeros_like(Z, "float32"))
```
## 为 Julia
的集合
建立并执行数据流图
## 为 Julia
集
建立并执行数据流图
与前面的示例一样,我们创建了自己的交互式会话:
...
...
@@ -772,7 +772,7 @@ sess = tf.Session()
```
在我们的会
议
中,我们使用
`eval ()`
运算符评估张量均匀性:
在我们的会
话
中,我们使用
`eval ()`
运算符评估张量均匀性:
```
py
with
tf
.
Session
()
as
session
:
...
...
@@ -973,7 +973,7 @@ ut_init = np.zeros([N, N], dtype=np.float32)
它是池塘的
*时间演变*
。 在时间
`t = t<sub>end</sub>`
,它将包含池塘的最终状态。
##
建筑
模型
##
构建
模型
我们必须定义一些基本参数(使用 TensorFlow 占位符)和仿真的时间步长:
...
...
@@ -1018,9 +1018,9 @@ Ut_ = Ut + eps * (laplace(U) - damping * Ut)
让我们回想一下,组运算符将多个操作分组为一个操作。
##
图执行
##
执行图
在我们的会
议
中,我们将以
`1000`
步长看到池塘的时间演变,其中每个时间步长等于
`0.03s`
,而阻尼系数设置为
`0.04`
。
在我们的会
话
中,我们将以
`1000`
步长看到池塘的时间演变,其中每个时间步长等于
`0.03s`
,而阻尼系数设置为
`0.04`
。
让我们初始化 TensorFlow 变量:
...
...
@@ -1047,7 +1047,7 @@ for i in range(1000):
经过 400 个模拟步骤的池塘
### 使用的计算
功能
### 使用的计算
函数
现在让我们看看
`Laplace(U)`
函数和所使用的辅助函数是什么:
...
...
@@ -1078,7 +1078,7 @@ def laplace(x):
放大池塘
#
摘要
#
总结
在本章中,我们研究了 TensorFlow 的一些数学潜力。 从
*张量*
的基本定义(任何类型的计算的基本数据结构),我们看到了一些使用 TensorFlow 的数学运算符处理这些数据结构的示例。 使用
*复数*
数,我们探索了分形的世界。 然后,我们介绍了
*随机*
数的概念。 这些实际上用于机器学习中的模型开发和测试,因此本章以使用偏微分方程定义和解决数学问题的示例结尾。
...
...
docs/get-start-tf/ch03.md
浏览文件 @
4b34a6c1
...
...
@@ -19,7 +19,7 @@
此外,该算法的实现使我们能够以一种完全清晰易懂的方式介绍机器学习的两个重要概念:成本函数和
**梯度下降算法**
。
##
资料
模型
##
数据
模型
关键的第一步是建立我们的数据模型。 前面我们提到变量之间的关系是线性的,即:
`y = Ax + b`
,其中
`A`
和
`b`
是常数。 为了测试我们的算法,我们需要二维空间中的数据点。
...
...
@@ -852,7 +852,7 @@ num_steps = 1000
x_values
=
[]
y_values
=
[]
vector_values
=
[]
#CREATE RANDOM DATA
#
CREATE RANDOM DATA
for
i
in
xrange
(
num_vectors
):
if
np
.
random
.
random
()
>
0.5
:
x_values
.
append
(
np
.
random
.
normal
(
0.4
,
0.7
))
...
...
@@ -898,7 +898,7 @@ plt.show()
```
#
摘要
#
总结
在本章中,我们开始探索 TensorFlow 在机器学习中一些典型问题的潜力。 使用
*线性回归*
算法,解释了
*成本函数*
和使用
*梯度下降*
进行优化的重要概念。 然后,我们描述了手写数字的数据集 MNIST。 我们还使用
*最近邻*
算法实现了多类分类器,该分类器属于机器学习
*监督学习*
类别。 然后,本章以实现数据聚类问题的 K 均值算法为例,以
*无监督学习*
为例。
...
...
docs/get-start-tf/ch04.md
浏览文件 @
4b34a6c1
...
...
@@ -66,7 +66,7 @@ Rosemblatt 的感知机架构
现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如第 3 章,“机器学习入门”中的手写数字的数据库。
## TensorFlow 实
施
## TensorFlow 实
现
要实现 TensorFlow,我们需要执行以下步骤:
...
...
@@ -202,7 +202,7 @@ optimizer = tf.train.GradientDescentOptimizer\
只需几行代码即可构建神经网络模型!
## 启动会
议
## 启动会
话
现在是构建会话并启动我们的神经网络模型的时候了。
...
...
@@ -289,7 +289,7 @@ with tf.Session() as sess:
```
## 测试评估
## 测试
和
评估
我们之前显示了训练阶段,并且对于每个时期,我们都打印了相对成本函数:
...
...
@@ -622,7 +622,7 @@ optimizer = tf.train.AdamOptimizer\
TensorFlow 提供了优化器基类来计算损失的梯度并将梯度应用于变量。 此类定义用于添加操作以训练模型的 API。 您永远不会直接使用此类,而是实例化其子类之一。 请参阅
[
这里
](
https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#Optimizer
)
以查看优化程序的实现。
### 启动会
议
### 启动会
话
以下是启动会话的步骤:
...
...
@@ -844,7 +844,7 @@ with tf.Session() as sess:
```
## 多层感知机
功能逼近
## 多层感知机
函数近似
在以下示例中,我们实现了一个 MLP 网络,该网络将能够学习任意函数
`f (x)`
的趋势。 在训练阶段,网络将必须从一组已知点中学习
`x`
和
`f (x)`
,而在测试阶段,网络将仅从
`x`
值中扣除
`f (x)`
的值。
...
...
@@ -997,7 +997,7 @@ tf.nn.l2_loss(model - Y)
对于我们的示例,
`tf.nn.l2_loss`
函数可以是可行的成本函数。
### 启动会
议
### 启动会
话
让我们建立评估图:
...
...
@@ -1063,7 +1063,7 @@ plt.show()
多层感知机的训练阶段
#
摘要
#
总结
在本章中,我们介绍了
*人工神经网络*
。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是
*监督的*
:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使成本函数
*最小化*
,它表示
*训练集*
有关的
*预测误差*
。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用
*Rosemblatt 的感知机*
进行分类的问题中,我们已经看到神经网络作为
*逻辑回归*
算法来解决分类和回归问题。 在本章的最后,在实现
*图像分类器*
之前,我们介绍了
*多层感知机*
架构,然后在
*数学函数仿真器*
的实现中,我们已经看到了该架构的实际应用。
...
...
docs/get-start-tf/ch05.md
浏览文件 @
4b34a6c1
...
...
@@ -339,7 +339,7 @@ dense1 = tf.nn.dropout(dense1, keep_prob)
```
####
读
出层
####
输
出层
最后一层定义张量
`wout`
和
`bout`
:
...
...
@@ -380,7 +380,7 @@ accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
```
#### 启动会
议
#### 启动会
话
初始化变量:
...
...
@@ -668,7 +668,7 @@ RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句
有关其他参考,请参见
[
这里
](
https://www.tensorflow.org/versions/r0.8/tutorials/recurrent/index.html
)
。
#### 下载
资料
#### 下载
数据
您可以从
[
网页
](
http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
)
下载数据,然后提取数据文件夹。 数据集经过预处理,包含 10000 个不同的单词,包括句子结尾标记和稀有单词的特殊符号(
`<unk>`
)。 我们将
`reader.py`
中的所有参数都转换为唯一的整数标识符,以使神经网络更易于处理。
...
...
@@ -799,7 +799,7 @@ Test Perplexity: 117.171
如您所见,在每个时期之后,困惑变得更低了。
#
摘要
#
总结
在本章中,我们概述了深度学习技术,研究了使用中的两种深度学习架构,即 CNN 和 RNN。 通过 TensorFlow 库,我们开发了用于图像分类问题的卷积神经网络架构。 本章的最后一部分专门介绍 RNN,我们在其中描述了 TensorFlow 的 RNN 教程,其中建立了 LSTM 网络以预测英语句子中的下一个单词。
...
...
docs/get-start-tf/ch06.md
浏览文件 @
4b34a6c1
...
...
@@ -117,7 +117,7 @@ MatMul: /job:localhost/replica:0/task:0/gpu:0
# TensorFlow 服务
服务是 TensorFlow 软件包,已开发该软件包将机器学习模型带入生产系统。 这意味着开发人员可以使用 TensorFlow
Serving
的 API 来构建服务器以服务于已实现的模型。
服务是 TensorFlow 软件包,已开发该软件包将机器学习模型带入生产系统。 这意味着开发人员可以使用 TensorFlow
服务
的 API 来构建服务器以服务于已实现的模型。
服务的模型每次都可以根据其客户提供的数据进行推断和预测,从而可以改进模型。
...
...
@@ -129,13 +129,13 @@ MatMul: /job:localhost/replica:0/task:0/gpu:0
TensorFlow 服务管道
## 如何安装 TensorFlow
Serving
## 如何安装 TensorFlow
服务
要编译和使用 TensorFlow
Serving
,您需要设置一些先决条件。
要编译和使用 TensorFlow
服务
,您需要设置一些先决条件。
###
巴塞尔
###
Bazel
TensorFlow
Serving
需要
[
Bazel 0.2.0
](
http://www.bazel.io/
)
)或更高版本。 下载
`bazel-0.2.0-installer-linux-x86_64.sh`
。
TensorFlow
服务
需要
[
Bazel 0.2.0
](
http://www.bazel.io/
)
)或更高版本。 下载
`bazel-0.2.0-installer-linux-x86_64.sh`
。
### 注意
...
...
@@ -164,7 +164,7 @@ export PATH="$PATH:$HOME/bin"
您可以在
[
这个页面
](
https://github.com/grpc
)
上找到其他参考。
#### TensorFlow 服务依赖
关系
#### TensorFlow 服务依赖
项
要安装 TensorFlow 服务依赖项,请执行以下操作:
...
...
@@ -237,7 +237,7 @@ bazel test tensorflow_serving/
*
训练和导出模型的 Python 文件(
`mnist_export.py`
)
*
一个 C++ 文件(
`mnist_inference.cc`
),该文件加载导出的模型并运行 gRPC 服务为其提供服务
在以下各节中,我们报告使用 TensorFlow
Serving
的基本步骤。 对于其他参考,您可以查看
[
这里
](
https://tensorflow.github.io/serving/serving_basic
)
。
在以下各节中,我们报告使用 TensorFlow
服务
的基本步骤。 对于其他参考,您可以查看
[
这里
](
https://tensorflow.github.io/serving/serving_basic
)
。
### 训练和导出 TensorFlow 模型
...
...
@@ -291,7 +291,7 @@ model_exporter.export(export_path,tf.constant\
*
`tf.constant(FLAGS.export_version)`
是一个张量,指定模型的版本。 导出同一模型的较新版本时,应指定一个较大的整数值。 每个版本将导出到给定路径下的不同子目录。
*
`sess`
是 TensorFlow 会话,其中包含您要导出的经过训练的模型。
###
进行会议
###
执行会话
要导出模型,请首先清除导出目录:
...
...
@@ -392,7 +392,7 @@ $>bazel-bin/tensorflow_serving/example/mnist_inference --port=9000 /tmp/mnist_mo
```
## 测试服务
器
## 测试服务
要测试服务器,我们使用
[
`mnist_client.py`
](
https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_client.py
)
实用程序。
...
...
@@ -410,6 +410,6 @@ Inference error rate: 10.5%
结果确认服务器成功加载并运行了经过训练的模型。 实际上,对于 1,000 张图像,推理错误率为 10.5% ,这为训练后的 Softmax 模型提供了 91% 的准确性。
#
摘要
#
总结
我们在本章中描述了 TensorFlow 的两个重要功能。 首先是使用称为
*GPU 计算*
的编程模型的可能性,通过该模型可以加快代码的速度(例如,神经网络的训练阶段)。 本章的第二部分专门描述框架
*TensorFlow Serving*
。 这是一个用于机器学习模型的高性能,开源服务系统,专为生产环境而设计,并针对 TensorFlow 进行了优化。 这个强大的框架可以运行多个模型,这些模型可以根据现实世界的数据随时间变化,从而可以更有效地利用 GPU 资源,并允许开发人员改善自己的机器学习模型。
\ No newline at end of file
我们在本章中描述了 TensorFlow 的两个重要功能。 首先是使用称为
*GPU 计算*
的编程模型的可能性,通过该模型可以加快代码的速度(例如,神经网络的训练阶段)。 本章的第二部分专门描述框架
*TensorFlow 服务*
。 这是一个用于机器学习模型的高性能,开源服务系统,专为生产环境而设计,并针对 TensorFlow 进行了优化。 这个强大的框架可以运行多个模型,这些模型可以根据现实世界的数据随时间变化,从而可以更有效地利用 GPU 资源,并允许开发人员改善自己的机器学习模型。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录