DataLoader can’t take tuples of tensors when the tensors are in different shapes

sajfb: <p>I’m currently working with a PyTorch model that has multiple tensor inputs. The first dimension of the tensors varies from sample to sample, and the second dimension remains fixed across all samples. To feed these tensors into the model, I’m using PyTorch’s <code>DataLoader</code>. Unfortunately, the <code>DataLoader</code> can’t handle tensors of varying sizes. Digging into the problem, I discovered that the <code>DataLoader</code> leverages the <code>torch.stack</code> function to batch data, and this function doesn’t support tensors of different shapes, which is causing issues with my implementation. Adding to the challenge is the fact that my data is already too sparse which making padding an unsuitable solution. I’m eager to hear any suggestions or solutions to this issue.</p>
<p>This is a subset of my data:</p>
<p>[((5, 4130, [1190, 1690, 3690, 2190, 690], 1.3434846529918303, array([0.36630037, 0.31868132, 0.22344322, 0.06227106, 0.02930403])), array([ 5.0804    ,  1.        ,  1.        , 37.3       ,  7.        ,<br>
0.        ,  0.        ,  0.88888889,  0.53433167,  2.68817327])), ((7, 4630, [4190, 1690, 2190, 1190, 690, 2690, 4630], 1.6237995404291592, array([0.26954178, 0.2425876 , 0.20485175, 0.20215633, 0.04312668,<br>
0.0296496 , 0.00808625])), array([ 5.7157    ,  1.        ,  1.        , 37.3       ,  8.        ,<br>
0.        ,  0.        ,  0.9       ,  0.42166914,  2.71347378])), ((8, 5130, [4690, 2190, 1190, 1690, 2690, 690, 3190, 5130], 1.7329349406273264, array([0.2994012 , 0.19461078, 0.17964072, 0.1497006 , 0.12275449,<br>
0.03592814, 0.01197605, 0.00598802])), array([ 6.351     ,  1.        ,  1.        , 37.3       ,  9.        ,<br>
0.        ,  0.        ,  0.90909091,  0.33192181,  2.74668001])), ((9, 5630, [5190, 2690, 2190, 1690, 1190, 3190, 690, 3690, 5630], 1.8170489183610905, array([0.34843206, 0.1533101 , 0.14982578, 0.12891986, 0.09059233,<br>
0.07665505, 0.03484321, 0.01045296, 0.00696864])), array([ 6.9863    ,  1.        ,  1.        , 37.3       , 10.        ,<br>
0.        ,  0.        ,  0.91666667,  0.26990547,  2.78667036])), ((9, 6130, [5690, 1190, 1690, 2690, 2190, 3190, 3690, 690, 6130], 1.8265636837655168, array([0.35335689, 0.19081272, 0.1130742 , 0.1024735 , 0.09540636,<br>
0.08127208, 0.03533569, 0.02120141, 0.00706714])), array([ 7.6216    ,  1.        ,  1.        , 37.3       , 11.        ,<br>
0.        ,  0.        ,  0.92307692,  0.23112829,  2.83256212])), ((10, 6629, [6190, 1190, 1690, 2190, 2690, 3190, 3690, 4190, 690, 6629], 1.8142003052692015, array([0.41841004, 0.14644351, 0.11297071, 0.08368201, 0.07531381,<br>
0.06276151, 0.05439331, 0.0251046 , 0.0125523 , 0.0083682 ])), array([ 8.2569    ,  1.        ,  1.        , 37.3       , 12.        ,<br>
0.        ,  0.        ,  0.92857143,  0.20705395,  2.88364707]))]<br>
My initial solution was to create an indexing function to group samples with the same tensor size into a list. However, the <code>DataLoader</code> throws an error when fed tuples, even though this solution worked with only tensor inputs.</p>

ptrblck: <p>Collecting samples with the same or similar size might be a good idea and <a class="mention" href="/u/vdw">@vdw</a> shared some ideas and experiments <a href="https://discuss.pytorch.org/t/using-batches-for-seq2seq-models/55205">here</a>.</p>