# Attention Between 3D Matrix and a vector

Hi,

I’m trying to implement channel attention. I have a matrix of shape NxCxWxH where N is batch size, C is channels, W width, H height and a vector of size NxC. I’m trying to perform a multipication between them.
I already tried to x * y, torch.matmul(x, y) x * y.expand_as(y) but they all resulted in an error that there is a dimension mismatch.
How can I implement it?
Thanks

There are many ways to achieve it. One of the easy ways to multiply tensors with multiple dimensions is to make use of `torch.einsum()`.

In your case, you can code something like below:

``````N,C,H,W = 2,3,4,5

import torch
x = torch.randn(N,C,H,W)
y = torch.randn(N,C)
torch.einsum('bchw,bc->bhw', x, y)
``````

Thanks! However I need the output to be in shape (N, C, H, W), like the first input.

use `torch.unsqueeze(dim=1)` to introduce a singleton dimension after the multiplication.

``````result = torch.einsum('bchw,bc->bhw', x, y) # b,h,w
result = result.unsqueeze(dim=1)  # b,1,h,w
``````

You can look at `torch.Tensor` API page to know the different functions available to manipulate a tensor.