两个问题:
1)有没有人知道我是否可以将新图像类添加到预先训练的Inception-v3模型中?例如,我想在许多国旗上训练TensorFlow,但我需要确保我仍能识别ImageNet层次结构中的图像 . 我意识到有一种方法可以擦除顶层的Inception并在我的类上完全重新训练模型,但这非常有限且耗时 .
2)另外,有没有办法输出包含图像接收的标签的整个层次结构?我希望能够不仅具体了解Inception如何标记图像,但我希望从ImageNet中看到所有更广泛的“同义词” . 例如,我不仅仅看到输出“玩具贵宾犬”,而是对“动物/驯养动物/狗/贵宾犬/玩具贵宾犬”感兴趣 .
任何回复都非常感谢 .
3 回答
是的,你可以,我最近做了一些非常相似的事情,在我的情况下它是生理植物叶片与 Health 的植物叶子 . v3开始已经训练,你将要做的是转学习 . 转移学习是一种通过对像ImageNet这样的一组类别采用完全训练的模型来快速完成大部分工作的技术,并从新类的现有权重中重新训练 .
链接:Image Retraining at tensorflow.org
视频来源:YouTube video tutorial,Hvass Laboratories有一些很棒的视频资源可以解决您的问题 .
1)输出层是softmax,这意味着它具有预定义数量的神经元,每个神经元定义一个特定的类 . 从技术上讲,你可以执行Network Surgery,这样它在输出层中还有一个神经元代表你的新类 . 但是,您必须对网络进行额外培训,以便更新其所有权重,以便考虑新课程 . 坏消息 - 可能需要一段时间,因为更新将影响整个网络,网络是GIANT . 好消息 - 预训练现有网络的这种变化将比从头学习一切更快 .
2)是什么让你认为这种等级存在?您肯定无法了解有关数据内部表示的任何信息 . 当然,你可以检查每个功能中神经元的激活,甚至可以看到它们......但你必须尝试理解这些激活对你自己的意义 . 并且您可能找不到任何您希望看到的层次结构 . 总而言之 - 理解ANN如何在内部表示数据并非易事 . 实际上 - 非常困难的一个 .
建议进一步阅读:https://github.com/tensorflow/models/tree/master/inception
注意文档的this part - 它与你的#1密切相关
以下是一些解释:https://github.com/tensorflow/models/issues/2510 .
因此,如果有模型检查点,有可能以某种方式微调模型 . 这是repo链接与finetuning的例子:https://github.com/tensorflow/models/tree/master/research/slim/