--- myst: html_meta: description: Loss functions in PyTorch C++ — CrossEntropyLoss, MSELoss, NLLLoss, BCELoss, and more. keywords: PyTorch, C++, loss, CrossEntropyLoss, MSELoss, NLLLoss, BCELoss, L1Loss --- # Loss Functions Loss functions measure how well the model's predictions match the targets. The choice of loss function depends on your task type and data characteristics. **Regression losses:** - **L1Loss/MSELoss**: Basic regression losses (MAE vs MSE) - **SmoothL1Loss/HuberLoss**: Robust to outliers **Classification losses:** - **CrossEntropyLoss**: Multi-class classification (combines LogSoftmax + NLLLoss) - **NLLLoss**: Negative log likelihood (use with LogSoftmax output) - **BCELoss/BCEWithLogitsLoss**: Binary classification **Specialized losses:** - **CTCLoss**: Sequence-to-sequence without alignment (speech recognition) - **TripletMarginLoss**: Metric learning (similarity/embedding tasks) - **CosineEmbeddingLoss**: Similarity learning with cosine distance ## L1Loss ```{doxygenclass} torch::nn::L1Loss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::L1LossImpl :members: :undoc-members: ``` ## MSELoss ```{doxygenclass} torch::nn::MSELoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::MSELossImpl :members: :undoc-members: ``` **Example:** ```cpp auto loss_fn = torch::nn::MSELoss(); auto loss = loss_fn->forward(predictions, targets); ``` ## CrossEntropyLoss ```{doxygenclass} torch::nn::CrossEntropyLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::CrossEntropyLossImpl :members: :undoc-members: ``` **Example:** ```cpp auto loss_fn = torch::nn::CrossEntropyLoss(); auto logits = torch::randn({32, 10}); // [batch, num_classes] auto targets = torch::randint(0, 10, {32}); // [batch] auto loss = loss_fn->forward(logits, targets); ``` ## NLLLoss ```{doxygenclass} torch::nn::NLLLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::NLLLossImpl :members: :undoc-members: ``` ## BCELoss ```{doxygenclass} torch::nn::BCELoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::BCELossImpl :members: :undoc-members: ``` ## BCEWithLogitsLoss ```{doxygenclass} torch::nn::BCEWithLogitsLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::BCEWithLogitsLossImpl :members: :undoc-members: ``` ## HuberLoss ```{doxygenclass} torch::nn::HuberLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::HuberLossImpl :members: :undoc-members: ``` ## SmoothL1Loss ```{doxygenclass} torch::nn::SmoothL1Loss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::SmoothL1LossImpl :members: :undoc-members: ``` ## KLDivLoss ```{doxygenclass} torch::nn::KLDivLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::KLDivLossImpl :members: :undoc-members: ``` ## CTCLoss ```{doxygenclass} torch::nn::CTCLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::CTCLossImpl :members: :undoc-members: ``` ## PoissonNLLLoss ```{doxygenclass} torch::nn::PoissonNLLLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::PoissonNLLLossImpl :members: :undoc-members: ``` ## MarginRankingLoss ```{doxygenclass} torch::nn::MarginRankingLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::MarginRankingLossImpl :members: :undoc-members: ``` ## HingeEmbeddingLoss ```{doxygenclass} torch::nn::HingeEmbeddingLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::HingeEmbeddingLossImpl :members: :undoc-members: ``` ## CosineEmbeddingLoss ```{doxygenclass} torch::nn::CosineEmbeddingLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::CosineEmbeddingLossImpl :members: :undoc-members: ``` ## MultiMarginLoss ```{doxygenclass} torch::nn::MultiMarginLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::MultiMarginLossImpl :members: :undoc-members: ``` ## MultiLabelMarginLoss ```{doxygenclass} torch::nn::MultiLabelMarginLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::MultiLabelMarginLossImpl :members: :undoc-members: ``` ## MultiLabelSoftMarginLoss ```{doxygenclass} torch::nn::MultiLabelSoftMarginLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::MultiLabelSoftMarginLossImpl :members: :undoc-members: ``` ## SoftMarginLoss ```{doxygenclass} torch::nn::SoftMarginLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::SoftMarginLossImpl :members: :undoc-members: ``` ## TripletMarginLoss ```{doxygenclass} torch::nn::TripletMarginLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::TripletMarginLossImpl :members: :undoc-members: ``` ## TripletMarginWithDistanceLoss ```{doxygenclass} torch::nn::TripletMarginWithDistanceLoss :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::TripletMarginWithDistanceLossImpl :members: :undoc-members: ```