test_case.run();
}
-NGRAPH_TEST(${BACKEND_NAME}, lstm_cell_no_bias_no_peepholes)
-{
- DisableRemoveGOE nogoe;
- const size_t batch_size = 2;
- const size_t input_size = 3;
- const size_t hidden_size = 3;
- const size_t gates_count = 4;
-
- const auto X = make_shared<op::Parameter>(element::f32, Shape{batch_size, input_size});
- const auto W =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, input_size});
- const auto R =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, hidden_size});
- const auto H_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
- const auto C_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
-
- const auto lstm_cell =
- make_shared<op::LSTMCell>(X, H_t, C_t, W, R, hidden_size, op::LSTMWeightsFormat::IOFC);
-
- auto ht_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 0),
- ParameterVector{X, H_t, C_t, W, R});
- auto ht_test_case = test::TestCase<TestEngine>(ht_function);
- // X
- vector<float> in_X{0.81342685f, 0.84108883f, 0.8152282f, 0.46893653f, 0.0901856f, 0.37088776f};
- // W
- vector<float> in_W{3.3330739e-01f, 3.6229487e-04f, 4.6773660e-01f, 4.3046016e-01f,
- 7.3950343e-02f, 3.8063636e-01f, 9.6921772e-01f, 9.6897459e-01f,
- 6.2964785e-01f, 3.1134409e-01f, 8.4709978e-01f, 9.4928098e-01f,
- 6.1676943e-01f, 6.6020679e-01f, 1.9072217e-01f, 8.8032126e-02f,
- 4.0472135e-01f, 6.8342745e-01f, 8.3432144e-01f, 4.4928190e-01f,
- 7.9524308e-01f, 5.3966165e-01f, 8.5936421e-01f, 8.3136767e-01f,
- 5.5125546e-02f, 4.7791195e-01f, 3.5788772e-01f, 6.7507404e-01f,
- 2.1716513e-01f, 2.7473119e-01f, 3.3999152e-02f, 9.6835363e-01f,
- 3.7581277e-01f, 2.4026000e-01f, 6.7418844e-01f, 3.4199652e-01f};
- // R
- vector<float> in_R{
- 0.0987983f, 0.52032113f, 0.5848073f, 0.5356095f, 0.74497133f, 0.73260087f,
- 0.1700787f, 0.45684233f, 0.1495722f, 0.42734373f, 0.4433832f, 0.25906256f,
- 0.03854987f, 0.47480518f, 0.37215272f, 0.99890584f, 0.74019486f, 0.3518967f,
- 0.6881257f, 0.8170279f, 0.54088944f, 0.81225616f, 0.14619833f, 0.42941234f,
- 0.86843914f, 0.45967972f, 0.6237719f, 0.11074839f, 0.6029616f, 0.3149305f,
- 0.46504205f, 0.5843412f, 0.8733427f, 0.7687243f, 0.07074859f, 0.39188156f};
- // Ht
- vector<float> in_Ht{0.77956f, 0.5331557f, 0.04297554f, 0.7962175f, 0.7635707f, 0.11989366f};
- // Ct
- vector<float> in_Ct{0.8488452f, 0.18851636f, 0.5020695f, 0.29716516f, 0.06740791f, 0.45384037f};
-
- ht_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ht_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {0.81457126f, 0.61109227f, 0.769522f, 0.52239674f, 0.4324641f, 0.63183f});
- ht_test_case.run();
-
- auto ct_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 1),
- ParameterVector{X, H_t, C_t, W, R});
- auto ct_test_case = test::TestCase<TestEngine>(ct_function);
- ct_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ct_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {1.4444952f, 0.9635685f, 1.2875274f, 0.8053419f, 0.7184521f, 0.95803297f});
- ct_test_case.run();
-}
-
NGRAPH_TEST(${BACKEND_NAME}, lstm_cell_zero_bias_peepholes)
{
const size_t batch_size = 2;
ct_test_case.run();
}
-NGRAPH_TEST(${BACKEND_NAME}, lstm_cell_zero_bias_peepholes_constant)
-{
- DisableRemoveGOE nogoe;
- const size_t batch_size = 2;
- const size_t input_size = 3;
- const size_t hidden_size = 3;
- const size_t gates_count = 4;
-
- const auto X = make_shared<op::Parameter>(element::f32, Shape{batch_size, input_size});
- const auto W =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, input_size});
- const auto R =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, hidden_size});
- const auto H_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
- const auto C_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
- const auto B = make_shared<op::Constant>(
- element::f32, Shape{gates_count * hidden_size}, std::vector<float>{0.f});
- const auto P =
- make_shared<op::Constant>(element::f32, Shape{3 * hidden_size}, std::vector<float>{0.f});
-
- const auto lstm_cell = make_shared<op::LSTMCell>(
- X, H_t, C_t, W, R, B, P, hidden_size, op::LSTMWeightsFormat::IOFC);
-
- auto ht_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 0),
- ParameterVector{X, H_t, C_t, W, R});
- auto ht_test_case = test::TestCase<TestEngine>(ht_function);
-
- // X
- vector<float> in_X{0.81342685f, 0.84108883f, 0.8152282f, 0.46893653f, 0.0901856f, 0.37088776f};
- // W
- vector<float> in_W{3.3330739e-01f, 3.6229487e-04f, 4.6773660e-01f, 4.3046016e-01f,
- 7.3950343e-02f, 3.8063636e-01f, 9.6921772e-01f, 9.6897459e-01f,
- 6.2964785e-01f, 3.1134409e-01f, 8.4709978e-01f, 9.4928098e-01f,
- 6.1676943e-01f, 6.6020679e-01f, 1.9072217e-01f, 8.8032126e-02f,
- 4.0472135e-01f, 6.8342745e-01f, 8.3432144e-01f, 4.4928190e-01f,
- 7.9524308e-01f, 5.3966165e-01f, 8.5936421e-01f, 8.3136767e-01f,
- 5.5125546e-02f, 4.7791195e-01f, 3.5788772e-01f, 6.7507404e-01f,
- 2.1716513e-01f, 2.7473119e-01f, 3.3999152e-02f, 9.6835363e-01f,
- 3.7581277e-01f, 2.4026000e-01f, 6.7418844e-01f, 3.4199652e-01f};
- // R
- vector<float> in_R{
- 0.0987983f, 0.52032113f, 0.5848073f, 0.5356095f, 0.74497133f, 0.73260087f,
- 0.1700787f, 0.45684233f, 0.1495722f, 0.42734373f, 0.4433832f, 0.25906256f,
- 0.03854987f, 0.47480518f, 0.37215272f, 0.99890584f, 0.74019486f, 0.3518967f,
- 0.6881257f, 0.8170279f, 0.54088944f, 0.81225616f, 0.14619833f, 0.42941234f,
- 0.86843914f, 0.45967972f, 0.6237719f, 0.11074839f, 0.6029616f, 0.3149305f,
- 0.46504205f, 0.5843412f, 0.8733427f, 0.7687243f, 0.07074859f, 0.39188156f};
- // Ht
- vector<float> in_Ht{0.77956f, 0.5331557f, 0.04297554f, 0.7962175f, 0.7635707f, 0.11989366f};
- // Ct
- vector<float> in_Ct{0.8488452f, 0.18851636f, 0.5020695f, 0.29716516f, 0.06740791f, 0.45384037f};
-
- ht_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ht_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {0.81457126f, 0.61109227f, 0.769522f, 0.52239674f, 0.4324641f, 0.63183f});
- ht_test_case.run();
-
- auto ct_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 1),
- ParameterVector{X, H_t, C_t, W, R});
- auto ct_test_case = test::TestCase<TestEngine>(ct_function);
- ct_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ct_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {1.4444952f, 0.9635685f, 1.2875274f, 0.8053419f, 0.7184521f, 0.95803297f});
- ct_test_case.run();
-}
-
-NGRAPH_TEST(${BACKEND_NAME}, lstm_cell_fixed_no_bias_no_peepholes)
-{
- DisableRemoveGOE nogoe;
- const size_t batch_size = 2;
- const size_t input_size = 3;
- const size_t hidden_size = 3;
- const size_t gates_count = 4;
-
- const auto X = make_shared<op::Parameter>(element::f32, Shape{batch_size, input_size});
- const auto W =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, input_size});
- const auto R =
- make_shared<op::Parameter>(element::f32, Shape{gates_count * hidden_size, hidden_size});
- const auto H_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
- const auto C_t = make_shared<op::Parameter>(element::f32, Shape{batch_size, hidden_size});
-
- const auto lstm_cell =
- make_shared<op::LSTMCell>(X, H_t, C_t, W, R, hidden_size, op::LSTMWeightsFormat::IOFC);
-
- auto ht_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 0),
- ParameterVector{X, H_t, C_t, W, R});
- auto ht_test_case = test::TestCase<TestEngine>(ht_function);
-
- // X
- vector<float> in_X(batch_size * input_size, 0.5f);
- // W
- vector<float> in_W(gates_count * hidden_size * input_size, 0.25f);
- // R
- vector<float> in_R(gates_count * hidden_size * hidden_size, 0.25f);
- // Ht
- vector<float> in_Ht(batch_size * hidden_size, 0.75f);
- // Ct
- vector<float> in_Ct(batch_size * hidden_size, 0.75f);
-
- ht_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ht_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {0.56633735f, 0.56633735f, 0.56633735f, 0.56633735f, 0.56633735f, 0.56633735f});
- ht_test_case.run();
-
- auto ct_function = make_shared<Function>(make_shared<op::GetOutputElement>(lstm_cell, 1),
- ParameterVector{X, H_t, C_t, W, R});
- auto ct_test_case = test::TestCase<TestEngine>(ct_function);
- ct_test_case.add_multiple_inputs(vector<vector<float>>{in_X, in_Ht, in_Ct, in_W, in_R});
- ct_test_case.add_expected_output<float>(
- Shape{batch_size, hidden_size},
- {1.0664454f, 1.0664454f, 1.0664454f, 1.0664454f, 1.0664454f, 1.0664454f});
- ct_test_case.run();
-}
-
NGRAPH_TEST(${BACKEND_NAME}, lstm_cell_bias_peepholes)
{
const size_t batch_size = 2;