我想在 Caffe 中实现一个神经网络架构,它将根据某些可迭代变量执行不同的操作。例如:完整网络可能会使用 10 层进行 5 次训练或测试迭代中的 4 次,但对于所有其他迭代,它将截断网络并仅使用最后 5 层。当然,这需要第一层的输入和第五层的输入具有相同的维度,但我的主要问题是如何在训练/测试期间实现两种架构之间的切换。
最佳答案
我想你可以使用 pycaffe 和 caffe.NetSpec()
来做到这一点,但这不会是一个非常好的代码......
另一方面,为什么不训练整个网络的 i
次迭代,保存快照,然后使用您保存的快照“热启动”简化模型?
即:将 'full_trainval.prototxt'
与 'full_solver.prototxt'
配置为训练 i
次迭代的完整网络,并且 'top_trainval.prototxt'
与 'top_solver.prototxt'
配置为仅训练网络的顶层。然后
~$ $CAFFE_ROOT/build/tools/caffe train -solver full_solver.prototxt
此阶段结束后,请确保保存了最终的 sanpshot,然后
~$ $CAFFE_ROOT/build/tools/caffe train -solver top_solver.prototxt -snapshot full_train_last_snapshot.solverstate
最后,您可以使用 net_surgery
将两个阶段的权重合并到一个完整的网络中。
关于machine-learning - 如何制作非静态的Caffe网络架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969810/