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
相关产品推荐
相关产品推荐

