You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TextVectorization遇输入维度错误,求技术解决方案

Keras TextVectorization层输入维度错误解决方法

错误核心原因

你的代码存在训练数据与模型结构不匹配的矛盾:

  • 模型定义里包含了TextVectorization层,意味着它期望输入是原始文本字符串;
  • 但调用model.fit时,喂的是已经提前向量化的X_train_vec(二维张量,shape=(样本数, 特征数)),传给TextVectorization层后,不符合它要求的“输入为1维字符串张量”的规则,因此触发维度错误。

两种可行解决思路

思路1:模型内置TextVectorization层(推荐,支持直接处理文本)

这种方式下,训练时直接传入原始文本,由模型内部完成向量化,后续部署也能直接处理文本输入:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout

# 初始化并适配向量层
vectorize_layer = tf.keras.layers.TextVectorization(max_tokens=30000, output_mode='tf_idf', ngrams=2,)
vectorize_layer.adapt(X_train)

# 构建模型:输入为原始文本
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(1,), dtype=tf.string))
model.add(vectorize_layer)
model.add(Dense(256, activation='relu'))  # 无需手动指定input_shape,向量层会自动输出正确维度
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))

model.compile(optimizer='adamax', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

callbacks = [keras.callbacks.ModelCheckpoint("model.keras", save_best_only=True)]

# 直接传入原始文本训练
model.fit(X_train, y_train, epochs=15, batch_size=32, validation_data=(X_valid, y_valid), callbacks=callbacks)

# 加载模型后可直接处理文本输入
model = keras.models.load_model('model.keras')

思路2:提前离线向量化,模型移除TextVectorization层

如果坚持提前完成文本向量化,需要从模型中去掉向量层,直接以向量作为输入:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout

vectorize_layer = tf.keras.layers.TextVectorization(max_tokens=30000, output_mode='tf_idf', ngrams=2,)
vectorize_layer.adapt(X_train)
# 提前完成文本向量化
X_train_vec = vectorize_layer(X_train).numpy()
X_test_vec = vectorize_layer(X_test).numpy()
X_valid_vec = vectorize_layer(X_valid).numpy()

# 构建模型:输入为向量的特征维度
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(X_train_vec.shape[1],)))  # 输入维度为向量的特征数
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))

model.compile(optimizer='adamax', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

callbacks = [keras.callbacks.ModelCheckpoint("model.keras", save_best_only=True)]

# 传入提前向量化后的张量训练
model.fit(X_train_vec, y_train, epochs=15, batch_size=32, validation_data=(X_valid_vec, y_valid), callbacks=callbacks)

model = keras.models.load_model('model.keras')

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:34:51