My network input has dimension $[K, n]$ where $K$ is the number of samples, I want to create a layer that will map this vector of dimension $n$ to a matrix $[d, n]$, that is, the output of the network is $[K, d, n]$ does anyone know which nn.layer I can use? Thank you very much!
Hi Zecheng!
You can simply take the output of a Linear
that has out_features = d * n
and view()
(or reshape()
or Unflatten
) it as a batch of d x n
matrices:
>>> import torch
>>> torch.__version__
'1.11.0'
>>> K = 2
>>> n = 5
>>> d = 7
>>> input = torch.randn (K, n)
>>> torch.nn.Linear (in_features = n, out_features = d * n) (input).view (-1, d, n).shape
torch.Size([2, 7, 5])
Because Linear
is fully connected, it has the right number degrees of
freedom to generate any affine (i.e., “linear”) transformation that maps
a vector of length n
to a matrix of size d x n
. (This transformation then
gets applied sample-wise to a batch of K
samples.)
Best.
K. Frank