Когда я запускаю следующий код:
import numpy as np
import tensorflow as tf
arr = np.array([2., 4., 5., 9.])
tf.keras.utils.to_categorical(arr, 10)
все идет хорошо, и вывод:
array([[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]], dtype=float32)
Но если я заменю arr
на tf.constant(arr)
(или я думаю, но без определенности любого Тензорного), как в следующем коде:
tf.keras.utils.to_categorical(tf.constant(arr), 10)
Я получаю следующую ошибку:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-139-507d6ce7c0a3> in <module>()
----> 1 tf.keras.utils.to_categorical(tf.constant(arr), 10)
.../miniconda2/lib/python2.7/site-packages/tensorflow/python/keras/utils/np_utils.pyc in to_categorical(y, num_classes, dtype)
38 last.
39 """
---> 40 y = np.array(y, dtype='int')
41 input_shape = y.shape
42 if input_shape and input_shape[-1] == 1 and len(input_shape) > 1:
ValueError: setting an array element with a sequence.
Конфигурация:
- Python: 2,7
- Тензор потока: 1.13.1
- Керас (внутри Tensorflow): 2.2.4-tf
- ОС: Ubuntu 16.04
Как я мог избавиться / обойти эту проблему?
Немного контекста:
Моя главная проблема, когда я звоню model.compile
со следующей потерей:
def loss(y_true, y_pred):
# Cross entropy loss
bin_true = y_true[:, 0]
print bin_true.eval()
dum = tf.keras.utils.to_categorical(bin_true, 66)
cls_loss = tf.keras.losses.categorical_crossentropy(dum, y_pred, True)
# MSE loss
cont_true = y_true[:, 1]
pred_cont = tf.keras.backend.sum(tf.nn.softmax(y_pred) * idx_tensor, 1) * 3 - 99
mse_loss = tf.keras.losses.mean_squared_error(cont_true, pred_cont)
# Total loss
return cls_loss + 0.5 * mse_loss
Я получаю точно такую же ошибку в строке dum = tf.keras.utils.to_categorical(bin_true, 66))
(я даю некоторый контекст, потому что весь мой «способ сделать» может быть неправильным ...)