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

TensorFlow中Sequential与Functional API的Embedding行为差异疑问

TensorFlow中Sequential与Functional API调用Embedding层的形状差异:设计预期,非Bug

这个输出形状的差异是设计预期,并不是Bug,核心原因在于两种调用方式对输入维度的处理逻辑不同:

  • Sequential API:当你将Embedding层加入Sequential模型后,模型会自动适配输入形状。你的输入是[32, 100, 1],其中最后一个维度为1(仅包含单个索引值),Sequential会默认将这个多余的维度挤压掉,把输入转换成Embedding层常规的输入格式[32, 100](批次大小,序列长度),因此输出形状为[32, 100, 8](批次大小,序列长度,嵌入维度)。

  • 直接调用层实例(Functional API风格):Embedding层本身支持处理任意维度的输入张量,只要最后一维是整数索引。当输入为[32, 100, 1]时,层会保留所有输入维度,对每个位置的1个索引单独生成嵌入向量,因此输出形状会在原输入形状基础上增加嵌入维度,变成[32, 100, 1, 8]。

如果想要让两种方式输出形状一致,可以做以下调整:

  • 给输入去掉最后一维:将inputs改为np.random.randint(0, 99, [32, 100]),此时两种调用方式都会输出[32, 100, 8]。
  • 直接调用层时手动挤压维度:fm_out = tf.squeeze(myLayer(inputs), axis=-2),这样fm_out.shape就会和Sequential的输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:05:40