Я разрабатываю модель для задачи классификации нескольких классов (4 класса), используя Keras с бэкэндом Tensorflow.Значения y_test
имеют формат 2D:
--------------------------------------------------------------------------- TypeError Traceback (последний вызов был последним) в () 30 model.compile (loss = "categoryorical_crossentropy", 31 metrics = [my_metric], # 'precision', ---> 32 optimizer = 'adadelta')
~ / anaconda3 / lib / python3.6 / site-packages / keras / engine / training.py в процессе компиляции (self, оптимизатор, потери, метрики, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, ** kwargs) 449 output_metrics = nested_metrics[i] 450 output_weighted_metrics = nested_weighted_metrics [i] -> 451 handle_metrics (output_metrics) 452 handle_metrics (output_weighted_metrics, weights = weights) 453
~ / anaconda3 / lib / python3.6 / site-packages / keras /engine / training.py в handle_metrics (метрики, веса) 418 metric_result = weighted_metric_fn (y_true, y_pred, 419 весов = весов, -> 420 mask = masks [i]) 421 422 # Добавить к self.metrics_names, self.metric_tensors,
~ / anaconda3 / lib /python3.6 / site-packages / keras / engine / training_utils.py в взвешенном (y_true, y_pred, weights, mask) 402 "" "403 # score_array имеет ndim> = 2 -> 404 score_array = fn (y_true, y_pred)405, если маска не None: 406 # Примените маску к floatX, чтобы избежать трансляции float64 в Theano
в my_metric (targ, прогнозировать) 22 val_predict = прогнозировать 23 val_targ = tf.math.argmax (targ, axis =1) ---> 24 возвращают metrics.balanced_accuracy_score (val_targ, val_predict) 25 # возврат 5 26
~ / anaconda3 / lib / python3.6 / site-packages / sklearn / metrics /ification.py в balance_accuracy_score(y_true, y_pred, sample_weight, настроенный)
1431 1432 "" "-> 1433 C = confusion_matrix (y_true, y_pred, sample_weight = sample_weight) 1434 с np.errstate (деление = 'игнорировать', недействительно = 'игнорировать'): 1435
per_class = np.diag (C) / C.sum (axis = 1)
~ / anaconda3 / lib / python3.6 / site-packages / sklearn / metrics /ification.py в confusion_matrix (y_true, y_pred, метки, sample_weight) 251 252 "" "--> 253 y_type, y_true, y_pred = _check_targets (y_true, y_pred) 254, если y_type отсутствует в ("двоичный", "мультикласс"): 255 повысить ValueError ("% s не поддерживается"% y_type)
~ / anaconda3 / lib / python3.6 / site-packages / sklearn / metrics /ification.py в _check_targets (y_true, y_pred) 69 y_pred: массив или индикаторная матрица 70 "" "---> 71 check_consistent_length (y_true, y_pred)72 type_true = type_of_target (y_true) 73 type_pred = type_of_target (y_pred)
~ / anaconda3 / lib / python3.6 / site-packages / sklearn / utils / validation.py в файле check_consistent_length (* массивы) 229 "«230 -> 231 length = [_num_samples (X) для X в массивах, если X не None] 232 uniques = np.unique (length) 233, если len (uniques)> 1:
~ / anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py в (.0) 229 "" "230 -> 231 длины = [_num_sдостаточно (X) для X в массивах, если X не None] 232 unique = np.unique (length) 233, если len (unique)> 1:
~ / anaconda3 / lib / python3.6 / site-packages / sklearn / utils / validation.py в _num_samples (x) 146 return x.shape [0] 147 else: -> 148 return len (x) 149иначе: 150 return len (x)
TypeError: объект типа 'Tensor' не имеет len ()