#python #tensorflow #keras #attributeerror
#python #тензорный поток #keras #ошибка атрибута
Вопрос:
Код ошибки в заголовке приведен ниже. Я несколько раз гуглил, но смог выяснить, в чем причины:
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. Что является результатом
tf.__version__
?2. tf.__версия __ равна 1.12.0
3. Вам нужно будет обновить tensorflow, чтобы использовать это. Либо к 1.15, либо к 2.x.
4. если я не могу перейти на tensorflow2, есть ли эквивалент в tensorflow1 для SparseCategoricalCrossentropy
Ответ №1:
Самая старая версия, которую я смог найти с аналогичной функцией, — 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
Для обеих версий требуется CUDA 10.0, если вы планируете использовать версию GPU.
Вот ссылка на документы для установки tensorflow-gpu https://www.tensorflow.org/install/gpu#install_cuda_with_apt
Просто в качестве примечания, когда вы когда-нибудь захотите посмотреть, каково содержимое определенного модуля в python, просто вызовите встроенную функцию help() для него. В вашем случае вы могли бы помочь (tf.keras.losses), по большей части, это может дать некоторое представление.