我正在尝试构建模型来预测喜欢的帖子,该模型采用文本和内容类型,这是一个热门编码列。
我制作了一个 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)
问题是张量流需要一个输入值,一个输出值,目前您的数据集将返回三个值。您需要结合前两个:
您可以通过压缩值来设置数据集。
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)