【问题标题】:How to create a hierarchy with multiple networks in keras?如何在 keras 中创建具有多个网络的层次结构?
【发布时间】:2017-08-21 15:16:46
【问题描述】:

我想对不同的图片进行分类,例如猫和狗。为此,我想训练一个通用网络“A”,它只对输入是猫还是狗进行分类。之后,每个一般类别的专门子网络应预测狗或猫的种族。

我知道 keras 的功能 api 以及如何将输出传递到另一层或网络,但我的问题是我如何将输出仅传递到一个专门的网络,以便在我预测通用类之后唯一的网络将使用的是对应的特殊网络。

所以我想在 keras 中构建类似的东西:

x = Input(shape(100,))
network_a_out = NetworkA(100)(x)
if(network_a_out == classCat)
    out = NetworkCat(100)(x) # predict special race of cat
else:
    out = NetworkDog(100)(x) # predict special race of dog

在不使用多个 if/else 语句的情况下,有没有更好的方法在 keras 中解决这个问题?

【问题讨论】:

  • 你之前已经问过同样的问题:stackoverflow.com/questions/45736869/…请不要那样做。
  • 我现在删除了旧问题,希望这个更容易理解
  • 该代码行不通,而且,您为什么要将所有这些都放在一个网络中。使用三个独立的网络会更好,这样你的特征层就会在二级网络中获得新的权重,重点关注动物品种与动物类型
  • 您找到解决方案了吗?对于不同的上下文,我需要类似的东西。

标签: python neural-network keras


【解决方案1】:

您可以尝试删除最后一层(预测狗/猫),并添加一个新层来预测狗/猫的种族。这意味着,使用第一个 NN 作为预训练网络来预测动物种族。 您应该为狗训练一个预训练网络,为猫训练其他网络。

【讨论】:

  • 是的,这就是我想解决我的问题的方法,但我不知道如何在 keras(或 tensorflow)中做到这一点我知道我可以将第一个 NN 的输出传递给每个专门的网络,但我不知道如何将输出仅传递给相应的专用网络(无需为每个子类编写许多 if/else)
  • 假设您已经存储了经过训练的 NN(预测狗/猫)。在一个新脚本中,您加载该网络,删除最后一层,添加新层(最后一层具有赛狗数量的大小)并使用赛狗数据训练这个预训练网络。训练后,您可以将 NN 存储在另一个文件中。做同样的事情来预测猫的比赛。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多