提交 84a0d6d8 编写于 作者: E emailweixu 提交者: GitHub

Merge pull request #2572 from skylian/error_clipping

Enable error clipping for fc layer
......@@ -359,12 +359,11 @@ void Layer::backwardActivation() {
/* Do error clipping */
if (config_.error_clipping_threshold() > 0.0f) {
if (FLAGS_log_error_clipping) {
CpuVector outGradVec(0, nullptr);
outGradVec.subVecFrom(
output_.grad->getData(), 0, output_.grad->getElementCnt());
real maxAbsGrad = outGradVec.getAbsMax();
VectorPtr outGradVec = Vector::create(
output_.grad->getData(), output_.grad->getElementCnt(), useGpu_);
real maxAbsGrad = outGradVec->getAbsMax();
if (maxAbsGrad > config_.error_clipping_threshold()) {
real avgAbsGrad = outGradVec.getAbsSum() / outGradVec.getSize();
real avgAbsGrad = outGradVec->getAbsSum() / outGradVec->getSize();
LOG(INFO) << " layer=" << config_.name() << " need clipping,"
<< " max error=" << maxAbsGrad << " avg error=" << avgAbsGrad;
}
......
......@@ -1575,7 +1575,13 @@ class MultiClassCrossEntropySelfNormCostLayer(LayerBase):
@config_layer('fc')
class FCLayer(LayerBase):
def __init__(self, name, size, inputs, bias=True, **xargs):
def __init__(self,
name,
size,
inputs,
bias=True,
error_clipping_threshold=None,
**xargs):
super(FCLayer, self).__init__(name, 'fc', size, inputs=inputs, **xargs)
for input_index in xrange(len(self.inputs)):
input_layer = self.get_input_layer(input_index)
......@@ -1592,6 +1598,8 @@ class FCLayer(LayerBase):
self.create_input_parameter(input_index, psize, dims, sparse,
format)
self.create_bias_parameter(bias, self.config.size)
if error_clipping_threshold is not None:
self.config.error_clipping_threshold = error_clipping_threshold
@config_layer('selective_fc')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册