TensorFlow:向预训练的Inception模型添加类别并输出完整的图像层次结构

10

两个问题:

1) 有人知道是否可以向预训练的Inception-v3模型中添加新的图像类别吗?例如,我想在TensorFlow上对大量国旗进行训练,但我需要确保仍然可以识别来自ImageNet层次结构的图像。我知道有一种方法可以清除Inception的顶层并完全重新训练模型以适应我的类别,但这非常有限制且耗时。

2) 另外,是否有一种方法可以输出包含图像接收到的标记的整个层次结构? 我希望不仅能够看到Inception标记图像的具体内容,而且还能看到来自ImageNet的更广泛的“synsets”。例如,不仅要看到“玩具贵宾犬”的输出,我还想看到“动物/家养动物/狗/贵宾犬/玩具贵宾犬”。

感谢任何回复。

3个回答

5

1)输出层采用softmax,这意味着它有预定义的神经元数量,每个神经元都为一个特定类别定义。从技术上讲,您可以执行网络手术使其在输出层中具有一个以上表示新类的神经元。但是您需要对网络进行额外的训练以更新所有权重以考虑新类别。坏消息是-由于更新将影响整个网络且网络庞大,可能需要一段时间。好消息是-与从头学习相比,对预先训练的现有网络进行此类更改将更快。

2)你怎么知道这种层次结构存在呢?您无法确定数据的内部表示方式。当然,您可以检查每个函数中神经元的激活并可视化它们...但是您必须自己尝试理解这些激活的含义。而且也许您找不到您希望看到的任何层次结构。因此,总之 - 理解ANN如何在内部表示数据并非易事。实际上是极其困难的。

建议进一步阅读:https://github.com/tensorflow/models/tree/master/inception

请注意文档中的这部分 - 它与您的 #1 有密切关系。


4

2
是的,你可以。我最近也做了类似的事情,我的情况是病原植物叶片与健康植物叶片的对比。V3 Inception已经训练好了,你将进行的是迁移学习。迁移学习是一种技术,通过采用针对ImageNet等一组类别的完全训练好的模型,并从现有权重重新训练新类别,以快捷方式缩短了大量工作。链接: TensorFlow.org上的图像重新训练。视频来源: YouTube视频教程,Hvass Laboratories提供了一些很棒的视频资源,可以解决你的问题。

2
您提供的TensorFlow重新训练指南仅涉及迁移学习,无法满足问题需求——在不清除原始类别的情况下添加更多类别。 - KFZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接