I want to create a function that takes a batch of inputs
X and a set of coeffs
C and then multiply each element of the batch
X[i] by the corresponding coeff
C[i]. One has
X.shape = (B, N1, ..., Nn) and
C.shape = (B).
To do so, I want to unsqueeze
C so that it is broadcastable with
X and then return
C * X. However I want my function to accept any shape while
X.size(0) == C.size(0) so I cannot predict how many times I must unsqueeze the last dimension of
C. What would be the best way to do so?
You don’t need to call
unsqueeze() so many times.
Assuming X and C are like below
X = torch.rand(2, 3, 4, 5) # [B, N1, N2, N3] C = torch.rand(2) # [B] B = C.size(0) C = C.unsqueeze(1) # [B, 1] C_expand = C.expand_as(X.view(B, -1)) # [B, N1 x N2 x N3] C_new = C.view_as(X) # [B, N1, N2, N3]
Now then you can do what you want
Oh I see the trick now, thanks a lot! I was so obsessed by this
unsqueeze that I forgot I could just expand my tensor without additional memory usage…