keras LSTM获得隐藏状态(将情感序列转换为文档上下文向量)

问题描述 投票:0回答:1

[我试图使用keras通过LSTM从句子向量创建文档上下文向量(因此每个文档都由一系列句子向量组成。

我的目标是使用keras复制以下博客文章:https://andriymulyar.com/blog/bert-document-classification

[我有一个(玩具)张量,看起来像这样:X = np.array(features).reshape(5, 200, 768)因此5个文档,每个文档具有200个句子向量序列-每个句子向量具有768个特征。

为了从我的句子向量中嵌入,我将文档编码为一个热向量,以学习LSTM:

y = [1,2,3,4,5] # 5 documents in toy-tensor
y = np.array(y)
yy = to_categorical(y)
yy = yy[0:5,1:6]

直到现在,我的代码看起来像这样

inputs1=Input(shape=(200,768))
lstm1, states_h, states_c =LSTM(5,dropout=0.3,recurrent_dropout=0.2, return_state=True)(inputs1)
model1=Model(inputs1,lstm1)
model1.compile(loss='categorical_crossentropy',optimizer='rmsprop',metrics=['acc']) 
model1.summary()
model1.fit(x=X,y=yy,batch_size=100,epochs=10,verbose=1,shuffle=True,validation_split=0.2)

当我打印states_h时,我得到了一个形状为(?,5)的张量,我真的不知道如何访问张量内的矢量,这些矢量应该代表我的文档。

print(states_h)
Tensor("lstm_51/while/Exit_3:0", shape=(?, 5), dtype=float32)

还是我做错了什么?据我了解,应该有5个文档向量,例如doc1=[...] ; ...; doc5=[...],以便我可以将文档向量重新用于分类任务。

python keras lstm embedding bert
1个回答
0
投票

带有tf.keras的TF 1.x(使用TF 1.15测试)

Keras使用符号张量进行运算。因此,print(states_h)不会给您任何东西,除非您将数据传递给states_h所依赖的占位符(在这种情况下为inputs1)。您可以按照以下步骤进行操作。

import tensorflow.keras.backend as K

sess = K.get_session()
out = sess.run(states_h, feed_dict={inputs1:X})

然后out将是(batch_size, 5)大小的输出。

tf.keras的TF 2.x

上面的代码无法按原样工作。而且我仍然没有找到如何使其与TF 2.0一起使用的方法(即使TF 2.0仍会根据docs生成占位符)。当我找到如何解决TF 2.x的问题时,我将编辑我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.