Я использую 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 или что это должно работать, но я сделал что-то не так?
Спасибо.