我在文件中每行有一个句子,句子不超过30个单词。我正在使用Keras构建一个自动编码器,我对此非常陌生 - 所以我可能做错了一些事情。所以,请帮帮我。
我正在尝试使用autoencoder来获取中间上下文向量 - 编码步骤之后的压缩特征向量。 词汇只不过是我文件中不同单词的列表。 300是字嵌入矩阵的维度。 30是每个句子可以有的最大单词。 X_train是(#of sentence,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 - Autoencoder for Text Analysis
因此,经过训练(如果我已经正确完成),我应该如何为每个句子运行编码部分以获得特征表示?感谢帮助。谢谢!
答案 0 :(得分:0)
为编码器创建独立模型
假设mnist数据的代码应类似于-
encoder.predict(x_train [0])
由此,您将获得latent_space向量作为输出
答案 1 :(得分:0)
要执行此操作,请参考通过model.pop()
从最后一层“弹出”。使用model.pop()
训练“弹出”最后一层后,然后使用model.predict(X_train)
获取表示。
https://keras.io/getting-started/faq/#how-can-i-remove-a-layer-from-a-sequential-model