ValueError: Не удалось преобразовать массив NumPy в Tensor (неподдерживаемый тип объекта float) - PullRequest
2 голосов
/ 18 февраля 2020

У меня проблема с этой строкой кода в кератах с бэкэндом Tensorflow 2.0:

loss_out = Lambda(function=ctc_lambda_func, name='ctc', output_shape=(1,))([y_pred, Y_train, X_train_length, label_length])

Y_train, X_train_length - numpy.ndarrays y_pred и label_length - класс 'tensorflow.python.framework.ops.Tensor'

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Вы можете использовать

        tf.convert_to_tensor()

пример,

        import tensorflow as tf
        import numpy as np


        loss = Lambda(function=ctc_lambda_func, name='ctc', output_shape=(1,)) 
                       ([y_pred, Y_train, X_train_length, label_length])
        loss_np = np.asarray(loss, np.float32)

        loss_tf = tf.convert_to_tensor(loss_np, np.float32)

        sess = tf.InteractiveSession()  
        print(loss_tf.eval())

        sess.close()
0 голосов
/ 19 февраля 2020

Вы можете создать фиктивные входные данные

# you have defined the rest of your graph somewhere here

Y_train = Input(shape=...)
X_train_length = Input(shape=...)

loss = Lambda(function=ctc_lambda_func, name='ctc', output_shape=(1,)
              )([y_pred, Y_train, X_train_length, label_length])

# defining the model is slightly different with multiple inputs
training_model = Model(inputs=[image_input, Y_train, X_train_length], outputs=[loss])

А когда вы хотите обучить вашу модель, вы передадите параметр x в виде списка длины 3, например

x = [<images - np.ndarray shape (batch, h, w, c)>, <Y_train inputs - np.ndarray>,
     <X_train_length inputs - np.ndarray>]

И, конечно же, фиктивные значения для y

y = np.zeros((batch, 1))

И, наконец, это никогда не было проще, чем training_model.train_on_batch(x, y)

В качестве альтернативы создайте генератор, который генерирует x и y в форму, описанную выше, и используйте training_model.fit_generator(data_generator)

...