首页 文章

TensorFlow:将类添加到预先训练的初始模型并输出完整图像层次结构

提问于
浏览
8

两个问题:

1)有没有人知道我是否可以将新图像类添加到预先训练的Inception-v3模型中?例如,我想在许多国旗上训练TensorFlow,但我需要确保我仍能识别ImageNet层次结构中的图像 . 我意识到有一种方法可以擦除顶层的Inception并在我的类上完全重新训练模型,但这非常有限且耗时 .

2)另外,有没有办法输出包含图像接收的标签的整个层次结构?我希望能够不仅具体了解Inception如何标记图像,但我希望从ImageNet中看到所有更广泛的“同义词” . 例如,我不仅仅看到输出“玩具贵宾犬”,而是对“动物/驯养动物/狗/贵宾犬/玩具贵宾犬”感兴趣 .

任何回复都非常感谢 .

3 回答

  • 2

    是的,你可以,我最近做了一些非常相似的事情,在我的情况下它是生理植物叶片与 Health 的植物叶子 . v3开始已经训练,你将要做的是转学习 . 转移学习是一种通过对像ImageNet这样的一组类别采用完全训练的模型来快速完成大部分工作的技术,并从新类的现有权重中重新训练 .

    链接:Image Retraining at tensorflow.org

    视频来源:YouTube video tutorial,Hvass Laboratories有一些很棒的视频资源可以解决您的问题 .

  • 4

    1)输出层是softmax,这意味着它具有预定义数量的神经元,每个神经元定义一个特定的类 . 从技术上讲,你可以执行Network Surgery,这样它在输出层中还有一个神经元代表你的新类 . 但是,您必须对网络进行额外培训,以便更新其所有权重,以便考虑新课程 . 坏消息 - 可能需要一段时间,因为更新将影响整个网络,网络是GIANT . 好消息 - 预训练现有网络的这种变化将比从头学习一切更快 .

    2)是什么让你认为这种等级存在?您肯定无法了解有关数据内部表示的任何信息 . 当然,你可以检查每个功能中神经元的激活,甚至可以看到它们......但你必须尝试理解这些激活对你自己的意义 . 并且您可能找不到任何您希望看到的层次结构 . 总而言之 - 理解ANN如何在内部表示数据并非易事 . 实际上 - 非常困难的一个 .

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

    注意文档的this part - 它与你的#1密切相关

  • 4

    以下是一些解释:https://github.com/tensorflow/models/issues/2510 .

    因此,如果有模型检查点,有可能以某种方式微调模型 . 这是repo链接与finetuning的例子:https://github.com/tensorflow/models/tree/master/research/slim/

    • 可以为类获取节点名称和人类可读的slug,因此您可以按类别手动链接节点 . 但这很费时间 .

相关问题