Функция nn.sampled_softmax_loss
Функция nn.sampled_softmax_loss применяется для обучения моделей
с большим количеством классов, когда вычисление полной
softmax-потери слишком затратно. Вместо этого функция
сравнивает правильный класс с небольшим числом случайно
выбранных отрицательных классов. Первым параметром
передаются веса выходного слоя, вторым - смещения,
третьим - метки правильных классов, четвертым - входные
данные, пятым - количество отрицательных примеров.
Дополнительно можно указать количество классов и зерно
генератора случайных чисел.
Синтаксис
tf.nn.sampled_softmax_loss(weights, biases, labels, inputs, num_sampled, num_classes, [num_true], [sampled_values], [remove_accidental_hits], [seed], [name])
Пример
Давайте вычислим выборочную softmax-потерю для одного примера с четырьмя классами и двумя отрицательными сэмплами:
import tensorflow as tf
tf.random.set_seed(0)
weights = tf.constant([[1.0, 2.0], [2.0, 1.0], [0.5, 0.5], [1.5, 1.5]])
biases = tf.constant([0.1, 0.1, 0.1, 0.1])
labels = tf.constant([[0]])
inputs = tf.constant([[1.0, 2.0]])
loss = tf.nn.sampled_softmax_loss(
weights=weights,
biases=biases,
labels=labels,
inputs=inputs,
num_sampled=2,
num_classes=4
)
print(loss)
Результат выполнения кода:
tf.Tensor([1.6356295], shape=(1,), dtype=float32)
Пример
Давайте вычислим выборочную softmax-потерю для двух примеров с фиксированным зерном генератора:
import tensorflow as tf
tf.random.set_seed(0)
weights = tf.constant([[1.0, 2.0], [2.0, 1.0], [0.5, 0.5], [1.5, 1.5]])
biases = tf.constant([0.1, 0.1, 0.1, 0.1])
labels = tf.constant([[0], [2]])
inputs = tf.constant([[1.0, 2.0], [2.0, 1.0]])
loss = tf.nn.sampled_softmax_loss(
weights=weights,
biases=biases,
labels=labels,
inputs=inputs,
num_sampled=2,
num_classes=4,
seed=1
)
print(loss)
Результат выполнения кода:
tf.Tensor([1.6356295 1.6356295], shape=(2,), dtype=float32)
Пример
Давайте вычислим среднее значение выборочной softmax-потери по батчу:
import tensorflow as tf
tf.random.set_seed(0)
weights = tf.constant([[1.0, 2.0], [2.0, 1.0], [0.5, 0.5], [1.5, 1.5]])
biases = tf.constant([0.1, 0.1, 0.1, 0.1])
labels = tf.constant([[0], [2]])
inputs = tf.constant([[1.0, 2.0], [2.0, 1.0]])
loss = tf.nn.sampled_softmax_loss(
weights=weights,
biases=biases,
labels=labels,
inputs=inputs,
num_sampled=2,
num_classes=4,
seed=1
)
res = tf.reduce_mean(loss)
print(res)
Результат выполнения кода:
tf.Tensor(1.6356295, shape=(), dtype=float32)
Смотрите также
-
функцию
nce_loss,
которая вычисляет потерю с шумовым контрастивным оцениванием -
функцию
softmax_cross_entropy_with_logits,
которая вычисляет полную softmax-потерю с логитами -
функцию
sparse_softmax_cross_entropy_with_logits,
которая вычисляет softmax-потерю с целочисленными метками -
функцию
softmax,
которая применяет softmax к логитам