- Deep Learning with PyTorch
- Vishnu Subramanian
- 437字
- 2021-06-24 19:16:28
Loss functions
Once we have defined our network architecture, we are left with two important steps. One is calculating how good our network is at performing a particular task of regression, classification, and the next is optimizing the weight.
The optimizer (gradient descent) generally accepts a scalar value, so our loss function should generate a scalar value that has to be minimized during our training. Certain use cases, such as predicting where an obstacle is on the road and classifying it to a pedestrian or not, would require two or more loss functions. Even in such scenarios, we need to combine the losses to a single scalar for the optimizer to minimize. We will discuss examples of combining multiple losses to a single scalar in detail with a real-world example in the last chapter.
In the previous chapter, we defined our own loss function. PyTorch provides several implementations of commonly used loss functions. Let's take a look at the loss functions used for regression and classification.
The commonly used loss function for regression problems is mean square error (MSE). It is the same loss function we implemented in our previous chapter. We can use the loss function implemented in PyTorch, as follows:
loss = nn.MSELoss()
input = Variable(torch.randn(3, 5), requires_grad=True)
target = Variable(torch.randn(3, 5))
output = loss(input, target)
output.backward()
For classification, we use a cross-entropy loss. Before looking at the math for cross-entropy, let's understand what a cross-entropy loss does. It calculates the loss of a classification network predicting the probabilities, which should sum up to one, like our softmax layer. A cross-entropy loss increases when the predicted probability diverges from the correct probability. For example, if our classification algorithm predicts 0.1 probability for the following image to be a cat, but it is actually a panda, then the cross-entropy loss will be higher. If it predicts similar to the actual labels, then the cross-entropy loss will be lower:

Let's look at a sample implementation of how this actually happens in Python code:
def cross_entropy(true_label, prediction): if true_label == 1: return -log(prediction) else: return -log(1 - prediction)
To use a cross-entropy loss in a classification problem, we really do not need to be worried about what happens inside—all we have to remember is that, the loss will be high when our predictions are bad and low when predictions are good. PyTorch provides us with an implementation of the loss, which we can use, as follows:
loss = nn.CrossEntropyLoss()
input = Variable(torch.randn(3, 5), requires_grad=True)
target = Variable(torch.LongTensor(3).random_(5))
output = loss(input, target)
output.backward()
Some of the other loss functions that come as part of PyTorch are as follows:

- Arduino入門基礎教程
- Linux KVM虛擬化架構實戰指南
- 深入淺出SSD:固態存儲核心技術、原理與實戰
- Mastering Manga Studio 5
- Artificial Intelligence Business:How you can profit from AI
- OUYA Game Development by Example
- 面向對象分析與設計(第3版)(修訂版)
- Creating Flat Design Websites
- 單片機系統設計與開發教程
- 筆記本電腦應用技巧
- “硬”核:硬件產品成功密碼
- Blender Game Engine:Beginner's Guide
- The Machine Learning Workshop
- 超炫的35個Arduino制作項目
- Mastering TensorFlow 1.x