Hello to all!
I’m trying to export a trained GRU as ONNX. As I want to test it online (take each timestep in a loop and hand over hidden state), I would like to have a fixed input length of 1. With batch_first=True I use an input tensor of size (batch_sz=1, seq_len=1, feat=10). When I try to export the ONNX I get the Warning:
"/Users//miniforge3/envs/arm_native/lib/python3.9/site-packages/torch/onnx/symbolic_opset9.py:1909: UserWarning: Exporting a model to ONNX with a batch_size other than 1, with a variable length with GRU can cause an error when running the ONNX model with a different batch size. Make sure to save the model with a batch size of 1, or define the initial states (h0/c0) as inputs of the model.
warnings.warn("Exporting a model to ONNX with a batch_size other than 1, " + "
What am I doing wrong? I also tried to set dynamic axis for the input-length, with no effect.
I can’t find any examples for exporting recurrent nets, only old workarounds for when torch didn’t support this feature.
import torch class Test(torch.nn.Module): def __init__(self): super().__init__() self.net = torch.nn.GRU(input_size=10, hidden_size=5, num_layers=2, batch_first=True) self.net.eval() def forward(self, x, h): return self.net(x, h) m = Test() _x = torch.rand((1, 1, 10)) _h = torch.rand((2, 1, 5)) _out, _h_n = m(_x, _h) torch.onnx.export(m, (_x, _h), 'def.onnx', export_params=True)