У меня есть модель регрессии 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)