Binary Logisti c Регрессия - нужно ли кодировать метку one_hot? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть модель регрессии logisti c, которую я создал, ссылаясь на эту ссылку

Метка является логическим значением (0 или 1 как значения).

Нужно ли в этом случае делать one_hot кодирование метки?

Причина вопроса: я использую приведенную ниже функцию для нахождения cross_entropy, и потери всегда равны нулю.

def cross_entropy(y_true, y_pred):
    y_true = tf.one_hot([y_true.numpy()], 2)
    print(y_pred)
    print(y_true)
    loss_row = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_pred)
    print('Loss')
    print(loss_row)
    return tf.reduce_mean(loss_row)

РЕДАКТИРОВАТЬ: - Градиент дает [Нет, Нет] в качестве возвращаемого значения (для следующего кода).

def grad(x, y):
with tf.GradientTape() as tape:
    y_pred = logistic_regression(x)
    loss_val = cross_entropy(y, y_pred)       
return tape.gradient(loss_val, [w, b])

Примеры значений

loss_val => tf.Tensor (307700.47, shape = ( ), dtype = float32)

w => tf.Variable 'Variable: 0' shape = (171, 1) dtype = float32, numpy = array ([[0.7456649], [-0.35111237], [- 0.6848465], [0.22605407]]

b => tf.Variable 'Переменная: 0' shape = (1,) dtype = float32, numpy = array ([1.1982833], dtype = float32)

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Если вы выполняете обычную (двоичную) логистическую регрессию c (с метками 0/1), используйте функцию потерь tf.nn.sigmoid_cross_entropy_with_logits () .

Если Вы выполняете мультиклассовую регрессию c (известную как регрессия softmax или многочленная логистика c регрессия), тогда у вас есть два варианта:

  1. Определите ваши метки в формате 1-hot (например, [1, 0, 0], [0, 1, 0], ...) и используйте функцию потерь tf.nn.softmax_cross_entropy_with_logits ()

  2. Определите ваши метки как одно целое число (например, 1, 2, 3, ...) и используйте функцию потерь tf.nn.sparse_softmax_cross_entropy_with_logits ()

Для последних двух вы можете найти дополнительную информацию в этом вопросе StackOverflow:

В чем разница между sparse_softmax_cross_entropy_with_logits и softmax_cross_entropy_with_logits?

1 голос
/ 19 апреля 2020

В случае бинарной регрессии c вам не требуется кодировка one_hot. Обычно используется в полиномиальной логистике c регрессии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...