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

MIT深度学习导论Lab1-Part2代码本地运行报错求助

问题分析与解决:TensorFlow中Embedding层batch_input_shape参数报错

报错原因

你本地使用的TensorFlow 2.16.2(注:你写的16.2应为2.16.2)对应Keras 3.x版本,而Keras 3.x已移除对batch_input_shape参数的支持。Colab上的TensorFlow 2.15.0使用Keras 2.x,该版本允许传递batch_input_shape,因此代码在Colab可正常运行,但本地新版环境下会因参数不被识别触发报错。

解决方法

方法1:改用input_shape参数(推荐)

Keras 3.x无需在层中指定batch维度,直接用input_shape定义输入的非batch部分即可,模型会自动适配不同batch大小。修改Embedding层代码:

tf.keras.layers.Embedding(vocab_size, embedding_dim, input_shape=[None]),

完整修改后的build_model函数:

def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
  model = tf.keras.Sequential([
    # Layer 1: Embedding layer to transform indices into dense vectors
    tf.keras.layers.Embedding(vocab_size, embedding_dim, input_shape=[None]),

    # Layer 2: LSTM with `rnn_units` number of units
    tf.keras.layers.LSTM(rnn_units=rnn_units),

    # Layer 3: Dense layer that transforms output into vocabulary size
    tf.keras.layers.Dense(units=vocab_size, activation='softmax')
  ])

  return model

方法2:使用函数式API固定batch大小

若需强制固定batch尺寸,可改用Keras函数式API构建模型:

def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
    # Define input layer with fixed batch size
    inputs = tf.keras.Input(shape=[None], batch_size=batch_size)
    # Connect embedding layer
    x = tf.keras.layers.Embedding(vocab_size, embedding_dim)(inputs)
    # Connect LSTM layer
    x = tf.keras.layers.LSTM(rnn_units)(x)
    # Connect output layer
    outputs = tf.keras.layers.Dense(vocab_size, activation='softmax')(x)
    # Create model
    model = tf.keras.Model(inputs, outputs)
    return model

内容的提问来源于stack exchange,提问作者Maks V. Zaikin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:40:15