AttributeError:: 'module' object has no attribute 'SparseCategoricalCrossentropy'

AttributeError:: 'module' object has no attribute 'SparseCategoricalCrossentropy'

标题错误的代码如下。我用谷歌搜索了几次,但可以找出原因是什么:

class MyLinearModel(Model):
def __init__(self):
    super(MyLinearModel, self).__init__()
    self.flatten = Flatten()
    self.d1 = Dense(10, activation='softmax', name="dense1")

def call(self, x):
    x = self.flatten(x)
    return self.d1(x)

model = MyLinearModel()

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.SGD()

...

我收到以下错误:

 AttributeError: 'module' object has no attribute 'SparseCategoricalCrossentropy'

我能找到的具有类似功能的最旧版本是 1.13,这里是 link https://github.com/tensorflow/docs/blob/r1.13/site/en/api_docs/python/tf/keras/losses/CategoricalCrossentropy.md

它确实需要 one-hot 编码目标,而不是只传递代表索引的整数。

您会在 Tensorflow 1.15.0 中找到您正在寻找的相同功能,这里是 link 文档 https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/losses/SparseCategoricalCrossentropy

如果您打算使用 GPU 版本,那么这两个版本都需要 CUDA 10.0。

这是 link tensorflow-gpu 安装文档 https://www.tensorflow.org/install/gpu#install_cuda_with_apt

顺便提一下,当您想查看 python 中某个模块的内容时,只需调用 built-in help() 函数即可。对于您的情况,您可以提供帮助(tf.keras.losses),在大多数情况下,它可能会提供一些见解。