model.compile() завершается ошибкой со всеми метриками, кроме ‘accuracy’

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я работаю над простым MLP и закодировал это:

 from keras.models import Sequential
from keras.layers import Dense
from keras import Input

def get_stats_model():

    model = Sequential()
    model.add(Dense(12, input_dim=8, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    
    return model
  

И в main.py :

 get_stats_model()
  

Который работает отлично, пока есть только метрики 'accuracy' . при попытке с обоими 'accuracy' и 'AUC' , просто 'AUC' , или 'mean_absolute_error' , как:

 from keras.models import Sequential
from keras.layers import Dense
from keras import Input

def get_stats_model():

    model = Sequential()
    model.add(Dense(12, input_dim=8, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['AUC'])
    
    return model

  

Я получаю следующую ошибку:

 Traceback (most recent call last):
  File "main.py", line 4, in <module>
    get_stats_model()
  File "/home/giuliano/Desktop/tfg/workspace/root/final/exp/mlp.py", line 64, in get_stats_model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['AUC'])
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/engine/training.py", line 222, in compile
    masks=masks)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/engine/training.py", line 871, in _handle_metrics
    self._per_output_metrics[i], target, output, output_mask)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/engine/training.py", line 842, in _handle_per_output_metrics
    metric_fn, y_true, y_pred, weights=weights, mask=mask)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/engine/training_utils.py", line 1033, in call_metric_function
    update_ops = metric_fn.update_state(y_true, y_pred, sample_weight=weights)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/utils/metrics_utils.py", line 42, in decorated
    update_op = update_state_fn(*args, **kwargs)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/metrics.py", line 318, in update_state
    matches = self._fn(y_true, y_pred, **self._fn_kwargs)
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/keras/metrics.py", line 1660, in __init__
    if num_thresholds <= 1:
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 757, in __bool__
    self._disallow_bool_casting()
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 526, in _disallow_bool_casting
    self._disallow_in_graph_mode("using a `tf.Tensor` as a Python `bool`")
  File "/home/giuliano/anaconda3/envs/tfg/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 515, in _disallow_in_graph_mode
    " this function with @tf.function.".format(task))
tensorflow.python.framework.errors_impl.OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

  

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

Мои версии пакетов:

 Keras==2.3.1
tensorflow==2.1.0
  

Заранее спасибо.

Комментарии:

1. У меня та же версия tensorflow, но моя версия keras 2.2.4; Для меня ваш код работает со всеми видами метрик

2. Это работает для меня. У меня та же keras версии 2.3.1. Одна вещь, которую я предложу в новой виртуальной среде. Установите пакеты и попробуйте код. Во-вторых, вы можете попробовать импортировать keras из самого tensorflow. ie. from tensorflow.keras import dense

3. Благодаря обоим, это решило проблему.

Ответ №1:

Из комментариев

  1. Создание Virtual Environment и
  2. Importing Keras использование кода, from tensorflow import keras

решила проблему. (перефразировано из drops и Aniket Bote).