Вы можете использовать tf.losses.sparse_categorical_crossentropy
с from_logits
, установленным на True
, и обернуть его в функцию
import tensorflow as tf
def my_tf_loss_fn(y_true, y_pred):
return tf.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logits=True)
model = tf.keras.applications.ResNet50()
model.compile(loss=my_tf_loss_fn, optimizer='adam')
Но если вы настаиваете на использовании tf.nn.sparse_softmax_cross_entropy_with_logits
, я не могу придумать чистый способчтобы сделать это, но это работает
import tensorflow as tf
def my_tf_loss_fn(y_true, y_pred):
return tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y_true, logits=y_pred)
model = tf.keras.applications.ResNet50()
dummy_tensor = tf.placeholder(dtype=tf.int32, shape=[None])
model.compile(loss=my_tf_loss_fn, optimizer='adam', target_tensors=dummy_tensor)