层需要 2 个输入,但它收到了 1 个输入张量

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

我正在尝试构建模型来预测喜欢的帖子,该模型采用文本和内容类型,这是一个热门编码列。

我制作了一个 TensorFlow 数据集,但在尝试拟合模型时出现此错误:

Layer "functional_13" expects 2 input(s), but it received 1 input tensors. 
Inputs received: [<tf.Tensor 'data:0' shape=(None, 1000) dtype=int64>]

这是我的代码的一些片段:

dataset = tf.data.Dataset.from_tensor_slices((vectorized_text,
                                             content,
                                             df['likes_rate']))

dataset= dataset.cache()
dataset= dataset.shuffle(160000)
dataset= dataset.batch(16)
dataset= dataset.prefetch(8)

这是我的模型

from tensorflow.keras.layers import Input, Embedding, Concatenate,LSTM,Bidirectional
text_input= Input(shape=(1000,))
content_input=Input(shape=(3,))

text_embeddings = tf.keras.layers.Embedding(Max_Features+1, 32)(text_input)  # Adjust embedding dim
lstm= Bidirectional(LSTM(32,activation='tanh'))(text_embeddings)
# Concatenate text embeddings and content features
combined_features = tf.keras.layers.Concatenate()([lstm, content_input])

# Hidden layers (adjust number/activation functions)
x = tf.keras.layers.Dense(256, activation='relu')(combined_features)
x = tf.keras.layers.Dropout(0.2)(x)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dropout(0.1)(x)
x = tf.keras.layers.Dense(64, activation='relu')(x)
# Output layer for likes prediction
output = tf.keras.layers.Dense(1, activation='linear')(x)

我想为文本创建一个嵌入层,然后将其传递给 LSTM,然后将 LSTM 的输出和内容组合到密集层。

当尝试拟合模型时,我遇到了上述问题。

model = tf.keras.models.Model(inputs=[text_input, content_input], outputs=output)
model.compile(loss='mse',optimizer='Adam')
model.fit(dataset,epochs=10)

如果我迭代数据集。该代码工作正常。但是

.fit
每次都会进行随机权重,因此模型没有任何进展。

for text_batch, content_batch, y_batch in dataset:
    # Train model on the current batch
    model.fit(x=[text_batch, content_batch], y=y_batch)
python tensorflow machine-learning deep-learning nlp
1个回答
0
投票

问题是张量流需要一个输入值,一个输出值,目前您的数据集将返回三个值。您需要结合前两个:

您可以通过压缩值来设置数据集。

X1 = tf.data.Dataset.from_tensors(vectorized_text)
X2 = tf.data.Dataset.from_tensors(content)
X = tf.data.Dataset.zip((X1,X2))
Y = tf.data.Dataset.from_tensors(likes)
dataset = tf.data.Dataset.zip((X, Y))

model = tf.keras.models.Model(inputs=[text_input, content_input], outputs=output)
model.compile(loss='mse',optimizer='Adam')
model.fit(dataset, epochs=10)
© www.soinside.com 2019 - 2024. All rights reserved.