NotImplementedError: Невозможно преобразовать символ c Тензор (up_sampling2d_4_target: 0) в массив numpy - PullRequest
0 голосов
/ 27 февраля 2020

NotImplementedError: Невозможно преобразовать символ c Тензор (up_sampling2d_4_target: 0) в массив numpy.

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

import keras.backend as K
from keras.optimizers import Adam
from keras.losses import binary_crossentropy

## intersection over union
def IoU(y_true, y_pred, eps=1e-6):
    if np.max(y_true) == 0.0:
        return IoU(1-y_true, 1-y_pred) ## empty image; calc IoU of zeros
    intersection = K.sum(y_true * y_pred, axis=[1,2,3])
    union = K.sum(y_true, axis=[1,2,3]) + K.sum(y_pred, axis=[1,2,3]) - intersection
    return -K.mean( (intersection + eps) / (union + eps), axis=0)

-------------------------------------- ------------------------------------- NotImplementedError Traceback (последний последний вызов) в 14 15, в то время как True : ---> 16 loss_history = fit () 17, если np.min ([mh.history ['val_loss'] для mh в loss_history]) <-0.2: 18 break </p>

в fit () 1 def fit (): ----> 2 seg_model.compile (оптимизатор = Адам (1e-3, распад = 1e-6), потеря = IoU, метрика = ['binary_accuracy']) 3 4 step_count = min (MAX_TRAIN_STEPS, train_df .shape [0] // BATCH_SIZE) 5 aug_gen = create_aug_gen (make_image_gen (train_df))

~ / venv / lib / python3 .7 / site-packages / tensorflow_core / python / training / tracking / base .py в _method_wrapper (self, * args, ** kwargs) 455 self._self_setattr_tracking = False # pylint: disable = protected-access 456 try: -> 457 result = method (self, * args, ** kwargs) 458 наконец : 459 self._self_setattr_tracking = предыдущее_значение # pylint: отключить = защищенный доступ

~ / venv / lib / python3 .7 / site-packages / tenorflow_core / python / keras / engine / training.py в компиляции (самостоятельно, оптимизатор, потери, метрики, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, distrate, ** kwargs) 371 372 # Создает подграфы потерь модели и взвешенных метрик. -> 373 self._compile_weights_loss_and_weighted_metrics () 374 375 # Функции для обучения, тестирования и прогнозирования:

~ / venv / lib / python3 .7 / site-packages / tensorflow_core / python / training / tracking / base.py в _method_wrapper (self, * args, ** kwargs) 455 self._self_setattr_tracking = False # pylint: disable = protected-access 456 try: -> 457 result = method (self, * args, ** kwargs) 458 наконец: 459 self._self_setattr_tracking = предыдущее_значение # pylint: отключить = защищенный доступ

~ / venv / lib / python3 .7 / site-packages / tensorflow_core / python / keras / engine / training.py в _compile_weights_loss_and_weighted_metrics (self, sample_weights)
1651 # loss_weight_2 * output_2_loss_fn (...) + 1652 # потерь слоя. -> 1653 self.total_loss = self._prepare_total_loss (маски) 1654 1655 def _prepare_skip_target_masks (self):

~ / venv / lib / python3 .7 / site-packages / тензор потока_кор / python / keras / engine /training.py в _prepare_total_loss (self, маски) 1711 1712, если hasattr (loss_fn, 'сокращение'): -> 1713 per_sample_losses = loss_fn.call (y_true, y_pred) 1714 weighted_losses = lost_utils.compute_weighted_lossample 1715 (17) 1023 * ~ / venv / lib / python3 .7 / site-пакеты / tenorflow_core / python / keras / loss.py в вызове (self, y_true, y_pred) 219 y_pred, y_true = tf_losses_util.squeeze_or_expand_dimensions (220 y_ru), -> 221 вернуть self.fn (y_true, y_pred, ** self._fn_kwargs) 222 223 def get_config (self):

в IoU (y_true, y_pred, eps) 5 ## пересечение через union 6 def IoU (y_true, y_pred, eps = 1e-6): ----> 7, если np.max (y_true) == 0.0: 8 возвращает IoU (1-y_true, 1-y_pred) ## пустое изображение; cal c IoU пересечения нулей 9 = K.sum (y_true * y_pred, axis = [1,2,3])

<<strong> массив _function внутренняя часть> в amax (* args, ** kwargs)

~ / venv / lib / python3 .7 / site-packages / numpy / core / fromnumeri c .py в amax (a, axis, out, keepdims, initial, where) 2619 "" "2620
return _wrapreduction (a, np.maximum, 'max', axis, None, out, -> 2621 keepdims = keepdims, начальный = начальный, где = где) 2622 2623

~ / venv / lib / python3 .7 / site-packages / numpy / core / fromnumeri c .py в _wrapreduction (obj, ufun c, метод, ось, dtype, out, ** kwargs) 88 уменьшение возврата (axis = axis, out = out, ** passkwargs) 89 ---> 90 return ufun c .reduce (obj, axis, dtype, out, ** passkwargs) 91 92

~ / venv / lib / python3 .7 / site-packages / tenorflow_core / python / framework / ops.py в array (self) 734 def array (self): 735 повысить NotImplementedError ("Невозможно преобразовать символ c Tensor ({}) в массив numpy" -> 736 ". ".format (self.name)) 737 738 def len (self):

NotImplementedError: Невозможно преобразовать символ c Tensor (up_sampling2d_4_target: 0) в numpy

массив.

1 Ответ

0 голосов
/ 27 февраля 2020

Вы не можете использовать numpy с тензорным потоком Tensor, это две разные вещи.

Проблема здесь:

if np.max(y_true) == 0.0:
    return IoU(1-y_true, 1-y_pred) ## empty image; calc IoU of zeros

Вам нужны эти строки вместо:

is_zero = K.equal(y_true, 0)
y_true = K.switch(is_zero, 1-y_true, y_true)
y_pred = K.switch(is_zero, 1-y_pred, y_pred)
...