Я загружаю модель gensim и использую функцию get_keras_embedding (), чтобы сгенерировать слой внедрения для проблемы НЛП.Ниже часть моего кода:
from gensim.models import KeyedVectors
we_model = KeyedVectors.load_word2vec_format(EMBEDDING_FILE)
# Add an Input Layer
model = models.Sequential()
# Embedding Layer
model.add(we_model.get_keras_embedding(train_embeddings=False))
# Conv Layers
# model.add(layers.SpatialDropout1D(0.3))
model.add(layers.Convolution1D(128, 5, activation="relu"))
model.add(layers.MaxPool1D(5))
model.add(layers.Convolution1D(128, 5, activation="relu"))
model.add(layers.MaxPool1D(5))
model.add(layers.Convolution1D(128, 5, activation="relu"))
# model.add(layers.GlobalMaxPool1D())
model.add(layers.MaxPool1D(35))
# Output layers
model.add(layers.Flatten())
model.add(layers.Dense(128, activation="relu"))
# model.add(layers.Dropout(0.25))
model.add(layers.Dense(num_classes, activation="softmax"))
# Compile model
logger.debug('Compilando o modelo {}'.format(self.__class__.__name__))
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=optimizers[optimizer], metrics=['accuracy'])
(...)
Но приведенный выше код вызывает следующую ошибку:
ValueError: Форма ввода для "Flatten" не полностью определена (got (None, 128). Убедитесь, что передали полный аргумент "input_shape" или "batch_input_shape" первому слою в вашей модели.
Я пытался включить слой ввода сверху, но яполучена другая ошибка.
Как установить запрошенную информацию на уровне встраивания?
Кроме того, что-то, чего я не понимаю, это изменение с
(...)
model.add(layers.MaxPool1D(35))
# Output layers
model.add(layers.Flatten())
model.add(layers.Dense(128, activation="relu"))
model.add(layers.Dense(num_classes, activation="softmax"))
до
(...)
model.add(layers.GlobalMaxPool1D())
# Output layers
model.add(layers.Dense(128, activation="relu"))
model.add(layers.Dense(num_classes, activation="softmax"))
работает.