Issue with the exp layer when the base is e #3937

Merged
merged 1 commit into from Apr 8, 2016
Jump to file or symbol
Failed to load files and symbols.
+22 −1
Split
@@ -23,7 +23,8 @@ void ExpLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
const Dtype input_scale = this->layer_param_.exp_param().scale();
const Dtype input_shift = this->layer_param_.exp_param().shift();
inner_scale_ = log_base * input_scale;
- outer_scale_ = (input_shift == Dtype(0)) ? Dtype(1) : pow(base, input_shift);
+ outer_scale_ = (input_shift == Dtype(0)) ? Dtype(1) :
+ ( (base != Dtype(-1)) ? pow(base, input_shift) : exp(input_shift) );
}
template <typename Dtype>
@@ -394,6 +394,26 @@ TYPED_TEST(NeuronLayerTest, TestExpGradient) {
this->TestExpGradient(kBase, kScale, kShift);
}
+TYPED_TEST(NeuronLayerTest, TestExpLayerWithShift) {
+ typedef typename TypeParam::Dtype Dtype;
+ // Test default base of "-1" -- should actually set base := e,
+ // with a non-zero shift
+ const Dtype kBase = -1;
+ const Dtype kScale = 1;
+ const Dtype kShift = 1;
+ this->TestExpForward(kBase, kScale, kShift);
+}
+
+TYPED_TEST(NeuronLayerTest, TestExpGradientWithShift) {
+ typedef typename TypeParam::Dtype Dtype;
+ // Test default base of "-1" -- should actually set base := e,
+ // with a non-zero shift
+ const Dtype kBase = -1;
+ const Dtype kScale = 1;
+ const Dtype kShift = 1;
+ this->TestExpGradient(kBase, kScale, kShift);
+}
+
TYPED_TEST(NeuronLayerTest, TestExpLayerBase2) {
typedef typename TypeParam::Dtype Dtype;
const Dtype kBase = 2;