AttributeError ::“模块”对象没有属性“ 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,这是链接https://github.com/tensorflow/docs/blob/r1.13/site/en/api_docs/python/tf/keras/losses/CategoricalCrossentropy.md

它确实需要一键编码的目标,而不是仅传递表示索引的整数。

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

的链接

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

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

的文档链接

作为一个附带说明,每当您想查看python中某个模块的内容时,只需在其上调用内置help()函数即可。就您而言,您可以提供帮助(tf.keras.losses),在大多数情况下,它可能会提供一些见解。