类 CategoricalCrossentropy 与函数 categorical_crossentropy

xia*_*awi 5 tensorflow tensorflow2.0

在 Tensorflow2 中,我可以使用类tf.keras.losses.CategoricalCrossentropy此处定义)或函数categorical_crossentropy此处定义)来计算标签和预测之间的交叉熵损失:

对于第一个,代码是:

     loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
     # ...
     @tf.function
     def train_step(samples, labels):
        with tf.GradientTape() as tape:
          predictions = model(samples)
          loss = loss_object(labels, predictions)
        #...

Run Code Online (Sandbox Code Playgroud)

第二个更直接:

   @tf.function
    def forward(features, training=False):
        predictions = model.call(...)
        loss = tf.losses.categorical_crossentropy(
                y_true=features['label'],
                y_pred=predictions)
        return loss, predictions
Run Code Online (Sandbox Code Playgroud)

数值结果是一样的。但是我想知道是否有更有效的方法?或者更一般地说,根据某些特定情况应该使用哪一个?

请注意,对于API 定义的任何类/函数,问题可能都是相同的

tol*_*ira 5

来自Keras 文档

请注意,所有损失都可以通过类句柄和函数句柄获得。类句柄使您能够将配置参数传递给构造函数(例如 loss_fn = CategoricalCrossentropy(from_logits=True)),并且它们在以独立方式使用时默认执行归约(请参阅下面的详细信息)。