Python 使用单词嵌入和TFIDF向量的LSTM
我试图在具有文本属性和TFIDF向量的数据集上运行LSTM。我将word嵌入文本并输入到LSTM层。接下来,我连接LSTM输出和TFIDF向量。但是,下面代码中的第2行抛出以下错误: “ValueError:调用层lstm_1时使用的输入不是符号张量。接收的类型:。完整输入:[]。层的所有输入都应该是张量。” 代码如下所示,其中len(术语索引)+1=9891,emb_Dim=100,emb_Mat包含浮点数并具有形状[9891100],sen_len=1000: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
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)您的嵌入输入不正确。确保您的输入与每个层所需的不匹配。据我猜测,您对嵌入层的输入似乎不正确。嵌入层的输入尺寸应为(批量大小,顺序)。请重新检查您的输入实现是否正确:)是的,形状错误,我已经修复了它。无论如何,谢谢你:)