diff --git a/docs/handson-cnn-tf/7.md b/docs/handson-cnn-tf/7.md index 856a34df881d89d46180c442fbe45083163e1771..5029c692374d5c887e8184238cd0b3b85c890996 100644 --- a/docs/handson-cnn-tf/7.md +++ b/docs/handson-cnn-tf/7.md @@ -15,7 +15,7 @@ # 什么时候? -研究表明,在 ImageNet 上训练的卷积网络权重中的特征提取优于常规特征提取方法,例如 SURF,[H​​TG0]可变形部分描述符(**DPD** s),**定向梯度直方图**(**HOG**)和**一袋单词**(**BoW**)。 这意味着无论常规视觉表示如何工作,卷积特征都可以同样好地使用,唯一的缺点是更深的架构可能需要更长的时间来提取特征。 +研究表明,在 ImageNet 上训练的卷积网络权重中的特征提取优于常规特征提取方法,例如 SURF,可变形部分描述符(**DPD**),**直方图定向梯度**(**HOG**)和**词袋**(**BoW**)。 这意味着无论常规视觉表示如何工作,卷积特征都可以同样好地使用,唯一的缺点是更深的架构可能需要更长的时间来提取特征。 当在 ImageNet 上训练深层卷积神经网络时,第一层中的卷积滤波器的可视化(请参见下图)显示,他们学习了*低层*特征,类似于边缘检测滤波器,而卷积滤波器 在最后一层学习*高级*功能,这些功能捕获特定于类的信息。 因此,如果我们在第一个池化层之后提取 ImageNet 的特征并将其嵌入 2D 空间(例如,使用 t-SNE),则可视化将显示数据中存在一些无政府状态,而如果执行 在全连接层上相同,我们将注意到具有相同语义信息的数据被组织成簇。 这意味着网络可以在更高层次上很好地概括,并且有可能将这种知识转移到看不见的类别中。 @@ -25,7 +25,7 @@ * **对象识别**:此 CNN 特征提取器可以成功地对其他类别不可见的数据集执行分类任务。 * **域适应**:这是当训练和测试数据来自不同的分布,而标签和类别数相同时。 不同的域可以考虑使用不同的设备或在不同的设置和环境条件下捕获的图像。 具有 CNN 功能的线性分类器可以在不同域中成功地将具有相同语义信息的图像聚类,而 SURF 功能则可以针对特定领域的特征进行过拟合。 -* **精细**-**精细分类**:这是我们要在同一高级类中的子类之间进行分类的时候。 例如,我们可以对鸟类进行分类。 尽管没有对细粒度数据进行训练,但 CNN 功能以及逻辑回归功能的性能优于基线方法。 +* **精细分类**:这是我们要在同一高级类中的子类之间进行分类的时候。 例如,我们可以对鸟类进行分类。 尽管没有对细粒度数据进行训练,但 CNN 功能以及逻辑回归功能的性能优于基线方法。 * **场景识别**:在这里,我们需要对整个图像的场景进行分类。 在对象分类数据库上经过训练的 CNN 特征提取器,顶部带有一个简单的线性分类器,其性能优于应用于识别数据的传统特征提取器的复杂学习算法。 这里提到的某些任务与图像分类没有直接关系,图像分类是 ImageNet 训练的主要目标,因此有人希望 CNN 功能无法推广到看不见的场景。 但是,这些功能与简单的线性分类器相结合,性能优于手工制作的功能。 这意味着 CNN 的学习权重是可重用的。 diff --git a/docs/handson-cnn-tf/8.md b/docs/handson-cnn-tf/8.md index 5e7995a20282be43fa5cf07ee2e153943eaa62a0..301dcb20a5b20386d80ec6aad125c06f43e5e198 100644 --- a/docs/handson-cnn-tf/8.md +++ b/docs/handson-cnn-tf/8.md @@ -35,7 +35,7 @@ 在讨论将数据划分到其中之前,让我们定义“训练集”,“开发集”和“测试集”。 * **训练集**:用于训练机器学习算法的数据/示例集。 在机器学习中,此数据用于查找模型/分类器的“最佳”权重。 通常,使用的大多数数据都进入训练集。 -* **开发(开发)** / **验证集**:用于在训练的中间阶段评估模型/分类器的数据部分。 该集合用于微调超参数和评估具有各种配置的模型体系结构。 它在模型开发期间使用,而不是在最终模型评估中使用。 +* **开发**/**验证集**:用于在训练的中间阶段评估模型/分类器的数据部分。 该集合用于微调超参数和评估具有各种配置的模型体系结构。 它在模型开发期间使用,而不是在最终模型评估中使用。 * **测试集**:模型经过微调和充分训练(我们对训练/开发集的损失感到满意),我们认为它已完全训练。 然后评估该模型。 对其进行评估的数据称为测试集。 测试集由数据的看不见部分组成,因此提供了最终模型性能的无偏估计。 为了获得高性能的神经网络,将数据集正确划分为训练集,开发集和测试集非常重要。 它有助于更​​快地迭代。 另外,它允许更有效地测量算法的偏差和方差,以便我们可以选择有效方式进行改进的方法。 @@ -127,7 +127,7 @@ ML 基本配方 # 查看您的效果指标 -分类准确性不是一个很好的衡量标准,尤其是当我们的数据不平衡时。 这种准确性将更倾向于具有更多数据的类。 有许多良好的性能评估指标可以真实地描述算法的执行方式,例如混淆矩阵,接收器**工作特性曲线**(ROC),**精确调用**(PR)曲线 和 F1 分数。 这些将在本章稍后详细说明。 +分类准确性不是一个很好的衡量标准,尤其是当我们的数据不平衡时。 这种准确性将更倾向于具有更多数据的类。 有许多良好的性能评估指标可以真实地描述算法的执行方式,例如混淆矩阵,**受试者工作特性曲线**(ROC),**精确找回**(PR)曲线和 F1 分数。 这些将在本章稍后详细说明。 # 数据综合/扩充 @@ -168,10 +168,10 @@ Tensorflow 已经具有其损失功能,并内置了加权选项: 根据此表,我们可以定义四个其他指标,这些指标可以使我们更好地了解已实现的结果。 这些是: -* **真实阳性率(TPR)或灵敏度或召回率**:当物体存在时测试结果为阳性的概率(真实阳性率,以百分比表示)= TP /(TP + FN) -* **假阳性率(FPR)**:是特定测试= FP /(FP + TN)错误拒绝实际阴性的概率 -* **阳性预测值(PPV)或精度**:当检测结果为阳性(以百分比表示)时该对象存在的概率= TP /(TP + FP) -* **负预测值(NPV)**:测试阴性(表示为百分比)时不存在对象的概率= TN /(TN + FN) +* **真阳性率(TPR)或灵敏度或召回率**:当物体存在时测试结果为阳性的概率(真实阳性率,以百分比表示),`= TP / (TP + FN)` +* **假阳性率(FPR)**:是特定测试错误拒绝实际阴性的概率,`= FP / (FP + TN)` +* **阳性预测值(PPV)或精度**:当检测结果为阳性(以百分比表示)时该对象存在的概率,`= TP / (TP + FP)` +* **阴性预测值(NPV)**:测试阴性(表示为百分比)时不存在对象的概率,`= TN / (TN + FN)` 为了更好地了解这些指标的实用性,我们以两种不同算法的以下两个混淆矩阵为例,并计算前面的指标。 diff --git a/docs/handson-cnn-tf/9.md b/docs/handson-cnn-tf/9.md index 6575a250d8cf6f86127ec8f82006e1836b295b25..40223d0d3c7699460b9a1a201cc5cb373ad409a3 100644 --- a/docs/handson-cnn-tf/9.md +++ b/docs/handson-cnn-tf/9.md @@ -188,7 +188,7 @@ with tf.Session() as sess: 在此代码中,我们导入 TensorFlow 时间轴模块,然后设置两个选项以启用图形跟踪并将其提供给`Session.run()`。 运行图之后,我们创建`Timeline`对象,该对象将包含对图执行进行性能分析的结果。 然后,我们将其转换为 Chrome 跟踪格式,最后将其写入 JSON 文件。 -要查看结果,您需要打开一个新的 Chrome 窗口。 然后,在地址栏中输入`chrome://tracing`并按*输入*。 左上角将有一个加载按钮。 使用它来加载刚刚保存的 JSON 文件。 +要查看结果,您需要打开一个新的 Chrome 窗口。 然后,在地址栏中输入`chrome://tracing`并按`Enter`。 左上角将有一个加载按钮。 使用它来加载刚刚保存的 JSON 文件。 现在将显示跟踪图形的结果。 查看此内容将告诉您图形的每个部分执行所需的时间。 您应该特别注意存在大块空白的地方。 这些空白表示设备(例如您的 GPU)正坐在那里等待数据,以便它们可以执行计算。 您应该尝试通过优化数据馈送方式来消除这些问题。 @@ -224,7 +224,7 @@ with tf.Session() as sess: # 当数据不适合在一台计算机上时 -可能出现的一个问题是,我们根本无法将数据存储在一台计算机上和/或我们仍然需要在该数据集上进行搜索。 为了解决此类问题,我们可能不仅需要分布式**分布式 SQL**(**NoSQL**)数据库,例如 Cassandra。 Cassandra 支持在可用性和性能至关重要的多个系统上进行数据分发: +可能出现的一个问题是,我们根本无法将数据存储在一台计算机上和/或我们仍然需要在该数据集上进行搜索。 为了解决此类问题,我们可能需要分布式 **NoSQL** 数据库,例如 Cassandra。 Cassandra 支持在可用性和性能至关重要的多个系统上进行数据分发: ![](img/fbc95570-cec1-4bbb-b2a1-04cd9aca41bd.png)