diff --git a/testdata/dnn/onnx/data/input_lstm_cell_bidirectional.npy b/testdata/dnn/onnx/data/input_lstm_cell_bidirectional.npy new file mode 100644 index 000000000..c8157ca07 Binary files /dev/null and b/testdata/dnn/onnx/data/input_lstm_cell_bidirectional.npy differ diff --git a/testdata/dnn/onnx/data/input_lstm_cell_forward.npy b/testdata/dnn/onnx/data/input_lstm_cell_forward.npy new file mode 100644 index 000000000..79fec64e7 Binary files /dev/null and b/testdata/dnn/onnx/data/input_lstm_cell_forward.npy differ diff --git a/testdata/dnn/onnx/data/input_lstm_cell_with_peepholes.npy b/testdata/dnn/onnx/data/input_lstm_cell_with_peepholes.npy new file mode 100644 index 000000000..2078f9ab2 Binary files /dev/null and b/testdata/dnn/onnx/data/input_lstm_cell_with_peepholes.npy differ diff --git a/testdata/dnn/onnx/data/output_lstm_cell_bidirectional.npy b/testdata/dnn/onnx/data/output_lstm_cell_bidirectional.npy new file mode 100644 index 000000000..6e3d96038 Binary files /dev/null and b/testdata/dnn/onnx/data/output_lstm_cell_bidirectional.npy differ diff --git a/testdata/dnn/onnx/data/output_lstm_cell_forward.npy b/testdata/dnn/onnx/data/output_lstm_cell_forward.npy new file mode 100644 index 000000000..c022b9fa2 Binary files /dev/null and b/testdata/dnn/onnx/data/output_lstm_cell_forward.npy differ diff --git a/testdata/dnn/onnx/data/output_lstm_cell_with_peepholes.npy b/testdata/dnn/onnx/data/output_lstm_cell_with_peepholes.npy new file mode 100644 index 000000000..a2d0e2777 Binary files /dev/null and b/testdata/dnn/onnx/data/output_lstm_cell_with_peepholes.npy differ diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index b930c84d2..93e8874ff 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -859,6 +859,39 @@ def forward(self, t): save_data_and_model("hidden_lstm_bi", input, hidden_lstm, version=11, export_params=True) +batch = 5 +features = 4 +hidden = 3 +seq_len = 2 +num_layers=1 +bidirectional=True + +class LSTM(nn.Module): + + def __init__(self): + super(LSTM, self).__init__() + self.lstm = nn.LSTM(features, hidden, num_layers, bidirectional=bidirectional) + self.h0 = torch.from_numpy(np.ones((num_layers + int(bidirectional), batch, hidden), dtype=np.float32)) + self.c0 = torch.from_numpy(np.ones((num_layers + int(bidirectional), batch, hidden), dtype=np.float32)) + + def forward(self, x): + a, (b, c) = self.lstm(x, (self.h0, self.c0)) + if bidirectional: + return torch.cat((a, b, c), dim=2) + else: + return torch.cat((a, b, c), dim=0) + + +input_ = Variable(torch.randn(seq_len, batch, features)) +lstm = LSTM() +save_data_and_model("lstm_cell_bidirectional", input_, lstm, export_params=True) + +bidirectional = False +input_ = Variable(torch.randn(seq_len, batch, features)) +lstm = LSTM() +save_data_and_model("lstm_cell_forward", input_, lstm, export_params=True) + + class MatMul(nn.Module): def __init__(self): super(MatMul, self).__init__() diff --git a/testdata/dnn/onnx/models/lstm_cell_bidirectional.onnx b/testdata/dnn/onnx/models/lstm_cell_bidirectional.onnx new file mode 100644 index 000000000..dd848028f Binary files /dev/null and b/testdata/dnn/onnx/models/lstm_cell_bidirectional.onnx differ diff --git a/testdata/dnn/onnx/models/lstm_cell_forward.onnx b/testdata/dnn/onnx/models/lstm_cell_forward.onnx new file mode 100644 index 000000000..f80bb75f4 Binary files /dev/null and b/testdata/dnn/onnx/models/lstm_cell_forward.onnx differ diff --git a/testdata/dnn/onnx/models/lstm_cell_with_peepholes.onnx b/testdata/dnn/onnx/models/lstm_cell_with_peepholes.onnx new file mode 100644 index 000000000..32b019284 Binary files /dev/null and b/testdata/dnn/onnx/models/lstm_cell_with_peepholes.onnx differ