CNN在设计模型时怎样高效地整理不同版本的模型结构

cnn的训练和应用已经很成熟了。一般的识别,用大公司放出的pre-trained版本就足够了,里面已经包含了足够的基础特征,需要做的是用你自己的样本在它的基础上训练。这种增量的模式对于图像处理尤其好用,fb他们会把大的网络分层训练好,然后给别的部门使用(lekun说过)。自己调参数训练有俩问题:样本量大的话,会很慢。样本量小,过拟合。很多结构都是有数学理论支撑的,并不是像盖房子一样的物理结构,可以任意改参数。
■网友
【CNN在设计模型时怎样高效地整理不同版本的模型结构】 如果你用的是TensorFlow的话,可以在中间写一些用于TensorBoard的输出,然后每个模型放一个文件夹,然后用TensorBoard来看这些文件夹的损失函数和Precision,AUC/ROC等等。另外TensorBoard可以显示TensorFlow的模型结构,于是顺便也把网络结构保存下来了。

■网友
感觉并没有什么固定的规律,还是要根据不同的场景不断尝试迭代。
次数多了,自己碰到一个新的场景,会慢慢有自己的想法和直觉。
hint: 对各种流行的模型,要尝试从作者角度去理解这个模型的结构为什么是这样的。


■网友
我是网络定义统一放在一个nets.py文件里,每个函数定义一个网络,统一好输入输出的格式,采用多行注释说明结构,这样IDE能自动解析。
用的时候在训练文件里from nets import xx as mynet,这样换网络只需要在import的地方更改。而且可以通过eval()函数来自动化的跑不同网络结构。

■网友
简单回答一下我的做法,供参考。我一般是把模型和训练文件分开来。看模型结构,如果模型结果大部分相似,只是小细节不同的话,可以把相同的部分写成基类,然后模型继承这个类。举个例子:比如要在res后面修改,可以把res作为基类,然后把自己的模型写成类继承res再增加自己的层,训练时,在训练文件里导入这个类就行了。


    推荐阅读