提交 8ed887ef 编写于 作者: W wizardforcel

2020-09-13 00:12:02

上级 bdd89200
......@@ -19,7 +19,7 @@
由于*过去的经验*,基于机器学习的程序或系统提高其在特定任务中的表现的能力与*识别数据*的能力紧密相关。 。 因此,这个主题称为*模式识别*,在人工智能领域具有至关重要的意义,并且引起了越来越多的关注。 它是所有机器学习技术的基础。
机器学习系统的培训可以通过不同的方式完成:
机器学习系统的训练可以通过不同的方式完成:
* 监督学习
* 无监督学习
......@@ -28,7 +28,7 @@
监督学习是机器学习的最常见形式。 在监督学习的情况下,在*训练阶段*期间,将一组示例(训练集)作为输入提交给系统,其中,每个示例都被标记为相应的*期望输出值*。 例如,让我们考虑一个**分类问题**,其中系统必须将`N`个不同类别之一中的一些实验观察结果归因于已知的类别。 在此问题中,训练集被表示为类型为`{(X1, Y1), ....., (Xn, Yn)}`的成对序列,其中`Xi`是输入向量(*特征向量*),`Yi`代表相应输入的所需类别向量。 大多数受监督的学习算法都有一个特征:通过最小损失函数(*成本函数*)的最小化来执行训练,该损失函数表示相对于所需输出系统的*输出误差*
最常用于此类训练的成本函数计算所需输出与系统提供的输出之间的*标准差*。 训练后,在与训练集(即所谓的*验证集*)分离的一组示例中测量模型的*准确*
最常用于此类训练的成本函数计算所需输出与系统提供的输出之间的*标准差*。 训练后,在与训练集(即所谓的*验证集*)分离的一组示例中测量模型的*准确*
![Supervised learning](img/image_01_001.jpg)
......@@ -612,7 +612,7 @@ TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorF
# TensorFlow 编程模型
采用数据流图作为执行模型,您可以使用隐藏所有复杂性的单个编程接口将数据流设计(图构建和数据流)与其执行(CPU,GPU 卡或组合)分开。 它还定义了 TensorFlow 中的编程模型应该是什么样的。
采用数据流图作为执行模型,您可以使用隐藏所有复杂性的单个编程接口将数据流设计(图构建和数据流)与其执行(CPU,GPU 卡或组合)分开。 它还定义了 TensorFlow 中的编程模型应该是什么样的。
让我们考虑将两个整数相乘的简单问题,即`a``b`
......@@ -658,7 +658,7 @@ TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorF
## 如何使用 TensorBoard
TensorBoard 是一个可视化工具,致力于分析数据流图以及更好地理解机器学习模型。 它可以以图形方式查看有关计算机图形任何部分的参数和详细信息的不同类型的统计信息。 通常,计算图可能非常复杂。 深度神经网络最多可包含 36,000 个节点。 因此,TensorBoard 将节点折叠成高级块,从而突出显示具有相同结构的组。 这样做可以更好地分析图,仅关注计算图的核心部分。 而且,可视化过程是交互式的; 用户可以平移,缩放和展开节点以显示详细信息。
TensorBoard 是一个可视化工具,致力于分析数据流图以及更好地理解机器学习模型。 它可以以图形方式查看有关计算图的任何部分的参数和详细信息的不同类型的统计信息。 通常,计算图可能非常复杂。 深度神经网络最多可包含 36,000 个节点。 因此,TensorBoard 将节点折叠成高级块,从而突出显示具有相同结构的组。 这样做可以更好地分析图,仅关注计算图的核心部分。 而且,可视化过程是交互式的; 用户可以平移,缩放和展开节点以显示详细信息。
下图显示了使用 TensorBoard 的神经网络模型:
......@@ -668,7 +668,7 @@ TensorBoard 可视化示例
TensorBoard 的算法将节点折叠为高级块,并突出显示具有相同结构的组,同时还分离出高级节点。 可视化工具也是交互式的:用户可以平移,放大,扩展和折叠节点。
TensorBoard 在机器学习模型的开发和调整中同样有用。 因此,TensorFlow 允许您在图中插入所谓的**摘要操作**。 这些摘要操作监视在日志文件中写入的更改值(在执行计算期间)。 然后,将 TensorBoard 配置为观看带有摘要信息的日志文件,并显示该信息随时间的变化。
TensorBoard 在机器学习模型的开发和调整中同样有用。 因此,TensorFlow 允许您在图中插入所谓的**摘要操作**。 这些摘要操作监视在日志文件中写入的更改值(在执行计算期间)。 然后,将 TensorBoard 配置为观看带有摘要信息的日志文件,并显示该信息随时间的变化。
让我们考虑一个基本的例子,以了解 TensorBoard 的用法。 我们有以下示例:
......
......@@ -15,7 +15,7 @@
可以通过三个参数`rank``shape``type`进行标识:
* `rank`:每个张量由称为等级的维单位描述。 它确定张量的维数。 因此,秩被称为张量的阶数或 n 维数(例如,秩 2 张量是矩阵,秩 1 张量是向量)。
* `rank`:每个张量由称为等级的维单位描述。 它确定张量的维数。 因此,秩被称为张量的阶数或 n 维数(例如,秩 2 张量是矩阵,秩 1 张量是向量)。
* `shape`:张量的形状是其张数和列数。
* `type`:这是分配给张量元素的数据类型。
......
......@@ -185,7 +185,7 @@ with tf.Session() as session:
```
每隔五个步骤,我们将打印出点图形:
每隔五个步骤,我们将打印出点图形:
```py
if (step % 5) == 0:
......@@ -270,7 +270,7 @@ with tf.Session() as session:
# MNIST 数据集
[MNIST 数据集](http://yann.lecun.com/exdb/mnist/)在机器学习领域中广泛用于培训和测试,我们将在这本书的示例中使用它。 它包含从 0 到 9 的手写数字的黑白图像。
[MNIST 数据集](http://yann.lecun.com/exdb/mnist/)在机器学习领域中广泛用于训练和测试,我们将在这本书的示例中使用它。 它包含从 0 到 9 的手写数字的黑白图像。
数据集分为两个组:60,000 个用于训练模型,另外 10,000 个用于测试模型。 将黑白的原始图像规格化以适合大小为`28×28`像素的盒子,并通过计算像素的质心来居中。 下图表示如何在 MNIST 数据集中表示数字:
......@@ -343,18 +343,18 @@ MNIST 的数字八
# 分类器
在机器学习的上下文中,术语*分类*标识一种算法过程,该算法过程将每个新的输入数据(*实例*)分配给一种可能的类别(*类*) 。 如果只考虑两个类,我们将讨论二进制分类。 否则我们有一个多类分类。
在机器学习的上下文中,术语*分类*标识一种算法过程,该算法过程将每个新的输入数据(*实例*)分配给一种可能的类别(*类*) 。 如果只考虑两个类,我们将讨论二分类。 否则我们有一个多类分类。
该分类属于*监督学习*类别,这使我们可以根据所谓的*训练集*对新实例进行分类。 解决监督分类问题的基本步骤如下:
1. 构建培训示例,以表示完成分类的实际环境和应用。
1. 构建训练示例,以表示完成分类的实际环境和应用。
2. 选择分类器和相应的算法实现。
3. 在训练集上训练算法,并通过验证设置任何控制参数。
4. 通过应用一组新实例(测试集)评估分类器的准确和表现。
4. 通过应用一组新实例(测试集)评估分类器的准确和表现。
## 最近邻算法
**K 最近邻****KNN**)是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样的类别。
**K 最近邻****KNN**)是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样的类别。
距离`d`定义为两点之间的欧几里得距离:
......@@ -443,7 +443,7 @@ pred = tf.arg_min(distance, 0)
#### 测试和算法评估
准确是可以帮助我们计算分类器最终结果的参数:
准确是可以帮助我们计算分类器最终结果的参数:
```py
accuracy = 0
......@@ -486,7 +486,7 @@ nn_index = sess.run(pred,\
```
然后,我们求值并报告分类器的准确
然后,我们求值并报告分类器的准确
```py
accuracy += 1./len(test_pixels)
......
......@@ -40,7 +40,7 @@ sign(x)=
```
可以使用其他激活函数,最好是非线性激活函数(例如`sigmoid`函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知机已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。
可以使用其他激活函数,最好是非线性激活函数(例如`sigmoid`函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知机已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。
![Single Layer Perceptron](img/B05474_04_02.jpg)
......@@ -58,11 +58,11 @@ Sigmoid 函数
如我们所见,因变量的取值严格在`0``1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们的类别某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络表现对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的表现,该测试集由除受过训练的图像以外的其他图像组成。
我们将要实现的培训的基本步骤如下:
我们将要实现的训练的基本步骤如下:
* 权重在训练开始时用随机值初始化。
* 对于训练集的每个元素,都会计算*误差*,即期望输出与实际输出之间的差。 此错误用于调整权重。
* 重复该过程,以随机顺序将训练集的所有示例重新提交给网络,直到整个训练集上的错误不小于某个阈值,或者直到达到最大迭代次数为止。
* 对于训练集的每个元素,都会计算*误差*,即期望输出与实际输出之间的差。 此误差用于调整权重。
* 重复该过程,以随机顺序将训练集的所有示例重新提交给网络,直到整个训练集上的误差不小于某个阈值,或者直到达到最大迭代次数为止。
现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如第 3 章,“机器学习入门”中的手写数字的数据库。
......@@ -172,9 +172,9 @@ TensorFlow 的`tf.nn.softmax`函数提供了来自输入证据张量的基于概
TensorFlow 提供了许多其他激活函数。 有关更好的参考,请参见[这里](https://www.tensorflow.org/versions/r0.8/api_docs/index.html)
为了训练我们的模型并知道何时有一个好的模型,我们必须定义如何定义模型的准确。 我们的目标是尝试获取参数`W``b`的值,这些值会最小化指示模型有多糟糕的度量值。
为了训练我们的模型并知道何时有一个好的模型,我们必须定义如何定义模型的准确。 我们的目标是尝试获取参数`W``b`的值,这些值会最小化指示模型有多糟糕的度量值。
不同的度量标准计算了期望输出和训练数据输出之间的错误程度。 常见的误差度量是均方误差或*平方欧几里德距离*。 但是,有一些研究发现建议对这种神经网络使用其他指标。
不同的度量标准计算了期望输出和训练数据输出之间的误差。 常见的误差度量是均方误差或*平方欧几里德距离*。 但是,有一些研究发现建议对这种神经网络使用其他指标。
在此示例中,我们使用所谓的`cross-entropy error`函数。 它定义为:
......@@ -206,7 +206,7 @@ optimizer = tf.train.GradientDescentOptimizer\
现在是构建会话并启动我们的神经网络模型的时候了。
我们修复了以下列表以可视化培训过程:
我们修复了以下列表以可视化训练过程:
```py
avg_set = []
......@@ -229,7 +229,7 @@ with tf.Session() as sess:
```
如前所述,每个期都是一个训练周期:
如前所述,每个期都是一个训练周期:
```py
for epoch in range(training_epochs):
......@@ -247,14 +247,14 @@ with tf.Session() as sess:
```
使用批处理数据拟合训练:
使用批数据拟合训练:
```py
sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})
```
用给定的图像值(`x`)和实际输出(`y_`)计算运行`train_step`函数的平均损
用给定的图像值(`x`)和实际输出(`y_`)计算运行`train_step`函数的平均损
```py
avg_cost += sess.run\
......@@ -263,7 +263,7 @@ with tf.Session() as sess:
```
在计算过程中,我们每个期显示一个日志:
在计算过程中,我们每个期显示一个日志:
```py
if epoch % display_step == 0:
......@@ -274,7 +274,7 @@ with tf.Session() as sess:
```
让我们获得模式的准确性。 如果`y`值最高的索引与实数向量中的`correct_prediction`均值使我们具有准确性,则是正确的。 我们需要使用测试集(`mnist.test`)运行准确性函数。
让我们获得模式的准确率。 如果`y`值最高的索引与实数向量中的`correct_prediction`均值使我们具有准确率,则是正确的。 我们需要使用测试集(`mnist.test`)运行准确率函数。
我们使用`x``y`的关键图像和标签:
......@@ -291,7 +291,7 @@ with tf.Session() as sess:
## 测试和评估
我们之前显示了训练阶段,并且对于每个期,我们都打印了相对成本函数:
我们之前显示了训练阶段,并且对于每个期,我们都打印了相对成本函数:
```py
Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright", "credits" or "license()" for more information. >>> ======================= RESTART ============================
......@@ -329,7 +329,7 @@ Training phase finished
```
如您所见,在培训阶段,成本函数被最小化。 在测试的最后,我们展示了实现模型的准确性
如您所见,在训练阶段,成本函数被最小化。 在测试的最后,我们展示了实现模型的准确率
```py
Model Accuracy: 0.9475
......@@ -474,7 +474,7 @@ learning_rate = 0.001
```
时代
周期
```py
training_epochs = 20
......@@ -570,7 +570,7 @@ w = tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2]))
```
有偏张量:
有偏张量:
```py
bias_layer_2 = tf.Variable(tf.random_normal([n_hidden_2]))
......@@ -604,7 +604,7 @@ cost = tf.reduce_mean\
```
TensorFlow 函数`tf` `.nn.softmax_cross_entropy_with_logits`计算 softmax 层的成本。 仅在培训期间使用。 logits 是模型输出的未归一化对数概率(将 softmax 归一化之前输出的值)。
TensorFlow 函数`tf` `.nn.softmax_cross_entropy_with_logits`计算 softmax 层的成本。 仅在训练期间使用。 logits 是模型输出的未归一化对数概率(将 softmax 归一化之前输出的值)。
使`cost`函数最小化的相应优化器是:
......@@ -751,7 +751,7 @@ TensorFlow 提供了优化器基类来计算损失的梯度并将梯度应用于
```
我们在下图中显示了培训阶段:
我们在下图中显示了训练阶段:
![Launch the session](img/B05474_04_06.jpg)
......@@ -877,7 +877,7 @@ layer_1_neurons = 10
```
网络一次学习`100`点,总共学习`1500`个学习周期(期):
网络一次学习`100`点,总共学习`1500`个学习周期(期):
```py
batch_size = 100
......@@ -926,7 +926,7 @@ plt.show()
![Multi Layer Perceptron function approximation](img/B05474_04_07.jpg)
培训和验证集
训练和验证集
### 建立模型
......@@ -1024,7 +1024,7 @@ for i in range(NUM_EPOCHS):
```
将这个网络运行 1400 个时期,我们将看到错误逐渐减少并最终收敛:
将这个网络运行 1400 个周期,我们将看到误差逐渐减少并最终收敛:
```py
Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright", "credits" or "license()" for more information.
......@@ -1048,7 +1048,7 @@ epoch 1400, cost = 0.574602
>>>
```
**以下代码行使我们能够显示成本在运行期中的变化:
**以下代码行使我们能够显示成本在运行期中的变化:
```py
plt.plot(errors,label='MLP Function Approximation')
......
......@@ -92,7 +92,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据
在上图中,我们看到了三个特征图。 当然,实际上它的数量会增加,甚至可以使用具有 20 或 40 个特征图的卷积层。 权重和偏差共享的一个巨大优势是卷积网络中涉及的参数的*显着降低*。 考虑我们的示例,对于每个特征图,我们需要 25 个权重(`5x5`)和一个偏差(共享)。 总共有 26 个参数。 假设我们有 20 个特征图,我们将定义 520 个参数。 在具有 784 个输入神经元和例如 30 个隐藏层神经元的完全连接的网络中,我们需要 30 个以上的`784x30`偏差权重,以达到总共 23.550 个参数。
差异是显而易见的。 卷积网络还使用*池化层*,它们是紧接在卷积层之后的层。 这些简化了前一层的输出信息(*卷积*)。 它获取从卷积层出来的输入特征图,并准备一个*压缩的*特征图。 例如,我们可以说池化层可以以其所有单汇总在上一层神经元的`2x2`区域中。
差异是显而易见的。 卷积网络还使用*池化层*,它们是紧接在卷积层之后的层。 这些简化了前一层的输出信息(*卷积*)。 它获取从卷积层出来的输入特征图,并准备一个*压缩的*特征图。 例如,我们可以说池化层可以以其所有单汇总在上一层神经元的`2x2`区域中。
该技术称为池化,可以用以下方案概括:
......@@ -157,7 +157,7 @@ CNN 架构架构
```
5. 为了减少过拟合,我们应用了*丢弃*技术。 该术语是指在神经网络中删除单元(隐藏,输入和输出)。 确定要消除的神经元是随机的; 一种方法是应用概率,正如我们将在代码中看到的那样。 因此,我们定义以下参数(待调整):
5. 为了减少过拟合,我们应用了*丢弃*技术。 该术语是指在神经网络中删除单元(隐藏,输入和输出)。 确定要消除的神经元是随机的; 一种方法是应用概率,正如我们将在代码中看到的那样。 因此,我们定义以下参数(待调整):
```py
dropout = 0.75
......@@ -223,7 +223,7 @@ def conv2d(img, w, b):
```
为此,我们使用了 TensorFlow `tf.nn.conv2d`函数。 它根据*输入张量**共享权重*计算 2D 卷积。 然后,该操作的结果将被添加到偏置`bc1`矩阵。 为此,我们使用函数`tf.nn.conv2d`从输入张量和共享权重的张量计算出二维卷积。 然后,该操作的结果将添加到偏置`bc1`矩阵中。 `tf.nn.relu`*Relu 函数*(整流线性单),它是深层神经网络隐藏层中的*常见激活函数*
为此,我们使用了 TensorFlow `tf.nn.conv2d`函数。 它根据*输入张量**共享权重*计算 2D 卷积。 然后,该操作的结果将被添加到偏置`bc1`矩阵。 为此,我们使用函数`tf.nn.conv2d`从输入张量和共享权重的张量计算出二维卷积。 然后,该操作的结果将添加到偏置`bc1`矩阵中。 `tf.nn.relu`*Relu 函数*(整流线性单),它是深层神经网络隐藏层中的*常见激活函数*
我们将这个激活函数应用于卷积函数的返回值。 填充值为`'SAME'`,它指示*输出张量将具有与输入张量*相同的大小。
......@@ -261,7 +261,7 @@ def max_pool(img, k):
第一次卷积和合并操作后的 CNN
最后的操作是通过在卷积层上应用`tf.nn.dropout` TensorFlow 运算符来减少过拟合。 为此,我们为占位符(`keep_prob`)在删除期间保留神经元输出的概率创建一个占位符:
最后的操作是通过在卷积层上应用`tf.nn.dropout` TensorFlow 运算符来减少过拟合。 为此,我们为占位符(`keep_prob`)在删除期间保留神经元输出的概率创建一个占位符:
```py
keep_prob = tf. placeholder(tf.float32)
......@@ -279,7 +279,7 @@ bc2 = tf.Variable(tf.random_normal([64]))
```
如您所注意到的,第二个隐藏层将具有`5x5`窗口的 64 个要素,而输入层的数量将从第一个卷积获得的层中给出。 接下来,我们将第二层应用于卷积`conv1`张量,但是这次我们将 64 组`5x5`滤镜分别应用于 32 个`conv1`层:
如您所注意到的,第二个隐藏层将具有`5x5`窗口的 64 个特征,而输入层的数量将从第一个卷积获得的层中给出。 接下来,我们将第二层应用于卷积`conv1`张量,但是这次我们将 64 组`5x5`过滤器分别应用于 32 个`conv1`层:
```py
conv2 = conv2d(conv1,wc2,bc2)
......@@ -441,7 +441,7 @@ with tf.Session() as sess:
```
我们打印`256` MNIST 测试图像的准确
我们打印`256` MNIST 测试图像的准确
```py
print "Testing Accuracy:",\
......@@ -630,7 +630,7 @@ RNN 架构架构
S[t] = f([U] * X[t] + [W] * S[t-1])
```
函数`f`*非线性函数*,例如整流线性单(ReLu),而`O[t]`; 是使用参数`V`计算的`t`时刻的输出。
函数`f`*非线性函数*,例如整流线性单(ReLu),而`O[t]`; 是使用参数`V`计算的`t`时刻的输出。
输出将取决于网络所使用的问题的类型。 例如,如果您要预测句子的下一个单词,则它可能是系统词汇表中每个单词的*概率向量*
......@@ -640,7 +640,7 @@ S[t] = f([U] * X[t] + [W] * S[t-1])
![LSTM networks](img/B05474_05_14.jpg)
LSTM)单位
LSTM 单元
LSTM 单元具有三个门和四个输入权重, `x[t]`(从数据到输入和三个门),而`h[t]`是单元的输出。
......@@ -690,7 +690,7 @@ lstm = rnn_cell.BasicLSTMCell(size)
```
这里`size`应该是 LSTM 要使用的单数。 LSTM 内存初始化为零:
这里`size`应该是 LSTM 要使用的单数。 LSTM 内存初始化为零:
```py
state = tf.zeros([batch_size, lstm.state_size])
......@@ -722,7 +722,7 @@ tf.nn.seq2seq.sequence_loss_by_example
```
它计算平均每个单词的*困惑度*,它的值衡量模型的准确(值越小则表示最佳表现),并将在整个训练过程中进行监控。
它计算平均每个单词的*困惑度*,它的值衡量模型的准确(值越小则表示最佳表现),并将在整个训练过程中进行监控。
## 运行代码
......@@ -797,7 +797,7 @@ Test Perplexity: 117.171
```
如您所见,在每个期之后,困惑变得更低了。
如您所见,在每个期之后,困惑变得更低了。
# 总结
......
......@@ -259,7 +259,7 @@ saver = tf.train.Saver(sharded=True)
```
`saver`用于将图变量值序列化为模型导出,以便以后可以正确还原它们。
`saver`用于将图变量值序列化为模型导出,以便以后可以正确还原它们。
下一步是定义`model_exporter`
......@@ -330,8 +330,8 @@ $>ls /tmp/mnist_model
子目录的每个版本都包含以下文件:
* `export.meta`是模型的序列化`tensorflow::MetaGraphDef`。 它包括模型的图定义,以及模型的元数据,例如签名。
* `export-?????-of-?????`是保存图的序列化变量的文件。
* `export.meta`是模型的序列化`tensorflow::MetaGraphDef`。 它包括模型的图定义,以及模型的元数据,例如签名。
* `export-?????-of-?????`是保存图的序列化变量的文件。
```py
$>ls /tmp/mnist_model/00000001
......@@ -341,7 +341,7 @@ checkpoint export-00000-of-00001 export.meta
# 加载和导出 TensorFlow 模型
用于加载导出的 TensorFlow 模型的 C++ 代码在`mnist_inference.cc`中的`main()`函数中。 在这里,我们报告摘录; 我们不考虑用于批处理的参数。 如果要调整最大批处理大小,超时阈值或用于批处理推理的后台线程数,可以通过在`BatchingParameters`中设置更多值来进行调整:
用于加载导出的 TensorFlow 模型的 C++ 代码在`mnist_inference.cc`中的`main()`函数中。 在这里,我们报告摘录; 我们不考虑用于批量的参数。 如果要调整最大批量大小,超时阈值或用于批量推理的后台线程数,可以通过在`BatchingParameters`中设置更多值来进行调整:
```py
int main(int argc, char** argv)
......@@ -408,7 +408,7 @@ Inference error rate: 10.5%
```
结果确认服务器成功加载并运行了经过训练的模型。 实际上,对于 1,000 张图像,推理错误率为 10.5% ,这为训练后的 Softmax 模型提供了 91% 的准确
结果确认服务器成功加载并运行了经过训练的模型。 实际上,对于 1,000 张图像,推理错误率为 10.5% ,这为训练后的 Softmax 模型提供了 91% 的准确
# 总结
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册