Мне было интересно, почему при вводе двух тензоров одинаковой точной формы и одинакового содержимого я получаю ошибку, возникающую при вызове функции потерь sparse_categorical_crossentropy. У меня есть следующий код:
labels = np.array([0,1,2])
logits = np.array([0,1,2])
tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True)
, и я получаю следующую ошибку:
/tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/losses.py in sparse_categorical_crossentropy(y_true, y_pred, from_logits, axis)
976 def sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1):
977 return K.sparse_categorical_crossentropy(
--> 978 y_true, y_pred, from_logits=from_logits, axis=axis)
979
980
/tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/backend.py in sparse_categorical_crossentropy(target, output, from_logits, axis)
4574 else:
4575 res = nn.sparse_softmax_cross_entropy_with_logits_v2(
-> 4576 labels=target, logits=output)
4577
4578 if update_shape and output_rank >= 3:
/tensorflow-2.1.0/python3.6/tensorflow_core/python/ops/nn_ops.py in sparse_softmax_cross_entropy_with_logits_v2(labels, logits, name)
3535 """
3536 return sparse_softmax_cross_entropy_with_logits(
-> 3537 labels=labels, logits=logits, name=name)
3538
3539
/tensorflow-2.1.0/python3.6/tensorflow_core/python/ops/nn_ops.py in sparse_softmax_cross_entropy_with_logits(_sentinel, labels, logits, name)
3451 "should equal the shape of logits except for the last "
3452 "dimension (received %s)." % (labels_static_shape,
-> 3453 logits.get_shape()))
3454 # Check if no reshapes are required.
3455 if logits.get_shape().ndims == 2:
ValueError: Shape mismatch: The shape of labels (received (3,)) should equal the shape of logits except for the last dimension (received (1, 3)).