SVM¶
Description¶
The SVM loss function, which is an extension of the classical Hinge-loss to multiclass classification problems, implements the “one against all” principle.
For the error function, two formulas are possible depending on the chosen metric (L1 or L2):
\begin{equation} L_{L1} = \sum_{y \neq i}max(0, p_y-p_i+1) \end{equation} \begin{equation} L_{L2} = \sum_{y \neq i}max(0, p_y-p_i+1)^2 \end{equation}
where
p_y - "raw" prediction of the classifier regarding the belonging of the object to the real class y;
p_i - "raw" prediction of the classifier regarding the belonging of the object to the i-th class, which is not the target one.
Initializing¶
def __init__(self, mode="l1"):
Parametrs
Parameter | Allowed types | Description | Default |
---|---|---|---|
mode | str | Selection of the metric by which the error function will be calculated | 'l1' |
Explanations
mode
- takes the values 'l1' or 'l2'.
Examples¶
Necessary imports:
import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Cost import SVM
Info
gpuarray
is required to properly place the tensor in the GPU.
Synthetic target and prediction tensors:
scores = gpuarray.to_gpu(np.random.randn(10, 4).astype(np.float32))
labels = gpuarray.to_gpu((np.random.randint(low=0, high=2, size=(10, )) * 2 - 1).astype(np.int32))
Important
Please remember that the first dimension of target and prediction tensors is the size of the batch
Initializing the error function:
svm = SVM()
Calculating the error and the gradient on the batch:
error, grad = svm(scores, labels)