【问题标题】:TensorFlow 2.0: What is the difference between sparse_categorical_crossentropy and SparseCategoricalCrossentropy?TensorFlow 2.0:sparse_categorical_crossentropy 和 SparseCategoricalCrossentropy 有什么区别?
【发布时间】:2019-12-16 16:07:50
【问题描述】:

阅读 TensorFlow 2.0 的文档,我发现:

tf.keras.losses.sparse_categorical_crossentropy

tf.keras.losses.SparseCategoricalCrossentropy

他们在教程中的使用方式,他们的论点,他们的描述,他们似乎和我一样。两者有什么区别?

【问题讨论】:

    标签: python tensorflow keras tensorflow2.0


    【解决方案1】:

    一个是函数,一个是类。

    第一个是函数版本,它只会在你评估它时吐出损失的值。

    第二个是类版本。您需要评估类本身的实例以获得损失值。

    我相信你是对的,差别不大,如果使用 keras api,唯一的区别就是你编译模型的时候。

    例如

    model.compile(loss=tf.keras.losses.sparse_categorical_crossentropy)
    
    vs
    
    model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy())
    

    注意类版本上的额外括号,您需要传入一个类的实例。

    【讨论】:

    • 如果我错了,请纠正我。我想可以定义一个对象,例如:loss = SparseCategoricalCrossentropy(),但另一方面你必须照原样使用sparse_categorical_crossentropy,对吧?
    • 没错。我相信更准确地说,编译方法有一些接口,所以它期望“损失”是一个可调用的对象,它需要 2 个参数(logits 和标签)。
    【解决方案2】:

    没有。如果您查看链接的文档,您可以访问 GitHub 上的源代码。两者都指向同一个对象:

    def sparse_categorical_crossentropy(target, output, from_logits=False, axis=-1):
      """Categorical crossentropy with integer targets.
    
      if not from_logits:
        if (isinstance(output, (ops.EagerTensor, variables_module.Variable)) or
            output.op.type != 'Softmax'):
          epsilon_ = _constant_to_tensor(epsilon(), output.dtype.base_dtype)
          output = clip_ops.clip_by_value(output, epsilon_, 1 - epsilon_)
          output = math_ops.log(output)
          # ... blablabla
    

    在:

    tensorflow/python/keras/backend.py
    

    例如,前者 (tf.keras.losses.sparse_categorical_crossentropy) 是这样调用的:

    def sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1):
      return K.sparse_categorical_crossentropy(
          y_true, y_pred, from_logits=from_logits, axis=axis)
    

    所以它指向tensorflow/python/keras/backend.py中的另一个

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多