CTCBeamSearchDecoder считает, что sequence_length of shape (2,) не является вектором - PullRequest
0 голосов
/ 09 декабря 2018

Пытаясь запустить поиск луча в модели Keras, я получаю запутанные (и противоречивые?) Сообщения об ошибках.Моя модель имеет входные данные, такие как

inputs = Input(name='spectrograms',
               shape=(None, hparams["n_spectrogram"]))
input_length = Input(name='len_spectrograms',
                     shape=[1], dtype='int64')

, а функция потери CTC требует ввода [1] форм и длины метки.Насколько я понимаю, вывод должен быть получен с чем-то вроде

# Stick connectionist temporal classification on the end of the core model
paths = K.function(
    [inputs, input_length],
    K.ctc_decode(output, input_length, greedy=False, top_paths=4)[0])

, но как есть, что приводит к жалобе на форму input_length

ValueError: Shape must be rank 1 but is rank 2 for 'CTCBeamSearchDecoder' (op: 'CTCBeamSearchDecoder') with input shapes: [?,?,44], [?,1].

, ноесли я отрублю это измерение

    K.ctc_decode(output, input_length[..., 0], greedy=False, top_paths=4)[0])

, определение модели запустится, но когда я запускаю y = paths([x, numpy.array([[30], [30]])]) с x.shape == (2, 30, 513), я внезапно получаю

tensorflow.python.framework.errors_impl.InvalidArgumentError: sequence_length is not a vector
     [[{{node CTCBeamSearchDecoder}} = CTCBeamSearchDecoder[beam_width=100, merge_repeated=true, top_paths=4, _device="/job:localhost/replica:0/task:0/device:CPU:0"](Log, ToInt32)]]

Что я делаю неправильно?

...