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>
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;