Встраивание tf.keras с mask_zero = True с последующим GlobalAveragePooling1D генерирует TypeError - PullRequest
0 голосов
/ 15 октября 2019

Я использую TensorFlow v2 на Google Colab, используя tf.keras. Я пытаюсь использовать встраивание с последующим маскированием по глобальному среднему. Вот мой код:

vocab_size = 1500

inputs = Input(shape=(None,), dtype=tf.int32, name='word_sequence')

x = Embedding(input_dim=vocab_size, output_dim=16, mask_zero=True)(inputs)

outputs = tf.keras.layers.GlobalAveragePooling1D()(x)

model = Model(inputs, outputs)

Но я получил эту ошибку:

TypeError: Не удалось преобразовать объект типа в Tensor. Содержание: [-1, None, 1]. Рассмотрим приведение элементов к поддерживаемому типу.

Если я укажу явную длину последовательности Input (shape = (10,), .....), то, похоже, ошибки нет (хотя я не проверялэто с образцами данных). Интересно, почему вам нужно было бы указать явную длину последовательности, я думал, что это можно сделать лениво во время выполнения, когда слой впервые встречает данные.

Кроме того, следующие работы (взяты из учебника по "маскированию и заполнению"):

inputs = tf.keras.Input(shape=(None,), dtype='int32')
x = layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)(inputs)
outputs = layers.LSTM(32)(x)

model = tf.keras.Model(inputs, outputs)

Для LSTM кажется, что он доволен входной формой None во время создания функционального API. модели.

Может кто-нибудь объяснить, как это плохо с GlobalAveragePooling1D или что это должно работать, но я сделал что-то не так?

Спасибо.

...