| @@ -41,9 +41,10 @@ ScaleFP32Coder::~ScaleFP32Coder() { | |||||
| int ScaleFP32Coder::InitScaleOffset() { | int ScaleFP32Coder::InitScaleOffset() { | ||||
| Tensor *scale_tensor = input_tensors_.at(kWeightIndex); | Tensor *scale_tensor = input_tensors_.at(kWeightIndex); | ||||
| MS_CHECK_PTR(scale_tensor); | MS_CHECK_PTR(scale_tensor); | ||||
| if (reinterpret_cast<float *>(scale_tensor->data_c())) { | |||||
| if (scale_tensor->data_c() != nullptr) { | |||||
| scale_param_->const_scale_ = true; | scale_param_->const_scale_ = true; | ||||
| scale_ = reinterpret_cast<float *>(malloc(scale_tensor->ElementsNum() * sizeof(float))); | |||||
| scale_ = | |||||
| reinterpret_cast<float *>(allocator_->Malloc(kNumberTypeFloat32, scale_tensor->Size(), kOfflinePackWeight)); | |||||
| MS_CHECK_PTR(scale_); | MS_CHECK_PTR(scale_); | ||||
| MS_CHECK_TRUE(scale_tensor->Size() > 0, "invalid scale tensor size"); | MS_CHECK_TRUE(scale_tensor->Size() > 0, "invalid scale tensor size"); | ||||
| MS_CHECK_RET_CODE(memcpy_s(scale_, scale_tensor->Size(), scale_tensor->data_c(), scale_tensor->Size()), | MS_CHECK_RET_CODE(memcpy_s(scale_, scale_tensor->Size(), scale_tensor->data_c(), scale_tensor->Size()), | ||||
| @@ -55,13 +56,16 @@ int ScaleFP32Coder::InitScaleOffset() { | |||||
| if (input_tensors_.size() == 2) { | if (input_tensors_.size() == 2) { | ||||
| scale_param_->const_offset_ = true; | scale_param_->const_offset_ = true; | ||||
| offset_ = reinterpret_cast<float *>(malloc(scale_tensor->ElementsNum() * sizeof(float))); | |||||
| offset_ = | |||||
| reinterpret_cast<float *>(allocator_->Malloc(kNumberTypeFloat32, scale_tensor->Size(), kOfflinePackWeight)); | |||||
| MS_CHECK_PTR(offset_); | MS_CHECK_PTR(offset_); | ||||
| MS_CHECK_RET_CODE(memset_s(offset_, scale_tensor->Size(), 0, scale_tensor->Size()), "memset_s failed!"); | MS_CHECK_RET_CODE(memset_s(offset_, scale_tensor->Size(), 0, scale_tensor->Size()), "memset_s failed!"); | ||||
| } else if (input_tensors_.size() == 3 && reinterpret_cast<float *>(input_tensors_.at(2)->data_c())) { | |||||
| } else if (input_tensors_.size() == 3 && input_tensors_.at(2)->data_c() != nullptr) { | |||||
| scale_param_->const_offset_ = true; | scale_param_->const_offset_ = true; | ||||
| Tensor *offset_tensor = input_tensors_.at(2); | Tensor *offset_tensor = input_tensors_.at(2); | ||||
| offset_ = reinterpret_cast<float *>(malloc(offset_tensor->ElementsNum() * sizeof(float))); | |||||
| MS_CHECK_PTR(offset_tensor); | |||||
| offset_ = | |||||
| reinterpret_cast<float *>(allocator_->Malloc(kNumberTypeFloat32, offset_tensor->Size(), kOfflinePackWeight)); | |||||
| MS_CHECK_PTR(offset_); | MS_CHECK_PTR(offset_); | ||||
| MS_CHECK_TRUE(offset_tensor->Size() > 0, "invalid offset tensor size"); | MS_CHECK_TRUE(offset_tensor->Size() > 0, "invalid offset tensor size"); | ||||
| MS_CHECK_RET_CODE(memcpy_s(offset_, offset_tensor->Size(), offset_tensor->data_c(), offset_tensor->Size()), | MS_CHECK_RET_CODE(memcpy_s(offset_, offset_tensor->Size(), offset_tensor->data_c(), offset_tensor->Size()), | ||||
| @@ -123,10 +127,6 @@ int ScaleFP32Coder::ReSize() { | |||||
| int ScaleFP32Coder::DoCode(CoderContext *const context) { | int ScaleFP32Coder::DoCode(CoderContext *const context) { | ||||
| // init struct ScaleParameters | // init struct ScaleParameters | ||||
| Tensor *scale_tensor = input_tensors_.at(kWeightIndex); | |||||
| Tensor *offset_tensor = input_tensors_.at(kBiasIndex); | |||||
| MS_CHECK_PTR(scale_tensor); | |||||
| MS_CHECK_PTR(offset_tensor); | |||||
| Collect(context, | Collect(context, | ||||
| { | { | ||||
| "nnacl/scale.h", | "nnacl/scale.h", | ||||
| @@ -141,16 +141,15 @@ int ScaleFP32Coder::DoCode(CoderContext *const context) { | |||||
| switch (scale_param_->activation_type_) { | switch (scale_param_->activation_type_) { | ||||
| case schema::ActivationType_RELU6: | case schema::ActivationType_RELU6: | ||||
| code.CodeFunction("DoScaleRelu6", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, | |||||
| code.CodeFunction("DoScaleRelu6", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, | |||||
| "&scale_parameter"); | "&scale_parameter"); | ||||
| break; | break; | ||||
| case schema::ActivationType_RELU: | case schema::ActivationType_RELU: | ||||
| code.CodeFunction("DoScaleRelu", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, | |||||
| code.CodeFunction("DoScaleRelu", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, | |||||
| "&scale_parameter"); | "&scale_parameter"); | ||||
| break; | break; | ||||
| case schema::ActivationType_NO_ACTIVATION: | case schema::ActivationType_NO_ACTIVATION: | ||||
| code.CodeFunction("DoScale", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, | |||||
| "&scale_parameter"); | |||||
| code.CodeFunction("DoScale", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, "&scale_parameter"); | |||||
| break; | break; | ||||
| default: | default: | ||||
| MS_LOG(ERROR) << "Scale does not support activation type " << scale_param_->activation_type_; | MS_LOG(ERROR) << "Scale does not support activation type " << scale_param_->activation_type_; | ||||