Keras 2 API 文档 / 损失函数 / 用于“最大间隔”分类的 Hinge 损失

用于“最大间隔”分类的 Hinge 损失

[源代码]

Hinge

tf_keras.losses.Hinge(reduction="auto", name="hinge")

计算 y_truey_pred 之间的 Hinge 损失。

loss = maximum(1 - y_true * y_pred, 0)

预期 y_true 值为 -1 或 1。如果提供二进制 (0 或 1) 标签,我们将将其转换为 -1 或 1。

独立使用

>>> y_true = [[0., 1.], [0., 0.]]
>>> y_pred = [[0.6, 0.4], [0.4, 0.6]]
>>> # Using 'auto'/'sum_over_batch_size' reduction type.
>>> h = tf.keras.losses.Hinge()
>>> h(y_true, y_pred).numpy()
1.3
>>> # Calling with 'sample_weight'.
>>> h(y_true, y_pred, sample_weight=[1, 0]).numpy()
0.55
>>> # Using 'sum' reduction type.
>>> h = tf.keras.losses.Hinge(
...     reduction=tf.keras.losses.Reduction.SUM)
>>> h(y_true, y_pred).numpy()
2.6
>>> # Using 'none' reduction type.
>>> h = tf.keras.losses.Hinge(
...     reduction=tf.keras.losses.Reduction.NONE)
>>> h(y_true, y_pred).numpy()
array([1.1, 1.5], dtype=float32)

compile() API 一起使用

model.compile(optimizer='sgd', loss=tf.keras.losses.Hinge())

[源代码]

SquaredHinge

tf_keras.losses.SquaredHinge(reduction="auto", name="squared_hinge")

计算 y_truey_pred 之间的平方 Hinge 损失。

loss = square(maximum(1 - y_true * y_pred, 0))

预期 y_true 值为 -1 或 1。如果提供二进制 (0 或 1) 标签,我们将将其转换为 -1 或 1。

独立使用

>>> y_true = [[0., 1.], [0., 0.]]
>>> y_pred = [[0.6, 0.4], [0.4, 0.6]]
>>> # Using 'auto'/'sum_over_batch_size' reduction type.
>>> h = tf.keras.losses.SquaredHinge()
>>> h(y_true, y_pred).numpy()
1.86
>>> # Calling with 'sample_weight'.
>>> h(y_true, y_pred, sample_weight=[1, 0]).numpy()
0.73
>>> # Using 'sum' reduction type.
>>> h = tf.keras.losses.SquaredHinge(
...     reduction=tf.keras.losses.Reduction.SUM)
>>> h(y_true, y_pred).numpy()
3.72
>>> # Using 'none' reduction type.
>>> h = tf.keras.losses.SquaredHinge(
...     reduction=tf.keras.losses.Reduction.NONE)
>>> h(y_true, y_pred).numpy()
array([1.46, 2.26], dtype=float32)

compile() API 一起使用

model.compile(optimizer='sgd', loss=tf.keras.losses.SquaredHinge())

[源代码]

CategoricalHinge

tf_keras.losses.CategoricalHinge(reduction="auto", name="categorical_hinge")

计算 y_truey_pred 之间的分类 Hinge 损失。

loss = maximum(neg - pos + 1, 0),其中 neg=maximum((1-y_true)*y_pred) 和 pos=sum(y_true*y_pred)

独立使用

>>> y_true = [[0, 1], [0, 0]]
>>> y_pred = [[0.6, 0.4], [0.4, 0.6]]
>>> # Using 'auto'/'sum_over_batch_size' reduction type.
>>> h = tf.keras.losses.CategoricalHinge()
>>> h(y_true, y_pred).numpy()
1.4
>>> # Calling with 'sample_weight'.
>>> h(y_true, y_pred, sample_weight=[1, 0]).numpy()
0.6
>>> # Using 'sum' reduction type.
>>> h = tf.keras.losses.CategoricalHinge(
...     reduction=tf.keras.losses.Reduction.SUM)
>>> h(y_true, y_pred).numpy()
2.8
>>> # Using 'none' reduction type.
>>> h = tf.keras.losses.CategoricalHinge(
...     reduction=tf.keras.losses.Reduction.NONE)
>>> h(y_true, y_pred).numpy()
array([1.2, 1.6], dtype=float32)

compile() API 一起使用

model.compile(optimizer='sgd', loss=tf.keras.losses.CategoricalHinge())

[源代码]

hinge 函数

tf_keras.losses.hinge(y_true, y_pred)

计算 y_truey_pred 之间的 Hinge 损失。

loss = mean(maximum(1 - y_true * y_pred, 0), axis=-1)

独立使用

>>> y_true = np.random.choice([-1, 1], size=(2, 3))
>>> y_pred = np.random.random(size=(2, 3))
>>> loss = tf.keras.losses.hinge(y_true, y_pred)
>>> assert loss.shape == (2,)
>>> assert np.array_equal(
...     loss.numpy(),
...     np.mean(np.maximum(1. - y_true * y_pred, 0.), axis=-1))

参数

  • y_true:真实值。预期 y_true 值为 -1 或 1。如果提供二进制 (0 或 1) 标签,我们将将其转换为 -1 或 1。形状 = [batch_size, d0, .. dN]
  • y_pred:预测值。形状 = [batch_size, d0, .. dN]

返回值

Hinge 损失值。形状 = [batch_size, d0, .. dN-1]


[源代码]

squared_hinge 函数

tf_keras.losses.squared_hinge(y_true, y_pred)

计算 y_truey_pred 之间的平方 Hinge 损失。

loss = mean(square(maximum(1 - y_true * y_pred, 0)), axis=-1)

独立使用

>>> y_true = np.random.choice([-1, 1], size=(2, 3))
>>> y_pred = np.random.random(size=(2, 3))
>>> loss = tf.keras.losses.squared_hinge(y_true, y_pred)
>>> assert loss.shape == (2,)
>>> assert np.array_equal(
...     loss.numpy(),
...     np.mean(np.square(np.maximum(1. - y_true * y_pred, 0.)), axis=-1))

参数

  • y_true:真实值。预期 y_true 值为 -1 或 1。如果提供二进制 (0 或 1) 标签,我们将将其转换为 -1 或 1。形状 = [batch_size, d0, .. dN]
  • y_pred:预测值。形状 = [batch_size, d0, .. dN]

返回值

平方 Hinge 损失值。形状 = [batch_size, d0, .. dN-1]


[源代码]

categorical_hinge 函数

tf_keras.losses.categorical_hinge(y_true, y_pred)

计算 y_truey_pred 之间的分类 Hinge 损失。

loss = maximum(neg - pos + 1, 0),其中 neg=maximum((1-y_true)*y_pred) 和 pos=sum(y_true*y_pred)

独立使用

>>> y_true = np.random.randint(0, 3, size=(2,))
>>> y_true = tf.keras.utils.to_categorical(y_true, num_classes=3)
>>> y_pred = np.random.random(size=(2, 3))
>>> loss = tf.keras.losses.categorical_hinge(y_true, y_pred)
>>> assert loss.shape == (2,)
>>> pos = np.sum(y_true * y_pred, axis=-1)
>>> neg = np.amax((1. - y_true) * y_pred, axis=-1)
>>> assert np.array_equal(loss.numpy(), np.maximum(0., neg - pos + 1.))

参数

  • y_true:真实值。预期 y_true 值为 {-1, +1}{0, 1}(即独热编码张量)。
  • y_pred:预测值。

返回值

分类 Hinge 损失值。