@@ -54,7 +54,13 @@ INSTANTIATE_TEST_SUITE_P(
5454 std::make_tuple (basic_data2,
5555 EWLayerImpl<double >({2 , 2 }, " linear" , 2 .0F , 1 .0F ),
5656 std::vector<double>({3.0 , -1.0 , 5.0 , -3.0 }),
57- std::function<double(double )>())));
57+ std::function<double(double )>()),
58+ std::make_tuple(std::vector<double >({0.0 , 1.0 , -1.0 }),
59+ EWLayerImpl<double>({3 }, " sigmoid" ),
60+ std::vector<double>(),
61+ std::function<double(double )>([](double x) {
62+ return 1.0 / (1.0 + std::exp (-x));
63+ }))));
5864
5965TEST (ewlayer, new_ewlayer_can_relu_float) {
6066 EWLayer layer (" relu" );
@@ -100,3 +106,19 @@ TEST(ewlayer, new_ewlayer_throws_with_invalid_function) {
100106TEST (ewlayer, get_layer_name) {
101107 EXPECT_EQ (EWLayer::get_name (), " Element-wise layer" );
102108}
109+
110+ TEST (ewlayer, new_ewlayer_can_sigmoid_float) {
111+ EWLayer layer (" sigmoid" );
112+ Tensor input = make_tensor<float >({0 .0F , -1 .0F , 1 .0F , 2 .0F });
113+ Tensor output;
114+ std::vector<float > expected_output = {
115+ 0 .5F ,
116+ 1 .0F / (1 .0F + std::exp (1 .0F )),
117+ 1 .0F / (1 .0F + std::exp (-1 .0F )),
118+ 1 .0F / (1 .0F + std::exp (-2 .0F ))
119+ };
120+ layer.run (input, output);
121+ for (size_t i = 0 ; i < 4 ; i++) {
122+ EXPECT_NEAR ((*output.as <float >())[i], expected_output[i], 1e-5F );
123+ }
124+ }
0 commit comments