问题描述
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),在大多数情况下,它可能会提供一些见解。