Python 使用单词嵌入和TFIDF向量的LSTM

Python 使用单词嵌入和TFIDF向量的LSTM,python,tensorflow,keras,lstm,tf-idf,Python,Tensorflow,Keras,Lstm,Tf Idf,我试图在具有文本属性和TFIDF向量的数据集上运行LSTM。我将word嵌入文本并输入到LSTM层。接下来,我连接LSTM输出和TFIDF向量。但是,下面代码中的第2行抛出以下错误: “ValueError:调用层lstm_1时使用的输入不是符号张量。接收的类型:。完整输入:[]。层的所有输入都应该是张量。” 代码如下所示,其中len(术语索引)+1=9891,emb_Dim=100,emb_Mat包含浮点数并具有形状[9891100],sen_len=1000: embed = Emb

我试图在具有文本属性和TFIDF向量的数据集上运行LSTM。我将word嵌入文本并输入到LSTM层。接下来,我连接LSTM输出和TFIDF向量。但是,下面代码中的第2行抛出以下错误:

“ValueError:调用层lstm_1时使用的输入不是符号张量。接收的类型:。完整输入:[]。层的所有输入都应该是张量。”

代码如下所示,其中len(术语索引)+1=9891,emb_Dim=100,emb_Mat包含浮点数并具有形状[9891100],sen_len=1000:

    embed = Embedding(len(term_Index) + 1, emb_Dim, weights=[emb_Mat], 
    input_length=sen_Len, trainable=False)
    lstm = LSTM(60, dropout=0.1, recurrent_dropout=0.1)(embed)
    tfidf_i = Input(shape=(max_terms_art,))
    conc = Concatenate()(lstm, tfidf_i)
    drop = Dropout(0.2)(conc)
    dens = Dense(1)(drop)
    acti = Activation('sigmoid')(dens)

    model = Model([embed, tfidf_i], acti)
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics = ['accuracy'])
    history = model.fit([features_Train, TFIDF_Train], target_Train, epochs = 50, batch_size=128, validation_split=0.20)

看来我无法重现你的错误。在我添加括号后,代码运行得非常好。请参见下面的我的代码:

从tensorflow.keras.layers导入输入、嵌入、LSTM、连接、退出、密集、激活
来自tensorflow.keras导入模型
导入tensorflow作为tf
将numpy作为np导入
emb_Mat=tf.random.normal((9891100)).numpy()
术语索引=tf.random.uniform((9890,).numpy()
sen_Len=1000
emb_Dim=100
最大期限艺术=500
inp=输入(形状=(len(术语索引)
嵌入=嵌入(len(term_Index)+1,emb_Dim,weights=[emb_Mat],input_length=sen_len,trainable=False)(inp)
lstm=lstm(60,辍学率=0.1,经常性辍学率=0.1)(嵌入)
tfidf_i=输入(形状=(最大术语艺术)
conc=Concatenate()([lstm,tfidf_i])
下降=下降(0.2)(浓度)
密度=密度(1)(下降)
acti=激活(‘乙状结肠’)(密度)
模型([inp,tfidf_i],acti).summary()
产出:

Model: "model_2"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_16 (InputLayer)           [(None, 9890)]       0                                            
__________________________________________________________________________________________________
embedding_15 (Embedding)        (None, 9890, 100)    989100      input_16[0][0]                   
__________________________________________________________________________________________________
lstm_8 (LSTM)                   (None, 60)           38640       embedding_15[0][0]               
__________________________________________________________________________________________________
input_17 (InputLayer)           [(None, 500)]        0                                            
__________________________________________________________________________________________________
concatenate_2 (Concatenate)     (None, 560)          0           lstm_8[0][0]                     
                                                                 input_17[0][0]                   
__________________________________________________________________________________________________
dropout_1 (Dropout)             (None, 560)          0           concatenate_2[0][0]              
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            561         dropout_1[0][0]                  
__________________________________________________________________________________________________
activation_1 (Activation)       (None, 1)            0           dense_1[0][0]                    
==================================================================================================
Total params: 1,028,301
Trainable params: 39,201
Non-trainable params: 989,100
__________________________________________________________________________________________________

看来我无法重现你的错误。在我添加括号后,代码运行得非常好。请参见下面的我的代码:

从tensorflow.keras.layers导入输入、嵌入、LSTM、连接、退出、密集、激活
来自tensorflow.keras导入模型
导入tensorflow作为tf
将numpy作为np导入
emb_Mat=tf.random.normal((9891100)).numpy()
术语索引=tf.random.uniform((9890,).numpy()
sen_Len=1000
emb_Dim=100
最大期限艺术=500
inp=输入(形状=(len(术语索引)
嵌入=嵌入(len(term_Index)+1,emb_Dim,weights=[emb_Mat],input_length=sen_len,trainable=False)(inp)
lstm=lstm(60,辍学率=0.1,经常性辍学率=0.1)(嵌入)
tfidf_i=输入(形状=(最大术语艺术)
conc=Concatenate()([lstm,tfidf_i])
下降=下降(0.2)(浓度)
密度=密度(1)(下降)
acti=激活(‘乙状结肠’)(密度)
模型([inp,tfidf_i],acti).summary()
产出:

Model: "model_2"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_16 (InputLayer)           [(None, 9890)]       0                                            
__________________________________________________________________________________________________
embedding_15 (Embedding)        (None, 9890, 100)    989100      input_16[0][0]                   
__________________________________________________________________________________________________
lstm_8 (LSTM)                   (None, 60)           38640       embedding_15[0][0]               
__________________________________________________________________________________________________
input_17 (InputLayer)           [(None, 500)]        0                                            
__________________________________________________________________________________________________
concatenate_2 (Concatenate)     (None, 560)          0           lstm_8[0][0]                     
                                                                 input_17[0][0]                   
__________________________________________________________________________________________________
dropout_1 (Dropout)             (None, 560)          0           concatenate_2[0][0]              
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            561         dropout_1[0][0]                  
__________________________________________________________________________________________________
activation_1 (Activation)       (None, 1)            0           dense_1[0][0]                    
==================================================================================================
Total params: 1,028,301
Trainable params: 39,201
Non-trainable params: 989,100
__________________________________________________________________________________________________

我想你在连接中有一个输入错误,输入应该是一个列表conc=concatenate()([lstm,tfidf_I])我试着添加括号,但我仍然得到同样的错误我想你在连接中有一个输入错误,输入应该是一个列表conc=concatenate()([lstm,tfidf_I])我试着添加括号,但仍然得到同样的错误谢谢!我现在成功地做了一个模型。但是,现在我得到了一个新的错误:ValueError:检查输入时出错:预期输入1具有形状(9891),但在运行时获得了具有形状(1000)的数组:history=model.fit([features\u Train,TFIDF\u Train],target\u Train,epochs=50,batch\u size=128,validation\u split=0.2)您的嵌入输入不正确。确保您的输入与每个层所需的不匹配。据我猜测,您对嵌入层的输入似乎不正确。嵌入层的输入尺寸应为(批量大小,顺序)。请重新检查您的输入实现是否正确:)是的,形状错误,我已经修复了它。无论如何谢谢:)谢谢!我现在成功地做了一个模型。但是,现在我得到了一个新的错误:ValueError:检查输入时出错:预期输入1具有形状(9891),但在运行时获得了具有形状(1000)的数组:history=model.fit([features\u Train,TFIDF\u Train],target\u Train,epochs=50,batch\u size=128,validation\u split=0.2)您的嵌入输入不正确。确保您的输入与每个层所需的不匹配。据我猜测,您对嵌入层的输入似乎不正确。嵌入层的输入尺寸应为(批量大小,顺序)。请重新检查您的输入实现是否正确:)是的,形状错误,我已经修复了它。无论如何,谢谢你:)