【问题标题】:CNN on python with KerasCNN 上的 Python 与 Keras
【发布时间】:2020-08-18 01:29:56
【问题描述】:

我制作了一个简单的 CNN 来对狗和猫进行分类,我希望这个 CNN 能够检测不是猫或狗的图像,而且这必须是第三个不同的类别。如何实施?我应该使用 R-CNN 还是其他?

P.S 我在 CNN 上使用 Keras

【问题讨论】:

  • 您可以将没有任何狗或猫的图像作为单独的类进行训练。
  • 您可以使用贝叶斯神经网络,然后将来自网络的不确定响应解释为没有狗也没有猫。

标签: python tensorflow keras


【解决方案1】:

您想要做的就是使用学习到的网络权重来解决新问题的“迁移学习”。

请注意,这非常困难,并且受到许多限制,即使用可以检测汽车的 CNN 来检测卡车比使用经过训练的 CNN 检测人来检测猫更简单。

在任何情况下,您都会使用预先训练的模型,加载权重并继续使用新数据和示例对其进行训练。

这是否比简单地在所有需要的类上训练一个新模型更快甚至更好取决于实际的实现和问题。

Tl:博士

迁移学习很难!除非您知道自己在做什么或有特定原因,否则只需在所有类上训练一个新模型即可。

【讨论】:

    【解决方案2】:

    您几乎可以使用相同的架构进行训练(当然,这取决于此架构,如果它已经很糟糕,那么它在更多类上也不会有用。我建议使用最先进的模型架构狗和猫分类),但除了这个第三类数据集之外,您还需要狗和猫数据集。不幸的是,不可能使用预训练来在所有 3 个类之间进行预测,只在以后对第三类进行训练。

    因此,简而言之,如果您想在这三个类别之间进行预测,则需要拥有所有三个数据集并从头开始训练模型,否则使用预训练的模型,并且在对第三个类别进行训练后,它可以预测是否一些图像属于这第三类不。

    【讨论】:

      【解决方案3】:

      您应该通过添加一个类别来使用 new_category 进行训练,它包含之前不在 2 个类别中的图像。我是说

      --cat_dir
        -*.jpg
      --dog_dir
        -*.jpg
      --not_at_all_dir
        -*.jpg
      

      所以.. 您将训练的总类别是 3 个类别。
      (无论是类别或类)
      然后添加最终密集全连接(3个类别)的输出

      【讨论】:

        猜你喜欢
        • 2020-01-02
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多