TensorFlow:将 Class 添加到预训练的初始模型并输出完整图像层次结构
TensorFlow: Adding Class to Pre-trained Inception Model & Outputting Full Image Hierarchy
两个问题:
1) 有谁知道我是否可以将新图像 类 添加到预训练的 Inception-v3 模型中?例如,我想在大量国旗上训练 TensorFlow,但我需要确保我仍然可以识别来自 ImageNet 层次结构的图像。我意识到有一种方法可以擦除 Inception 的顶层并在我的 类 上完全重新训练模型,但这非常有限且耗时。
2) 另外,有没有办法输出包含图像接收到的标签的整个层次结构?我希望不仅能够具体看到 Inception 将图像标记为什么,而且我希望看到 ImageNet 中所有更广泛的 'synsets'。例如,我不仅仅看到输出 "toy poodle",还对 "Animal/Domesticated Animal/Dog/Poodle/toy poodle".
感兴趣
非常感谢任何回复。
1) 输出层是softmax,这意味着它有预定义的神经元数量,每个神经元都是为一个特定的class定义的。从技术上讲,您可以执行 Network Surgery,以便它在输出层中多一个神经元,这将代表您的新 class。但是您将必须对您的网络进行额外的训练,以便它更新其所有权重以考虑新的 class。坏消息——这可能需要一段时间,因为更新会影响整个网络,而且网络是巨大的。好消息 - 预训练现有网络的这种变化将比从头开始学习一切更快。
2) 是什么让您认为存在这样的等级制度?您肯定对数据的内部表示一无所知。当然,您可以检查每个功能中神经元的激活,甚至可以将它们可视化……但是您必须自己尝试理解这些激活的含义。并且您可能不会找到您希望看到的任何层次结构。所以总而言之 - 了解 ANN 如何在内部表示数据并非易事。实际上-非常困难。
建议进一步阅读:
https://github.com/tensorflow/models/tree/master/inception
注意文档的 this part - 它与您的 #1
密切相关
- 相关问题如下:
How to get existing model to recognize additional classes?
这里有一些解释:
https://github.com/tensorflow/models/issues/2510.
因此,如果有模型检查点,则可以通过某种方式微调模型。
这是带有微调示例的 repo link:
https://github.com/tensorflow/models/tree/master/research/slim/
- 可以获取 class 的节点名称和人类可读的 slug,
因此您可以按类别手动 linking 节点。但这很耗时。
是的,我最近做了一些非常相似的事情,在我的例子中是致病植物叶子与健康植物叶子。 v3 inception 已经训练好了,你要做的是迁移学习。迁移学习是一种通过为一组类别(如 ImageNet)采用完全训练的模型并从现有权重重新训练新 类.
来简化大量工作的技术。
Link : Image Retraining at tensorflow.org
视频来源:YouTube video tutorial,Hvass Laboratories 有一些很棒的视频资源可以解决您的问题。
两个问题:
1) 有谁知道我是否可以将新图像 类 添加到预训练的 Inception-v3 模型中?例如,我想在大量国旗上训练 TensorFlow,但我需要确保我仍然可以识别来自 ImageNet 层次结构的图像。我意识到有一种方法可以擦除 Inception 的顶层并在我的 类 上完全重新训练模型,但这非常有限且耗时。
2) 另外,有没有办法输出包含图像接收到的标签的整个层次结构?我希望不仅能够具体看到 Inception 将图像标记为什么,而且我希望看到 ImageNet 中所有更广泛的 'synsets'。例如,我不仅仅看到输出 "toy poodle",还对 "Animal/Domesticated Animal/Dog/Poodle/toy poodle".
感兴趣非常感谢任何回复。
1) 输出层是softmax,这意味着它有预定义的神经元数量,每个神经元都是为一个特定的class定义的。从技术上讲,您可以执行 Network Surgery,以便它在输出层中多一个神经元,这将代表您的新 class。但是您将必须对您的网络进行额外的训练,以便它更新其所有权重以考虑新的 class。坏消息——这可能需要一段时间,因为更新会影响整个网络,而且网络是巨大的。好消息 - 预训练现有网络的这种变化将比从头开始学习一切更快。
2) 是什么让您认为存在这样的等级制度?您肯定对数据的内部表示一无所知。当然,您可以检查每个功能中神经元的激活,甚至可以将它们可视化……但是您必须自己尝试理解这些激活的含义。并且您可能不会找到您希望看到的任何层次结构。所以总而言之 - 了解 ANN 如何在内部表示数据并非易事。实际上-非常困难。
建议进一步阅读: https://github.com/tensorflow/models/tree/master/inception
注意文档的 this part - 它与您的 #1
密切相关- 相关问题如下: How to get existing model to recognize additional classes?
这里有一些解释: https://github.com/tensorflow/models/issues/2510.
因此,如果有模型检查点,则可以通过某种方式微调模型。 这是带有微调示例的 repo link: https://github.com/tensorflow/models/tree/master/research/slim/
- 可以获取 class 的节点名称和人类可读的 slug, 因此您可以按类别手动 linking 节点。但这很耗时。
是的,我最近做了一些非常相似的事情,在我的例子中是致病植物叶子与健康植物叶子。 v3 inception 已经训练好了,你要做的是迁移学习。迁移学习是一种通过为一组类别(如 ImageNet)采用完全训练的模型并从现有权重重新训练新 类.
来简化大量工作的技术。Link : Image Retraining at tensorflow.org
视频来源:YouTube video tutorial,Hvass Laboratories 有一些很棒的视频资源可以解决您的问题。