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

TensorFlow Embedding层在双塔推荐系统中触发InvalidArgumentError

问题原因
  • 核心架构错误:完全误用了Embedding层的输入逻辑。Embedding层的输入应为原始整数ID,通过ID直接查询对应的嵌入向量。你在ID输入和Embedding层之间加了全连接层,将整数ID转换成了浮点数张量,传入Embedding层时被当成索引读取,自然会出现远超合法范围的异常数值,本次报错的329416640就是全连接层的输出结果。
  • 次要潜在问题:你统计词典长度用的是全量client_data的去重ID数,如果没有做ID连续化映射,即便直接传入原始ID也可能出现超出索引范围的问题,但本次报错不属于该场景。
解决方案
  • 第一步:修正模型架构,删掉ID输入与Embedding层之间的全连接层,明确指定输入为整数类型,修正后代码如下:
#user input network
input_clients = tf.layers.Input(shape=[1], dtype=tf.int32)
embed_clients = tf.layers.Embedding(client_vocab_len+1, 15)(input_clients)
clients_out = tf.layers.Flatten()(embed_clients)

#product input network
input_products = tf.layers.Input(shape=[1], dtype=tf.int32)
embed_products = tf.layers.Embedding(libelle_vocab_len+1, 15)(input_products)
products_out = tf.layers.Flatten()(embed_products)


conc_layer = tf.layers.Concatenate()([clients_out, products_out])
x = tf.layers.Dense(128, activation='relu')(conc_layer)
#x = tf.layers.Dropout(0.3)(x)
x = tf.layers.Dense(128, activation='relu')(x)
x_out = tf.layers.Dense(1, activation='relu')(x)
model = tf.Model([input_clients, input_products], x_out)
  • 第二步:做ID连续化映射:如果原始CLI_ID、prod_id不是从0开始的连续整数,需要建立映射字典,将所有出现过的业务ID转换为0到对应词汇量-1的连续值,避免合法业务ID超出Embedding索引范围。
  • 第三步:训练前增加异常值校验,执行以下代码确认训练、测试集中的ID都在合法范围内:
# 校验用户ID范围
assert Xtrain.CLI_ID.max() < client_vocab_len + 1
assert Xtest.CLI_ID.max() < client_vocab_len + 1
assert Xtrain.CLI_ID.min() >= 0
assert Xtest.CLI_ID.min() >= 0

# 校验商品ID范围
assert Xtrain.prod_id.max() < libelle_vocab_len + 1
assert Xtest.prod_id.max() < libelle_vocab_len + 1
assert Xtrain.prod_id.min() >= 0
assert Xtest.prod_id.min() >= 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:08