Remove additional message

fea/docker_cudnn7
mozga-intel 7 years ago
parent 34a8084328
commit 32f8ac7d3b

@ -23,67 +23,56 @@ namespace operators {
using paddle::framework::Tensor; using paddle::framework::Tensor;
using paddle::platform::MKLDNNDeviceContext; using paddle::platform::MKLDNNDeviceContext;
struct MKLDNNMatrixSize final {
explicit MKLDNNMatrixSize(const std::vector<int>& in,
const std::vector<int>& w)
: mb{in[0]}, ic{in[1]}, oc{w[1]}, h{in[2]}, w{in[3]} {}
bool is_spatial() const { return h > 2 && w > 2; }
const int mb;
const int ic;
const int oc;
const int h, w;
};
template <typename T> template <typename T>
class MKLDNNMD { class MKLDNNMD {
public: public:
explicit MKLDNNMD(const T* in, const T* w, bool bias) explicit MKLDNNMD(const T* in, const T* w, bool bias)
: sz_(std::unique_ptr<MKLDNNMatrixSize>(new MKLDNNMatrixSize( : in{paddle::framework::vectorize2int(in->dims())},
paddle::framework::vectorize2int(in->dims()), w{paddle::framework::vectorize2int(w->dims())} {
paddle::framework::vectorize2int(w->dims())))) {
with_bias_ = bias; with_bias_ = bias;
} }
mkldnn::memory::desc dst() const { mkldnn::memory::desc dst() const {
return platform::MKLDNNMemDesc({sz_->mb, sz_->oc}, return platform::MKLDNNMemDesc({in[0], w[1]},
mkldnn::memory::data_type::f32, mkldnn::memory::data_type::f32,
mkldnn::memory::format::nc); mkldnn::memory::format::nc);
} }
mkldnn::memory::desc src() const { mkldnn::memory::desc src() const {
return sz_->is_spatial() return is_spatial()
? platform::MKLDNNMemDesc({sz_->mb, sz_->ic, sz_->h, sz_->w}, ? platform::MKLDNNMemDesc({in[0], in[1], in[2], in[3]},
mkldnn::memory::data_type::f32, mkldnn::memory::data_type::f32,
mkldnn::memory::format::nchw) mkldnn::memory::format::nchw)
: platform::MKLDNNMemDesc({sz_->mb, sz_->ic}, : platform::MKLDNNMemDesc({in[0], in[1]},
mkldnn::memory::data_type::f32, mkldnn::memory::data_type::f32,
mkldnn::memory::format::nc); mkldnn::memory::format::nc);
} }
mkldnn::memory::desc weights() const { mkldnn::memory::desc weights() const {
return sz_->is_spatial() return is_spatial()
? platform::MKLDNNMemDesc({sz_->oc, sz_->ic, sz_->h, sz_->w}, ? platform::MKLDNNMemDesc({w[1], in[1], in[2], in[3]},
mkldnn::memory::data_type::f32, mkldnn::memory::data_type::f32,
mkldnn::memory::format::oihw) mkldnn::memory::format::oihw)
: platform::MKLDNNMemDesc({sz_->oc, sz_->ic}, : platform::MKLDNNMemDesc({w[1], in[1]},
mkldnn::memory::data_type::f32, mkldnn::memory::data_type::f32,
mkldnn::memory::format::oi); mkldnn::memory::format::oi);
} }
mkldnn::memory::desc bias() const { mkldnn::memory::desc bias() const {
return with_bias_ return with_bias_
? platform::MKLDNNMemDesc({sz_->oc}, ? platform::MKLDNNMemDesc({w[1]}, mkldnn::memory::data_type::f32,
mkldnn::memory::data_type::f32,
mkldnn::memory::format::format_undef) mkldnn::memory::format::format_undef)
: platform::MKLDNNMemDesc({}, mkldnn::memory::data_type::f32, : platform::MKLDNNMemDesc({}, mkldnn::memory::data_type::f32,
mkldnn::memory::format::format_undef); mkldnn::memory::format::format_undef);
} }
private: private:
std::unique_ptr<MKLDNNMatrixSize> sz_; bool is_spatial() const { return in.size() > 1 && w.size() > 1; }
std::vector<int> in;
std::vector<int> w;
bool with_bias_; bool with_bias_;
bool is_spatial_;
}; };
class MKLDNNMemory { class MKLDNNMemory {

@ -29,8 +29,8 @@ void FCOp::InferShape(framework::InferShapeContext* ctx) const {
auto w_dims = ctx->GetInputDim("W"); auto w_dims = ctx->GetInputDim("W");
std::vector<int64_t> output_shape({in_dims[0], w_dims[1]}); std::vector<int64_t> output_shape({in_dims[0], w_dims[1]});
PADDLE_ENFORCE(in_dims.size() == 4, PADDLE_ENFORCE(in_dims.size() == 4 || in_dims.size() == 2,
"Fully Connected input should be 4-D tensor."); "Fully Connected input should be 2-D or 4-D tensor.");
PADDLE_ENFORCE(w_dims.size() == 2, PADDLE_ENFORCE(w_dims.size() == 2,
"Fully Connected input should be 2-D tensor."); "Fully Connected input should be 2-D tensor.");
@ -96,22 +96,11 @@ FCOpMaker::FCOpMaker(OpProto* proto, OpAttrChecker* op_checker)
The fully connected operation calculates the output based on the input, weights and bias attribute. The fully connected operation calculates the output based on the input, weights and bias attribute.
The size of each dimension of the parameters checked in the infer-shape. The size of each dimension of the parameters checked in the infer-shape.
Input(Input) is NCHW or NC format. Where N is batch size, C is the number of channels,
H is the height of the feature, and W is the width of the feature.
Weights(W) is OIHW or OI format. Where H is the height of the feature, W is the width of the feature,
O is the height of output, and I is the number of channels.
Output(Out) is NC format. Where N is batch size, and C is the number of channels.
The matrix of bias is generated by the mkldnn framework, when the bias_attr is True. The matrix of bias is generated by the mkldnn framework, when the bias_attr is True.
Additional parametrs are use_mkldnn and bias_attr. Additional parametrs are use_mkldnn and bias_attr.
The input(X) size and output(Out) size may be diffrent. The input(X) size and output(Out) size may be diffrent.
Example: The fully connected layer only supports MKLDNN version
Input:
Input shape: $(N, C_{in}, H_{in}, W_{in})$
Weight shape: $(O_{out}, I_{in}, H_{in}, W_{in})$
Bias shape: $(O_{out})$
Output:
Output shape: $(N, C_{out})$
)DOC"); )DOC");
} }

@ -167,8 +167,9 @@ def fc(input,
shape=param_shape, shape=param_shape,
dtype=dtype, dtype=dtype,
is_bias=False) is_bias=False)
bias_attr = False if bias_attr is None or bias_attr is False:
if bias_attr is not None: bias_attr = False
else:
bias_attr = True bias_attr = True
helper.append_op( helper.append_op(
type="fc", type="fc",

Loading…
Cancel
Save