Caffe 中的多个预训练网络
Multiple pretrained networks in Caffe
是否有一种简单的方法(例如,无需修改 caffe 代码)将来自多个预训练网络的权重加载到一个网络中?该网络包含一些与两个预训练网络具有相同维度和名称的层。
我正在尝试使用 NVidia DIGITS 和 Caffe 来实现这一点。
编辑:我认为不可能直接从 DIGITS 进行操作,正如答案所证实的那样。任何人都可以建议一种简单的方法来修改 DIGITS 代码以能够 select 多个预训练网络吗?我检查了一下代码,认为 training script 是一个很好的起点,但我对 Caffe 没有深入的了解,所以我不确定 best/quickest 是什么方式实现这一目标将是。
据我所知,没有直接的方法可以做到这一点。
但是,您可以使用 net surgery 加载预训练模型并手动将它们的权重分配给目标网络。一旦您拥有一个包含根据各种预训练模型初始化的所有权重的单一网络,您就可以保存它并将其用作其余工作的单一预训练模型。
正如 Shai 所建议的,没有办法做到这一点,所以我决定克隆官方存储库并进行适当的更改。我更改了代码,以便可以使用冒号作为分隔符来加载多个预训练网络。
我在官方存储库上创建了一个拉取请求,然后我的更改与 DIGITS 的主要分支合并,这意味着现在可以在 DIGITS 中使用此功能。
是否有一种简单的方法(例如,无需修改 caffe 代码)将来自多个预训练网络的权重加载到一个网络中?该网络包含一些与两个预训练网络具有相同维度和名称的层。
我正在尝试使用 NVidia DIGITS 和 Caffe 来实现这一点。
编辑:我认为不可能直接从 DIGITS 进行操作,正如答案所证实的那样。任何人都可以建议一种简单的方法来修改 DIGITS 代码以能够 select 多个预训练网络吗?我检查了一下代码,认为 training script 是一个很好的起点,但我对 Caffe 没有深入的了解,所以我不确定 best/quickest 是什么方式实现这一目标将是。
据我所知,没有直接的方法可以做到这一点。
但是,您可以使用 net surgery 加载预训练模型并手动将它们的权重分配给目标网络。一旦您拥有一个包含根据各种预训练模型初始化的所有权重的单一网络,您就可以保存它并将其用作其余工作的单一预训练模型。
正如 Shai 所建议的,没有办法做到这一点,所以我决定克隆官方存储库并进行适当的更改。我更改了代码,以便可以使用冒号作为分隔符来加载多个预训练网络。
我在官方存储库上创建了一个拉取请求,然后我的更改与 DIGITS 的主要分支合并,这意味着现在可以在 DIGITS 中使用此功能。