diff --git a/testdata/dnn/layers/lstm.hidden.B.npy b/testdata/dnn/layers/lstm.hidden.B.npy new file mode 100644 index 000000000..ca178d675 Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.B.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.R.npy b/testdata/dnn/layers/lstm.hidden.R.npy new file mode 100644 index 000000000..b4ff454c1 Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.R.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.W.npy b/testdata/dnn/layers/lstm.hidden.W.npy new file mode 100644 index 000000000..f35a32424 Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.W.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.c0.npy b/testdata/dnn/layers/lstm.hidden.c0.npy new file mode 100644 index 000000000..1f43a8dce Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.c0.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.h0.npy b/testdata/dnn/layers/lstm.hidden.h0.npy new file mode 100644 index 000000000..889bdd4ca Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.h0.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.input.npy b/testdata/dnn/layers/lstm.hidden.input.npy new file mode 100644 index 000000000..4b36d6f6f Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.input.npy differ diff --git a/testdata/dnn/layers/lstm.hidden.output.npy b/testdata/dnn/layers/lstm.hidden.output.npy new file mode 100644 index 000000000..8770791d5 Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.output.npy differ diff --git a/testdata/dnn/onnx/data/input_hidden_lstm.npy b/testdata/dnn/onnx/data/input_hidden_lstm.npy new file mode 100644 index 000000000..d0a66a994 Binary files /dev/null and b/testdata/dnn/onnx/data/input_hidden_lstm.npy differ diff --git a/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy b/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy new file mode 100644 index 000000000..406844163 Binary files /dev/null and b/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy differ diff --git a/testdata/dnn/onnx/data/output_hidden_lstm.npy b/testdata/dnn/onnx/data/output_hidden_lstm.npy new file mode 100644 index 000000000..1de0fa377 Binary files /dev/null and b/testdata/dnn/onnx/data/output_hidden_lstm.npy differ diff --git a/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy b/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy new file mode 100644 index 000000000..1b3ebdc3d Binary files /dev/null and b/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy differ diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index 234118f73..6187bbe54 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -769,6 +769,33 @@ def forward(self, x): lstm = LSTM(features, hidden, batch, bidirectional=True) save_data_and_model("lstm_bidirectional", input, lstm) + + +class HiddenLSTM(nn.Module): + def __init__(self, input_size, hidden_size, num_layers=1, is_bidirectional=False): + super().__init__() + self.hidden_size = hidden_size + self.num_layers = num_layers + self.bi_coeff = 2 if is_bidirectional else 1 + self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, + num_layers=num_layers, bidirectional=is_bidirectional) + + def forward(self, t): + h_0 = torch.ones(self.num_layers * self.bi_coeff, t.size(1), + self.hidden_size) + c_0 = torch.ones(self.num_layers * self.bi_coeff, t.size(1), + self.hidden_size) + return self.lstm(t, (h_0, c_0))[0] + +input = torch.randn(seq_len, batch, features) +hidden_lstm = HiddenLSTM(features, hidden, num_layers=3, is_bidirectional=False) +save_data_and_model("hidden_lstm", input, hidden_lstm, version=11, export_params=True) + +input = torch.randn(seq_len, batch, features) +hidden_lstm = HiddenLSTM(features, hidden, num_layers=3, is_bidirectional=True) +save_data_and_model("hidden_lstm_bi", input, hidden_lstm, version=11, export_params=True) + + class MatMul(nn.Module): def __init__(self): super(MatMul, self).__init__() diff --git a/testdata/dnn/onnx/models/hidden_lstm.onnx b/testdata/dnn/onnx/models/hidden_lstm.onnx new file mode 100644 index 000000000..62152f83c Binary files /dev/null and b/testdata/dnn/onnx/models/hidden_lstm.onnx differ diff --git a/testdata/dnn/onnx/models/hidden_lstm_bi.onnx b/testdata/dnn/onnx/models/hidden_lstm_bi.onnx new file mode 100644 index 000000000..fe5b959be Binary files /dev/null and b/testdata/dnn/onnx/models/hidden_lstm_bi.onnx differ