欢迎分享,转载请注明来源:内存溢出
我的maxout的算法思路是这样的,首先要确定一个group_size变量,表示最大值是在group_size这样一个规模的集合下挑选出来的,简而言之就是给定group_size个数,取最大。确定好group_size变量,然后让卷积层的output_num变为原来的group_size倍、属于哪个类型的layer,就打开哪个hpp文件,这里就打开vision_layers.hpp,然后自己添加该layer的定义,或者直接复制Convolution_Layer的相关代码来修改类名和构造函数名都改为Aaa_Layer,如果不用GPU,将*_gpu的声明都去掉。1.首先确定要添加的layer的类型,是common_layer还是data_layer还是loss_layer,neuron_layer,vision_layer,这里的Wtf_Layer肯定是属vision_layer了,所以打开vision_layers.hpp然后复制convolution_layer的相关代码,把类名还有构造函数的名字改为WtfLayer,如果没有用到GPU运算,那么把里面的带GPU的函数都删掉2.将Wtf_layer.cpp添加到src\caffe\layers文件夹中,代码内容复制convolution_layer.cpp把对应的类名修改(可以搜一下conv关键字,然后改为Wtf)3.假如有gpu的代码就添加响应的Wtf_layer.cu(这里不添加了)4.修改proto/caffe.proto文件,找到LayerType,添加WTF,并更新ID(新的ID应该是34)。假如说Wtf_Layer有参数,比如Convolution肯定是有参数的,那么添加WtfParameter类5.在layer_factory.cpp中添加响应的代码,就是一堆ifelse的那片代码6.这个可以不做,但是为了结果还是做一个,就是写一个测试文件,检查前向后向传播的数据是否正确。gradient_check的原理可以参考UFLDL教程的对应章节(二)如何添加maxout_layer表示被bengio的maxout给搞郁闷了,自己摆出一个公式巴拉巴拉说了一堆,结果用到卷积层的maxout却给的另一种方案,吐槽无力,不过后来又想了下应该是bengio没表述清楚的问题。我的maxout的算法思路是这样的,首先要确定一个group_size变量,表示最大值是在group_size这样一个规模的集合下挑选出来的,简而言之就是给定group_size个数,取最大。确定好group_size变量,然后让卷积层的output_num变为原来的group_size倍,这样输出的featuremap的个数就变为原来的group_size倍,然后以group_size为一组划分这些featuremap,每组里面挑出响应最大的点构成一个新的featuremap,这样就得到了maxout层的输出。
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
手机相片怎样制作动图
上一篇
2023-05-14
vcenter的怎么将不同网段的ip连通
下一篇
2023-05-14
评论列表(0条)