diff --git a/testdata/dnn/layers/gru.B.npy b/testdata/dnn/layers/gru.B.npy new file mode 100644 index 000000000..aa442683c Binary files /dev/null and b/testdata/dnn/layers/gru.B.npy differ diff --git a/testdata/dnn/layers/gru.R.npy b/testdata/dnn/layers/gru.R.npy new file mode 100644 index 000000000..3321ad025 Binary files /dev/null and b/testdata/dnn/layers/gru.R.npy differ diff --git a/testdata/dnn/layers/gru.W.npy b/testdata/dnn/layers/gru.W.npy new file mode 100644 index 000000000..6d3cc3090 Binary files /dev/null and b/testdata/dnn/layers/gru.W.npy differ diff --git a/testdata/dnn/layers/gru.h0.npy b/testdata/dnn/layers/gru.h0.npy new file mode 100644 index 000000000..889bdd4ca Binary files /dev/null and b/testdata/dnn/layers/gru.h0.npy differ diff --git a/testdata/dnn/layers/gru.input.npy b/testdata/dnn/layers/gru.input.npy new file mode 100644 index 000000000..4b36d6f6f Binary files /dev/null and b/testdata/dnn/layers/gru.input.npy differ diff --git a/testdata/dnn/layers/gru.output.npy b/testdata/dnn/layers/gru.output.npy new file mode 100644 index 000000000..0bc90b580 Binary files /dev/null and b/testdata/dnn/layers/gru.output.npy differ diff --git a/testdata/dnn/onnx/data/input_gru.npy b/testdata/dnn/onnx/data/input_gru.npy new file mode 100644 index 000000000..d0a66a994 Binary files /dev/null and b/testdata/dnn/onnx/data/input_gru.npy differ diff --git a/testdata/dnn/onnx/data/input_gru_bi.npy b/testdata/dnn/onnx/data/input_gru_bi.npy new file mode 100644 index 000000000..54a762197 Binary files /dev/null and b/testdata/dnn/onnx/data/input_gru_bi.npy differ diff --git a/testdata/dnn/onnx/data/output_gru.npy b/testdata/dnn/onnx/data/output_gru.npy new file mode 100644 index 000000000..5058a0b39 Binary files /dev/null and b/testdata/dnn/onnx/data/output_gru.npy differ diff --git a/testdata/dnn/onnx/data/output_gru_bi.npy b/testdata/dnn/onnx/data/output_gru_bi.npy new file mode 100644 index 000000000..949bf112c Binary files /dev/null and b/testdata/dnn/onnx/data/output_gru_bi.npy differ diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index 6187bbe54..6d038a77b 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -796,6 +796,29 @@ def forward(self, t): save_data_and_model("hidden_lstm_bi", input, hidden_lstm, version=11, export_params=True) +class GRU(nn.Module): + def __init__(self, input_size, hidden_size, num_layers=2, 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.gru = nn.GRU(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) + return self.gru(t, h_0)[0] + +input = torch.randn(seq_len, batch, features) +hidden_lstm = GRU(features, hidden, num_layers=3, is_bidirectional=False) +save_data_and_model("gru", input, hidden_lstm, version=11, export_params=True) + +input = torch.randn(seq_len, batch, features) +hidden_lstm = GRU(features, hidden, num_layers=3, is_bidirectional=True) +save_data_and_model("gru_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/gru.onnx b/testdata/dnn/onnx/models/gru.onnx new file mode 100644 index 000000000..a8ae6a0cf Binary files /dev/null and b/testdata/dnn/onnx/models/gru.onnx differ diff --git a/testdata/dnn/onnx/models/gru_bi.onnx b/testdata/dnn/onnx/models/gru_bi.onnx new file mode 100644 index 000000000..8876bf8bc Binary files /dev/null and b/testdata/dnn/onnx/models/gru_bi.onnx differ