Skip to content

Commit

Permalink
Merge pull request #9993 from jczaja/prv-softmax-mkldnn-fix
Browse files Browse the repository at this point in the history
- Added Epsilon (preventing softmax output from being too small) for softmax MKLDNN op
  • Loading branch information
luotao1 authored Apr 18, 2018
2 parents ebbc28e + de8094f commit 2617d8b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
9 changes: 9 additions & 0 deletions paddle/fluid/operators/softmax_mkldnn_op.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ class SoftmaxMKLDNNKernel : public paddle::framework::OpKernel<T> {
softmax_dst_memory);
std::vector<primitive> pipeline{softmax};
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];
}
}
}
};

Expand Down
3 changes: 3 additions & 0 deletions paddle/fluid/operators/softmax_op.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ class SoftmaxOpMaker : public framework::OpProtoAndCheckerMaker {
AddAttr<bool>("use_mkldnn",
"(bool, default false) Only used in mkldnn kernel")
.SetDefault(false);
AddAttr<bool>("is_test",
"Disable epsilon adding to softmax results. Used by MKLDNN.")
.SetDefault(false);
AddComment(R"DOC(
Softmax Operator.
Expand Down
9 changes: 7 additions & 2 deletions python/paddle/fluid/layers/nn.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ def fc(input,
bias_attr=None,
use_mkldnn=False,
act=None,
is_test=False,
name=None):
"""
**Fully Connected Layer**
Expand Down Expand Up @@ -134,6 +135,7 @@ def fc(input,
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.
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
library is installed. Default: False
name (str, default None): The name of this layer.
Expand Down Expand Up @@ -177,8 +179,11 @@ def fc(input,
inputs={"Input": input,
"W": w},
outputs={"Out": tmp},
attrs={"use_mkldnn": use_mkldnn,
"bias_attr": bias_attr})
attrs={
"use_mkldnn": use_mkldnn,
"is_test": is_test,
"bias_attr": bias_attr
})
return helper.append_activation(tmp)
else:
for input_var, param_attr in helper.iter_inputs_and_params():
Expand Down

0 comments on commit 2617d8b

Please sign in to comment.