# Custom loss function: what I do wrong?

Hello! I am trying to add a Gaussian penalty to the MSE loss function:

``````def g_p(inp_, mu, sigma):
pi=torch.acos(torch.Tensor([-1]))
norm= 1/(sigma*torch.sqrt(2*pi))
exp_= torch.pow((inp_-mu)/sigma, 2)
exp=torch.exp(-exp_/2)
return norm*exp

def GP_loss(pred, target):
return F.mse_loss(pred, target) + g_p(pred, torch.Tensor(), torch.Tensor([0.04]))
``````

As response, while training the model I get the error:

``````TypeError: unsupported format string passed to Tensor.__format__
``````

What am I doing wrong?

Thank you guys!

1 Like

Hi i not sure what is wrong but would suggest that you use typed tensor (FloatTensor, LongTensor etc) in order to make it easier to pinpoint the problem

I found the problem. It’s a bug in `basic_train.py`, class `Recorder`, function ‘on_backward_begin’.

Tensors are not ready to be used in the f-string Python format. So changing:

``````#######self.pbar.child.comment = f'{smooth_loss:.4f}'
self.pbar.child.comment = "\$2.3f"%smooth_loss
``````

Solves the issue. Thank you anyway, @Kaspar !

@VLavorini

Pytorch Tensors do support f-strings.

Your loss function doesn’t return a scalar (zero dimensional) tensor and therefore cannot be formatted with the format expression: `.4f`.

You might find it helpful to check out the FlattenedLoss class to understand the fast.ai library’s approach to implementing loss functions.

2 Likes