Ошибка в Керасе, когда я хочу вычислить Чувствительность и Специфичность - PullRequest
0 голосов
/ 11 апреля 2019

Я пишу код для классификации между двумя типами изображений на основе CNN.Я хочу измерить точность, чувствительность и специфичность своей работы, но, к сожалению, у меня есть следующая ошибка.Не могли бы вы, пожалуйста, дайте мне знать, в чем моя проблема.

m = tf.keras.metrics.SensitivityAtSpecificity(0.5)
model.compile(optimizer='adam', loss=keras.losses.binary_crossentropy, metrics=['accuracy',m])

ошибка:

Traceback (most recent call last):
  File "C:/Users/Hamed/PycharmProjects/Deep Learning/CNN.py", line 77, in <module>
    validation_steps = 1600//batch_size)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\engine\training.py", line 1418, in fit_generator
    initial_epoch=initial_epoch)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\engine\training_generator.py", line 217, in fit_generator
    class_weight=class_weight)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\engine\training.py", line 1217, in train_on_batch
    outputs = self.train_function(ins)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\backend\tensorflow_backend.py", line 2715, in __call__
    return self._call(inputs)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\keras\backend\tensorflow_backend.py", line 2675, in _call
    fetched = self._callable_fn(*array_vals)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\tensorflow\python\client\session.py", line 1439, in __call__
    run_metadata_ptr)
  File "C:\Users\Hamed\Anaconda3\envs\tensorflowGPU\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 528, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: Resource localhost/false_negatives/class tensorflow::Var does not exist.
     [[{{node metrics/sensitivity_at_specificity/AssignAddVariableOp_1}}]]
     [[{{node metrics/sensitivity_at_specificity/Mean}}]]

1 Ответ

0 голосов
/ 15 апреля 2019

Метрика tf.keras.metrics.SensitivityAtSpecificity вычисляет чувствительность при заданной специфичности Нажмите здесь .

К сожалению, метрики чувствительности и специфичности еще не включены в Keras, поэтому вы должны написать свою собственную метрику, как указано здесь .

Ниже приведен один простой способ вычисления специфичности, найденный на этом ответе .

def specificity(y_true, y_pred):
    """
    param:
    y_pred - Predicted labels
    y_true - True labels 
    Returns:
    Specificity score
    """
    neg_y_true = 1 - y_true
    neg_y_pred = 1 - y_pred
    fp = K.sum(neg_y_true * y_pred)
    tn = K.sum(neg_y_true * neg_y_pred)
    specificity = tn / (tn + fp + K.epsilon())
    return specificity

Вы можете получить реализации Keras для специфичности и чувствительности на по этой ссылке .

...