- Added EPS for softmax MKLDNN op

- EPS added to softmax mkldnn primitive outcome is limited to training
phase

Fixes after review

clang format fixes

clang format fixes
wangkuiyi-patch-2
Jacek Czaja 8 years ago
parent a097d082c7
commit acdf7cbd19

@ -73,6 +73,15 @@ class SoftmaxMKLDNNKernel : public paddle::framework::OpKernel<T> {
softmax_dst_memory); softmax_dst_memory);
std::vector<primitive> pipeline{softmax}; std::vector<primitive> pipeline{softmax};
stream(stream::kind::eager).submit(pipeline).wait(); stream(stream::kind::eager).submit(pipeline).wait();
const bool is_test = ctx.Attr<bool>("is_test");
if (!is_test) {
T threshold = exp(-64);
for (size_t i = 0; i < dst_tz[0] * dst_tz[1]; ++i) {
output_data[i] =
output_data[i] < threshold ? threshold : output_data[i];
}
}
} }
}; };

@ -97,6 +97,9 @@ class SoftmaxOpMaker : public framework::OpProtoAndCheckerMaker {
AddAttr<bool>("use_mkldnn", AddAttr<bool>("use_mkldnn",
"(bool, default false) Only used in mkldnn kernel") "(bool, default false) Only used in mkldnn kernel")
.SetDefault(false); .SetDefault(false);
AddAttr<bool>("is_test",
"Disable epsilon adding to softmax results. Used by MKLDNN.")
.SetDefault(false);
AddComment(R"DOC( AddComment(R"DOC(
Softmax Operator. Softmax Operator.

@ -87,6 +87,7 @@ def fc(input,
bias_attr=None, bias_attr=None,
use_mkldnn=False, use_mkldnn=False,
act=None, act=None,
is_test=False,
name=None): name=None):
""" """
**Fully Connected Layer** **Fully Connected Layer**
@ -133,6 +134,7 @@ def fc(input,
bias_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for the bias bias_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for the bias
of this layer. If it is set to None, no bias will be added to the output units. of this layer. If it is set to None, no bias will be added to the output units.
act (str, default None): Activation to be applied to the output of this layer. act (str, default None): Activation to be applied to the output of this layer.
is_test(bool): A flag indicating whether execution is in test phase.
use_mkldnn(bool): Use mkldnn kernel or not, it is valid only when the mkldnn use_mkldnn(bool): Use mkldnn kernel or not, it is valid only when the mkldnn
library is installed. Default: False library is installed. Default: False
name (str, default None): The name of this layer. name (str, default None): The name of this layer.
@ -177,7 +179,9 @@ def fc(input,
"W": w}, "W": w},
outputs={"Out": tmp}, outputs={"Out": tmp},
attrs={"use_mkldnn": use_mkldnn, attrs={"use_mkldnn": use_mkldnn,
"bias_attr": bias_attr}) "is_test": is_test,
"bias_attr": bias_attr
})
return helper.append_activation(tmp) return helper.append_activation(tmp)
else: else:
for input_var, param_attr in helper.iter_inputs_and_params(): for input_var, param_attr in helper.iter_inputs_and_params():

Loading…
Cancel
Save