Hi there,

I’ve coded a model which takes a tensor `(batch_size,8,26)`

input of one-hot rows and yields a tensor `(batch_size, 8, 189)`

.

My labels are also tensors `(batch_size, 8, 189)`

of one-hot rows, so i wanted to make `preds=model(batch)`

into one-hot rows trasformin the max of the row in one and others in zeros.

So I can determine if the prediction is correct, not just the drop in loss, which I can get now.

I tried with this:

```
def MaxT1(self, batch_size, batch):
#self.mphonsl,self.phons = 8, 189, because inputs from a fc layer
batch=batch.view(batch_size,self.mphonsl,self.phons)
view=batch
batch=(view==batch.max(dim=2, keepdim=True)[0]).view_as(batch)
return batch
```

and calling it in the `.forward`

of the model as:

```
t=self.MaxT1(batch, batch_size)
```

However when calling `loss.backward()`

I get

```
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-18-f2b8b1fbff2f> in <module>
22 loss=loss(labels.float(),preds.float())
23 optimizer.zero_grad() # otherwise it keeps all gradients
---> 24 loss.backward()
25 optimizer.step()
26 tb.add_scalar('Loss', loss, epoch)
~\.conda\envs\Pytorch\lib\site-packages\torch\tensor.py in backward(self, gradient, retain_graph, create_graph)
148 products. Defaults to ``False``.
149
--> 150 torch.autograd.backward(self, gradient, retain_graph, create_graph)
151
152 def register_hook(self, hook):
~\.conda\envs\Pytorch\lib\site-packages\torch\autograd\__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
97 Variable._execution_engine.run_backward(
98 tensors, grad_tensors, retain_graph, create_graph,
---> 99 allow_unreachable=True) # allow_unreachable flag
100
101
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
```

Any idea about how can i do it differently or solve this?

Thanks in advance