python – 你能用Caffe在同一数据上训练多个网络吗?

我正在编写一个校准管道来学习神经网络的超参数,以检测DNA序列的特性*.因此,这需要在具有不同超参数的相同数据集上训练大量模型.

我正在尝试优化它以在GPU上运行.与图像数据集相比,DNA序列数据集非常小(通常4个通道中的10s或100s碱基对代表4个DNA碱基,A,C,G和T,与3个RGB通道中的10,000个像素相比) ,因此无法在GPU上充分利用并行化,除非同时训练多个模型.

有没有办法在Python中用Caffe做到这一点?

(我以前asked this question参考过nolearn,lasagne或Theano这样做,但我不确定它是否可能因此转移到Caffe.)

*它基于DeepBind model检测转录因子与DNA结合的位置,如果您感兴趣的话.

最佳答案 是.以下选项可用于此.

选项1:并行培训流程.为每个超参数配置编写网络定义,并为每个配置运行一个培训过程.

优点:无需自己管理资源.
缺点:如果所有网络都使用相同的数据,您将多次支付从CPU到GPU RAM的数据复制成本.这可能会变得非常多余.我注意到这种情况变慢了,以至于我不得不按顺序训练不同的网络.

选项2:将不同的网络定义合并为单个原型文本并使用单个解算器进行训练.层和blob名称必须是唯一的,以使子网络独立.

This ipython notebook提供了这个演示.将网络合并到原型文件中.该笔记本还证明,通过保持每个子网络的图层和blob名称是唯一的,组合的培训过程将达到与您独立训练每个人相同的结果.

点赞