我在一个文件中每行有一个句子,句子不超过30个单词。我正在使用 Keras 构建一个自动编码器,我对此非常陌生 - 所以我可能做错了几件事。所以,在这里帮帮我。
我正在尝试使用自动编码器来获取中间上下文向量 - 编码步骤后的压缩特征向量。 词汇只不过是我文件中不同单词的列表。300是词嵌入矩阵的维度。30 是每个句子可以包含的最大单词数。X_train是(#of 句,30(数字矩阵,其中每个数字都不是,而是单词在字典中存在的位置。
print len(vocabulary)
model = Sequential()
model.add(Embedding(len(vocabulary), 300))
model.compile('rmsprop', 'mse')
input_i = Input(shape=(30, 300))
encoded_h1 = Dense(64, activation='tanh')(input_i)
encoded_h2 = Dense(32, activation='tanh')(encoded_h1)
encoded_h3 = Dense(16, activation='tanh')(encoded_h2)
encoded_h4 = Dense(8, activation='tanh')(encoded_h3)
encoded_h5 = Dense(4, activation='tanh')(encoded_h4)
latent = Dense(2, activation='tanh')(encoded_h5)
decoder_h1 = Dense(4, activation='tanh')(latent)
decoder_h2 = Dense(8, activation='tanh')(decoder_h1)
decoder_h3 = Dense(16, activation='tanh')(decoder_h2)
decoder_h4 = Dense(32, activation='tanh')(decoder_h3)
decoder_h5 = Dense(64, activation='tanh')(decoder_h4)
output = Dense(300, activation='tanh')(decoder_h5)
autoencoder = Model(input_i,output)
autoencoder.compile('adadelta','mse')
X_embedded = model.predict(X_train)
autoencoder.fit(X_embedded,X_embedded,epochs=10, batch_size=256, validation_split=.1)
print autoencoder.summary()
这个想法取自Keras - 用于文本分析的自动编码器
那么,在训练之后(如果我做得正确(,我应该如何为每个句子运行编码部分以获得特征表示?感谢帮助。谢谢!
为编码器创建一个独立的模型
encoder=Model(input_i,latent)
假设对于 mnist 数据,代码应该是这样的——
encoder.predict(x_train[0])
这样,您将获得latent_space矢量作为输出
为此,请参阅通过model.pop()
"弹出"最后一层。训练后,使用model.pop()
"弹出"最后一层,然后使用model.predict(X_train)
来获取表示。
https://keras.io/getting-started/faq/#how-can-i-remove-a-layer-from-a-sequential-model