From 0fd701112e4911239b106165290ebd04fb971532 Mon Sep 17 00:00:00 2001 From: nihui Date: Sat, 10 Mar 2018 16:27:17 +0800 Subject: [PATCH] load LRN bias from param --- src/layer/arm/lrn_arm.cpp | 8 ++++---- src/layer/lrn.cpp | 5 +++-- src/layer/lrn.h | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/layer/arm/lrn_arm.cpp b/src/layer/arm/lrn_arm.cpp index 868e862f0..3e5dec916 100644 --- a/src/layer/arm/lrn_arm.cpp +++ b/src/layer/arm/lrn_arm.cpp @@ -130,7 +130,7 @@ int LRN_arm::forward_inplace(Mat& bottom_top_blob) const #endif // __ARM_NEON #if __ARM_NEON - float32x4_t _v1 = vdupq_n_f32(1.f); + float32x4_t _bias = vdupq_n_f32(bias); float32x4_t _ads = vdupq_n_f32(alpha_div_size); float32x4_t _mb = vdupq_n_f32(-beta); for (; nn>0; nn--) @@ -138,7 +138,7 @@ int LRN_arm::forward_inplace(Mat& bottom_top_blob) const float32x4_t _p = vld1q_f32(ptr); float32x4_t _ssp = vld1q_f32(ssptr); _ssp = vmulq_f32(_ssp, _ads); - _ssp = vaddq_f32(_ssp, _v1); + _ssp = vaddq_f32(_ssp, _bias); _ssp = pow_ps(_ssp, _mb); _p = vmulq_f32(_p, _ssp); vst1q_f32(ptr, _p); @@ -149,7 +149,7 @@ int LRN_arm::forward_inplace(Mat& bottom_top_blob) const #endif // __ARM_NEON for (; remain>0; remain--) { - *ptr = *ptr * pow(1.f + alpha_div_size * *ssptr, -beta); + *ptr = *ptr * pow(bias + alpha_div_size * *ssptr, -beta); ssptr++; ptr++; @@ -216,7 +216,7 @@ int LRN_arm::forward_inplace(Mat& bottom_top_blob) const ss += val; } - ptr[j] = ptr[j] * pow(1.f + alpha_div_size * ss, -beta); + ptr[j] = ptr[j] * pow(bias + alpha_div_size * ss, -beta); } ptr += outw; diff --git a/src/layer/lrn.cpp b/src/layer/lrn.cpp index 556a3dae2..e8edb40ba 100644 --- a/src/layer/lrn.cpp +++ b/src/layer/lrn.cpp @@ -31,6 +31,7 @@ int LRN::load_param(const ParamDict& pd) local_size = pd.get(1, 5); alpha = pd.get(2, 1.f); beta = pd.get(3, 0.75f); + bias = pd.get(4, 1.f); return 0; } @@ -90,7 +91,7 @@ int LRN::forward_inplace(Mat& bottom_top_blob) const float* ptr = bottom_top_blob.channel(q); for (int i=0; i