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.