Как использовать gensim.get_keras_embedding () с моделью Keras - PullRequest
0 голосов
/ 21 февраля 2019

Я загружаю модель 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"))

работает.

...